1. matplotlib
主要用于开发2d图表 3d也可以绘画
绘图流程:
- 创建画布
- 绘制图像
- 显示图像
2. 三层结构
容器层
- canvas
- figure
- axes
辅助显示层
- 添加x轴 y轴描述 标题等等
图像层
- 绘制什么图像的声明
3. 绘制
- plt.figure(figsize=(), dpi=) figsize:指定图的长宽 dpi:图像的清晰度 返回fig对象 创建画布
- plt.plot(x, y) 绘制图像
- plt.show() 显示图像
import matplotlib.pyplot as plt#创建画布 figesize为画布尺寸 dpi是像素点plt.figure(figsize=(20, 8), dpi=100)#图像绘制x = [1, 2, 3]y = [4, 5, 6]plt.plot(x, y)#图像展示plt.show()
4. 保存为图片
#创建画布 figesize为画布尺寸 dpi是像素点plt.figure(figsize=(20, 8), dpi=100)#图像绘制x = [1, 2, 3]y = [4, 5, 6]plt.plot(x, y)#保存图片plt.savefig("test-mat.png")#图像展示 show会释放资源 当show调用后plt对象对应的资源也释放了 无法保存为图片plt.show()
5. 折线图绘画
import randomx = range(60)y = [random.uniform(10, 15) for i in x]plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)# 创建画布plt.figure(figsize=(15, 8), dpi=300)# 绘制plt.plot(x, y)# 添加 x,y轴刻度y_ticks = range(40) # 需要提供一个列表plt.yticks(y_ticks[::5]) # 通过yticks方法赋予属性x_ticks_label = ["11点{}分".format(i) for i in x]plt.xticks(x[::5], x_ticks_label[::5]) #第一个参数必须为数字不能为字符串数组#添加网格plt.grid(True, linestyle="-",alpha=1) #linestyle为线样式 -为折线 --为虚线 alpha为线的透明度#添加描述plt.xlabel("时间")plt.ylabel("温度")plt.title("一小时温度变化图")plt.show()

6. 中文显示问题解决
plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False
7. 多次plot和图例
x = range(60)y_beijing = [random.uniform(10, 15) for i in x]y_shanghai = [random.uniform(10, 25) for i in x]plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.figure(figsize=(15, 8), dpi=300)plt.plot(x, y_beijing, label="北京")plt.plot(x, y_shanghai, label="上海",color='r' , linestyle='-') # 第二次绘制 如果想显示图例必须赋予laber图例名 color 为线条颜色 linestyle为线条样式#具体值参照以下图y_ticks = range(40)plt.yticks(y_ticks[::5])x_ticks_label = ["11点{}分".format(i) for i in x]plt.xticks(x[::5], x_ticks_label[::5])plt.grid(True, linestyle="-", alpha=1)plt.xlabel("时间")plt.ylabel("温度")plt.title("一小时温度变化图")# 显示图例plt.legend(loc=3) #loc为图例位置 值参照以下图plt.show()

7.1. 图例显示位置
# 绘制折线图plt.plot(x, y_shanghai, label="上海")# 使用多次plot可以画多个折线plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")# 显示图例plt.legend(loc="best")

8. 多个坐标系显示
x = range(60)y_beijing = [random.uniform(10, 15) for i in x]y_shanghai = [random.uniform(10, 25) for i in x]plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False# 使用subplot绘制多个坐标系# plt.figure(figsize=(15, 8), dpi=300)fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=300) #nrows 几行 ncols几列 并且大部分需要转换为set_xxxx方法# plt.plot(x, y_beijing, label="北京")# plt.plot(x, y_shanghai, label="上海",color='r' , linestyle='-')axes[0].plot(x, y_beijing, label="北京")axes[1].plot(x, y_shanghai, label="上海", color='r', linestyle='-')y_ticks = range(40)# plt.yticks(y_ticks[::5])axes[0].set_yticks(y_ticks[::5])axes[1].set_yticks(y_ticks[::5])x_ticks_label = ["11点{}分".format(i) for i in x]# plt.xticks(x[::5], x_ticks_label[::5])axes[0].set_xticks(x[::5])axes[0].set_xticklabels(x_ticks_label[::5])axes[1].set_xticks(x[::5])axes[1].set_xticklabels(x_ticks_label[::5])plt.grid(True, linestyle="-", alpha=1)# plt.xlabel("时间")# plt.ylabel("温度")# plt.title("一小时温度变化图")axes[0].set_xlabel("时间")axes[0].set_ylabel("温度")axes[0].set_title("北京一小时温度变化图")axes[1].set_xlabel("时间")axes[1].set_ylabel("温度")axes[1].set_title("上海一小时温度变化图")# plt.legend(loc=3)axes[0].legend(loc=3)axes[1].legend(loc=3)plt.show()

9. 数学折线图 figure
import numpy as np# 从-10 到 10 的1000个数据x = np.linspace(-10,10,1000)y = np.sin(x)plt.figure(figsize=(20,8),dpi=100)plt.plot(x,y)plt.grid()plt.show

10. 散点图 scatter
x = [10.0, 8.07, 13.0, 9.05, 11.0, 14.0, 13.4, 10.0, 14.0, 12.5, 9.15,11.5, 3.03, 12.2, 2.02, 1.05, 4.05, 6.03, 12.0, 12.0, 7.08, 5.02]y = [8.04, 6.95, 7.58, 8.81, 8.33, 7.66, 6.81, 6.33, 8.96, 6.82, 7.20,7.20, 4.23, 7.83, 4.47, 3.33, 4.96, 7.24, 6.26, 8.84, 5.82, 5.68]plt.figure(figsize=(20, 8), dpi=100)#散点图plt.scatter(x, y)plt.grid()plt.show

11. 柱状图 bar
x =['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']y =[120, 200, 150, 80, 70, 110, 130]plt.figure(figsize=(20, 8), dpi=100)#柱状图plt.bar(x, y,width=0.4) #width为柱状图宽度plt.grid()plt.show

12. 饼图 pie
x =[2,5,12,70,2,9]labels = ['娱乐','育儿','饮食','房贷','交通','其它']plt.figure(figsize=(20, 8), dpi=100)#饼图plt.pie(x,labels=labels) #x为数据 labels为lengt的名称plt.grid()plt.show

13. 直方图 hist
plt.rcParams['font.family']='SimHei'plt.rcParams['font.size']=20# 直方图mu = 100sigma = 20x = np.random.normal(100,20,100) # 均值和标准差plt.hist(x,bins=20,color='red',histtype='stepfilled',alpha=0.75)plt.title('直方图数据分析与展示')plt.show()

