小言_互联网的博客

Matplotlib绘制折线图

473人阅读  评论(0)

一、上海中午11点–12点某城市温度变化图

import matplotlib.pyplot as plt
import random

# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]

# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)

# 2.绘制图像
plt.plot(x, y_shanghai)

# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

# 刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

# 2.2 添加网格显示
plt.grid(True, linestyle="--", alpha=0.5)

# 2.3 添加描述信息
plt.xlabel("时间", fontsize=16)
plt.ylabel("温度", fontsize=16)
plt.title("上海中午11点--12点某城市温度变化图", fontsize=20)

# 2.4 图像保存
plt.savefig("data/test.png")

# 3.图像显示
plt.show()

二、 在一个坐标系中绘制多个图像

import matplotlib.pyplot as plt
import random

# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]

# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)

# 2.绘制图像
plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")

# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

# 刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

# 2.2 添加网格显示
plt.grid(True, linestyle="--", alpha=0.5)

# 2.3 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点--12点某城市温度变化图", fontsize=20)

# 2.4 添加图例
plt.legend(loc=0)

# 2.5 图像保存
plt.savefig("./test.png")

# 3.图像显示
plt.show()

1. 设置图形风格

# 增加北京的温度数据
y_beijing = [random.uniform(1, 3) for i in x]

# 绘制折线图
plt.plot(x, y_shanghai)
# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--')
颜色字符 风格字符
r 红色 - 实线
g 绿色 - - 虚线
b 蓝色 -. 点划线
w 白色 : 点虚线
c 青色 ’ ’ 留空、空格
m 洋红
y 黄色
k 黑色

2. 显示图例

# 绘制折线图
plt.plot(x, y_shanghai, label="上海")
# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")

# 显示图例
plt.legend(loc="best")
Location String Location Code
‘best’ 0
‘upper right’ 1
‘upper left’ 2
‘lower left’ 3
‘lower right’ 4
‘right’ 5
‘center left’ 6
‘center right’ 7
‘lower center’ 8
‘upper center’
‘center’ 10

三、多个坐标系显示 plt.subplots(面向对象的画图方法)

import matplotlib.pyplot as plt
import random

# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 5) for i in x]

#创建刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)


#1.创建画布
fig,axes=plt.subplots(nrows=2,ncols=1,figsize=(20,16),dpi=100)


#绘制第一个坐标系xx 
#2.1绘图
axes[0].plot(x,y_shanghai, color="r", linestyle="--",label='上海')
#2.2设置刻度标签
axes[0].set_xticks(x[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[0].set_yticks(y_ticks[::5])
#2.3 设置轴标题
axes[0].set_xlabel('时间',fontsize=14)
axes[0].set_ylabel('温度',fontsize=14)
axes[0].set_title('上海市一小时温度变化图',fontsize=20)
#2.4显示网格
axes[0].grid(True,linestyle='--',alpha=0.5)
#2.5显示图例
axes[0].legend(loc=0)


#绘制第二个坐标系
#2.1绘图
axes[1].plot(x,y_beijing,label='北京')
#2.2设置刻度标签
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_ticks_label[::5])
axes[1].set_yticks(y_ticks[::5])
#2.3 设置轴标题
axes[1].set_xlabel('时间',fontsize=14)
axes[1].set_ylabel('温度',fontsize=14)
axes[1].set_title('北京市一小时温度变化图',fontsize=20)
#2.4显示网格
axes[1].grid(True,linestyle='--',alpha=0.5)
#2.5显示图例
axes[1].legend(loc=0)

#3.保存图像
plt.savefig('data/axes.png')
#4.显示图像
plt.show()

四、绘制sin(x)函数

import numpy as np
import matplotlib.pyplot as plt

# 0.准备数据
x = np.linspace(-10, 10, 1000)
y = np.sin(x)

# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)

# 2.绘制函数图像
plt.plot(x, y)
# 2.1 添加网格显示
plt.grid()
# 2.2 添加描述信息
plt.title("sin(x)函数", fontsize=20)

#3.保存图像
plt.savefig('data/sin(x).png')

#4.显示图像
plt.show()

五、总结

  1. 添加x,y轴刻度
    • plt.xticks()
    • plt.yticks()
    • 注意:在传递进去的第一个参数必须是数字,不能是字符串,如果是字符串吗,需要进行替换操作
  2. 添加网格显示
    • plt.grid(linestyle="–", alpha=0.5)
  3. 添加描述信息
    • plt.xlabel()
    • plt.ylabel()
    • plt.title()
  4. 图像保存
    • plt.savefig(“路径”)
  5. 多次plot
    • 直接进行添加就OK
  6. 显示图例
    • plt.legend(loc=“best”)
    • 注意:一定要在plt.plot()里面设置一个label,如果不设置,没法显示
  7. 多个坐标系显示
    • plt.subplots(nrows=, ncols=)
  8. 折线图的应用
    • 应用于观察数据的变化
    • 可以画出一些数学函数图像

转载:https://blog.csdn.net/geek64581/article/details/106191962
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场