matplotlib的使用

时间:2019-04-20
本文章向大家介绍matplotlib的使用,主要包括matplotlib的使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

举个例子:

假设一天中每隔两个小时(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() 

 但是不保证成功,因为电脑的字体配置情况不同

第二种推荐的方法:

自己设置字体文件:(字体库下载

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)