matplotlib 折线图
1、基本要点
# 导入模块 from matplotlib import pyplot as plt # x轴数据 x = range(2, 26, 2) # y轴数据 y = [15, 13, 14.5, 17, 20, 25, 26, 26, 27, 22, 18, 15] # 绘图 plt.plot(x, y) # 展示图片 plt.show()
注意: x轴和y轴是可迭代对象,x轴和y轴的数值必须一一对应, x和y中的值必须是数子
2、设置图行大小
plt.figure(figsize=(宽, 高), dpi=80) # 注意:设置图形大小,要在绘图的前面
3、保存图片
plt.savefig('./名称.png') # 注意: # 保存图片要在,绘图之后 # 可以保存为矢量图(svg)
4、调整x轴或y轴上的刻度
plt.xticks(可迭代对象) plt.yticks(可迭代对象) # 注意: # 调整x轴或y轴的刻度,要放在保存或展示图片的前面
例子
# 导入模块 from matplotlib import pyplot as plt # x轴数据 x = range(2, 26, 2) # y轴数据 y = [15, 13, 14.5, 17, 20, 25, 26, 26, 27, 22, 18, 15] # 设置图形大小 plt.figure(figsize=(20, 8), dpi=80) # 绘图 plt.plot(x, y) # 调整x轴的刻度 plt.xticks(x) # 调整y轴的刻度 plt.yticks(range(min(y), max(y) + 1)) # 保存图片 # plt.savefig('./test.svg') # 展示图片 plt.show()
5、调整x轴或y轴的刻度并显示标签
plt.xticks(ticks, labels, rotation=45) # 注意 # ticks和labels的数据类型最好是列表,方便调整刻度 # ticks和labels即数字和字符串要一一对应,步长也要一致 # rotation调整标签的旋转
例子
import random from matplotlib import pyplot as plt y = [random.randint(20, 35) for i in range(120)] x = range(120) # 设置图形大小 plt.figure(figsize=(20, 8), dpi=80) # 绘图 plt.plot(x, y) # 设置x轴刻度 x = list(x) x_labels = ['10H:{}M'.format(i) for i in range(60)] x_labels += ['11H:{}M'.format(i) for i in range(60)] plt.xticks(x[::3], x_labels[::3], rotation=45) # 设置y轴刻度 plt.yticks(range(min(y), max(y) + 1)) # 展示图片 plt.show()
6、显示中文
a、查看字体
linux/mac查看支持的字体 fc-list # 查看支持的字体 fc-list :lang=Zhang # 查看支持的中文(冒号前面加空格) windows查看支持的字体 Win+R, 输入fonts 获取字体路径: 推荐使用git bash 查看字体 cd 'C:\Windows\Fonts' ls -l 一般使用 msyh.ttc
b、设置
修改matplotlib的默认字体
1.matplotlib.rc,具体看源码(windows/linux),不是百分百成功
2.matplotlib下的font_manager(windwos/linux/mac),百分百成功
# 导入模块 from matplotlib import font_manager # 设置显示中文 my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\msyh.ttc') # 添加fontproperties=my_font的属性 plt.xticks(x[::3], x_labels[::3], rotation=45, fontproperties=my_font) # 注意: 设置中文显示时 # 只有plt.legend, 使用prop # 其它使用fontproperties
例子
import random from matplotlib import pyplot as plt from matplotlib import font_manager # 设置显示中文 my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\msyh.ttc') y = [random.randint(20, 35) for i in range(120)] x = range(120) # 设置图形大小 plt.figure(figsize=(20, 8), dpi=80) # 绘图 plt.plot(x, y) # 设置x轴刻度,显示标签(中文) x = list(x) x_labels = ['10时:{}分'.format(i) for i in range(60)] x_labels += ['11时:{}分'.format(i) for i in range(60)] plt.xticks(x[::3], x_labels[::3], rotation=45, fontproperties=my_font) # 设置y轴刻度 plt.yticks(range(min(y), max(y) + 1)) # 展示图片 plt.show()
7、设置描述信息
# 1. 设置x轴的label plt.xlabel() # 2. 设置y轴的label plt.ylabel() # 3. 设置title plt.title() # 注意 # 设置描述信息要在保存、展示的前面 # 显示中文用fontproperties
例子
# 设置中文字体 my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\msyh.ttc') # 描述信息 plt.xlabel('时间', fontproperties=my_font) plt.ylabel('温度 单位(℃)', fontproperties=my_font) plt.title('10点到12点每分钟的温度变化', fontproperties=my_font)
8、添加网格
plt.grid(alpha=0.5) # alpha网格的alpha值(0~1) # 在展示图片和保存图片前
9、添加图例
# 中文显示 my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\msyh.ttc') # 绘图 plt.plot(x, y, label='该折线的描述名称') # 添加图例 plt.legend(prop=my_font, loc='') # 注意: loc参数设置图例的位置,具体看源码,一般默认即可 # best # upper right # upper left # lower left # lower right # right # center left # center right # lower center # upper center # center
10、自定义绘图的风格
plt.plot(color='', linestyle='', linewidth= , alpha= ) # color 线条颜色 # 16进制的颜色代码 # linestyle 线条风格 # - 实线 # -- 虚线 # -. 点划线 # : 点虚线 # linewidth 线条粗细 # alpha 透明度 # 注意:这些风格对网格(grid())同样有效
例子
# -*- encoding: utf-8 -*- from matplotlib import pyplot as plt from matplotlib import font_manager # # 设置中文字体 my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\msyh.ttc') y1 = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 4, 3, 3, 1, 1, 1] y2 = [1, 0, 3, 1, 2, 2, 3, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1] x = range(11, 31) # 设置图形大小 plt.figure(figsize=(20, 8), dpi=80) # 绘图 plt.plot(x, y1, label='自己', linestyle=':') plt.plot(x, y2, label='敌人', color='#00FF00') # 设置x轴y刻度 x = list(x) x_labels = ['{}岁'.format(i) for i in x] plt.xticks(x, x_labels, fontproperties=my_font) plt.yticks(range(0, 7)) # 设置描述信息 plt.xlabel('年龄', fontproperties=my_font) plt.ylabel('人数', fontproperties=my_font) plt.title('11岁到30岁每年交的女朋友', fontproperties=my_font) # 绘制网格 plt.grid(alpha=0.8, linestyle=':', color='#DC143C') # 添加图例 plt.legend(prop=my_font) plt.show()