目录
介绍:
举个例子(一天天气变化图):
假设一天中每隔两个小时(range(2,26,2))的气温(℃)分别是[15,13,14.5,17,20,25,26,26,27,22,18,15],将其变成折线图进行展示
在windows中系统中展示的图片如图:
现在来优化代码:
设置图片大小
from matplotlib import pyplot as plt x = range(2, 26, 2) y = [15,13,14.5,17,20,25,26,26,27,22,18,15] # figure图形图标的意思,这里只画的图 # 通过实例化一个figure并且传递参数,能够在后台自动使用该figure实例 # dpi 表示一个像素点的个数 plt.figure(figsize=(10, 7), dpi=80) # 绘制折线图 plt.plot(x, y) # 保存(svg文件在浏览器中打开放大不会失帧) plt.savefig('./sig_size.png') # 展示图形 # plt.show()
图片展示
设置x,y轴的数值
from matplotlib import pyplot as plt x = range(2, 26, 2) y = [15,13,14.5,17,20,25,26,26,27,22,18,15] plt.figure(figsize=(10, 7), dpi=80) plt.plot(x, y) # 单独设置x轴 # _xticks = range(2, 26, 2) # list(_xticks): [2,4,6,8...] _xticks = [i/2 for i in range(4, 49)] # [2.0, 2.5, 3.0, 3.5 .....] # 刻度太密集可以使用列表步长 plt.xticks(_xticks[::3]) # y轴利用数据最小值最大值进行设置范围(最大值需要+1才能取到值) plt.yticks(range(min(y), max(y)+1)) plt.show()
举个例子(两小时随机温度图)
如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况?
a= [random.randint(20,35) for i in range(120)]
从逻辑上完成功能实现:
import random from matplotlib import pyplot as plt x = range(0, 120) y = [random.randint(20,35) for i in range(120)] plt.figure(figsize=(16, 8), dpi=80) plt.plot(x, y) # 设置x轴刻度 _xticks_label = ['10点{}分'.format(i) for i in range(60)] _xticks_label += ['11点{}分'.format(i) for i in range(60)] #rotation 旋转 plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45) plt.yticks(range(min(y), max(y)+1)) plt.show()
但是会发现字体出现问题
所以在windows,或者linux中,可能有效的办法:
import random import matplotlib from matplotlib import pyplot as plt
# 这是windows和linux设置字体的方式
font = { 'family': 'MicroSoft YaHei', 'weight': 'bold', 'size': 'larger' } matplotlib.rc("font", **font) # 类似于matplotlib.rc("font", family='MicroSoft YaHei', weight='blod', size='larger') x = range(0, 120) y = [random.randint(20,35) for i in range(120)] plt.figure(figsize=(16, 8), dpi=80) plt.plot(x, y) # 设置x轴刻度 _xticks_label = ['10点{}分'.format(i) for i in range(60)] _xticks_label += ['11点{}分'.format(i) for i in range(60)] #rotation 旋转
#取步长,数字和字符串一一对应,数据的长度一样
plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45) plt.yticks(range(min(y), max(y)+1)) plt.show()
但是不保证成功,因为电脑的字体配置情况不同
第二种推荐的方法:
自己设置字体文件:(字体库下载)windows在 C:WindowsFonts路径下就是字体文件
import random import matplotlib from matplotlib import pyplot as plt from matplotlib import font_manager # 另一种设置字体的方式 my_font = font_manager.FontProperties(fname="./Hiragino Sans GB.ttc") x = range(0, 120) y = [random.randint(20,35) for i in range(120)] plt.figure(figsize=(16, 8), dpi=80) plt.plot(x, y) # 设置x轴刻度 _xticks_label = ['10点{}分'.format(i) for i in range(60)] _xticks_label += ['11点{}分'.format(i) for i in range(60)] #rotation 旋转 plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45, fontproperties=my_font) plt.yticks(range(min(y), max(y)+1)) plt.show()
可以通过size属性设置字体大小:
plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45, fontproperties=my_font, size=12)
再给折线图添加一些描述信息,就算完成了
import random import matplotlib from matplotlib import pyplot as plt from matplotlib import font_manager # 另一种设置字体的方式 my_font = font_manager.FontProperties(fname="./Hiragino Sans GB.ttc") x = range(0, 120) y = [random.randint(20,35) for i in range(120)] plt.figure(figsize=(14, 8), dpi=80) plt.plot(x, y) # 设置x轴刻度 _xticks_label = ['10点{}分'.format(i) for i in range(60)] _xticks_label += ['11点{}分'.format(i) for i in range(60)] #rotation 旋转 #取步长,数字和字符串一一对应,数据的长度一样 plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45, fontproperties=my_font, size=10) plt.yticks(range(min(y), max(y)+1)) # 添加描述信息 plt.xlabel('时间', fontproperties=my_font, size=14) plt.ylabel('温度(单位:℃)', fontproperties=my_font, size=14) plt.title('10点到12点每分钟气温的变化情况', fontproperties=my_font, size=20) plt.show()
举个例子(个人交往统计图)
假设大家在30岁的时候,根据自己的实际情况,统计出来了从11岁到30岁每年交的女(男)朋友的数量如列表a,请绘制出该数据的折线图,以便分析自己每年交女(男)朋友的数量走势
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
要求:
y轴表示个数
x轴表示岁数,比如11岁,12岁等
from matplotlib import pyplot as plt from matplotlib import font_manager my_font = font_manager.FontProperties(fname='./Hiragino Sans GB.ttc') x = range(11, 31) y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1] plt.figure(figsize=(10, 7), dpi=80) plt.plot(x, y) _xtick_label = ['{}岁'.format(i) for i in x] plt.xticks(x, _xtick_label, fontproperties=my_font) # 辅助线 plt.grid(alpha=0.4) # 透明度 plt.xlabel('时间', fontproperties=my_font) plt.ylabel('女朋友数(单位:个)', fontproperties=my_font) plt.title('11到30岁之间谈过的女朋友的数量统计', fontproperties=my_font) plt.show()
举个例子(多人交往统计图)
假设大家在30岁的时候,根据自己的实际情况,统计出来了你和你同桌各自从11岁到30岁每年交的女(男)朋友的数量如列表a和b,
请在一个图中绘制出该数据的折线图,以便比较自己和同桌20年间的差异,同时分析每年交女(男)朋友的数量走势
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
b = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]
要求:
y轴表示个数
x轴表示岁数,比如11岁,12岁等
legend(loc=数字)
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' | 9 |
'center' | 10 |
from matplotlib import pyplot as plt from matplotlib import font_manager my_font = font_manager.FontProperties(fname='./Hiragino Sans GB.ttc') x = range(11, 31) 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] plt.figure(figsize=(10, 7), dpi=80) plt.plot(x, y1, label='自己', color='r', linestyle='--') plt.plot(x, y2, label='同桌', linewidth=5, alpha=0.8) _xticks_label = ['{}岁'.format(i) for i in x] plt.xticks(x, _xticks_label, fontproperties=my_font) plt.grid(alpha=0.4) # 添加图例 plt.legend(prop=my_font, loc=0) plt.show()
总结:
STXINGKA.TTF