Fork me on GitHub

Matplotlib的使用

一、Matplotlib的简单使用

Python底层绘图库,主要做数据可视化图表。

(一)Matplotlib的安装

可通过pip进行安装

pip install matplotlib  

(二)简单使用

1、气温实例

假设一天24小时,每间隔2小时统计一次气温,这样就统计了12个气温,假设分别为[12,25,13,6,8,20,23,10,15,8,16,18],通过折线图表示。

from matplotlib import pyplot as plt #导入pyplot

x = range(1,25,2)  #数据在x轴,是一个可迭代的对象
y = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象

plt.plot(x,y) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
plt.show() #展示图形

这样就展示了图形:

 

显然,这并不是我们想要的结果,至少坐标轴上的刻度不对呀,这是matplotlib自动为我们生成的,所以我们可以对上面生成的图进行一些设置:

  • 设置图片大小、保存图片到本地
from matplotlib import pyplot as plt #导入pyplot

plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰

x = range(1,25,2)  #数据在x轴,是一个可迭代的对象
y = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象

plt.plot(x,y) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
plt.savefig('./page2.png')  #保存图片
plt.show() #展示图形
  • 调整x、y轴上的刻度
from matplotlib import pyplot as plt #导入pyplot

plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰

x = range(1,25,2)  #数据在x轴,是一个可迭代的对象
y = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象

plt.plot(x,y) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
plt.xticks(x) #修改x刻度 另外也可以自己设置步长 plt.xtickets(x[::2])
plt.yticks(range(1,31)[::5]) ##修改y刻度 另外也可以自己设置步长
# plt.savefig('./page2.png')  #保存图片
plt.show() #展示图形

另外如果想让轴上以字符串的形式显示出来,上面这样做还不够,还需要如下的操作:

from matplotlib import pyplot as plt #导入pyplot

plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰

x = range(1,25,2)  #数据在x轴,是一个可迭代的对象
y = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象
_x_tickets = ['{}点'.format(i) for i in x]
_y_tickets = ['{}℃'.format(i) for i in range(1,31)]

plt.plot(x,y) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
plt.xticks(x,_x_tickets,rotation=45) #注意x,_x_tickets的长度必须保持一致,roration是旋转角度
plt.yticks(range(1,31)[::5],_y_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
# plt.savefig('./page2.png')  #保存图片
plt.show() #展示图形

可以看到图中的汉字没有出现:

 

所以,下一步应该让其显示中文汉字,matplotlib默认不支持中文字符,那么如何修改其默认字符呢?

  • 修改默认字符

方法一:通过matplotlib.rc修改

方法二:通过matplotlib下的font_manager进行修改

 

from matplotlib import pyplot as plt #导入pyplot
from matplotlib import font_manager

plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰

x = range(1,25,2)  #数据在x轴,是一个可迭代的对象
y = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象
#设置中文字体
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')

_x_tickets = ['{}点'.format(i) for i in x]
_y_tickets = ['{}℃'.format(i) for i in range(1,31)]

plt.plot(x,y) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
plt.xticks(x,_x_tickets,rotation=45,fontproperties=my_font) #注意x,_x_tickets的长度必须保持一致
plt.yticks(range(1,31)[::5],_y_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
# plt.savefig('./page2.png')  #保存图片
plt.show() #展示图形

此时,x轴上就有中文了。

  •  给图像添加描述信息
from matplotlib import pyplot as plt #导入pyplot
from matplotlib import font_manager

#设置中文字体
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')

plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰
x = range(1,25,2)  #数据在x轴,是一个可迭代的对象
plt.xlabel('时间(h)',fontproperties=my_font)
y = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象
plt.ylabel('温度(℃)',fontproperties=my_font)
_x_tickets = ['{}点'.format(i) for i in x]
_y_tickets = ['{}℃'.format(i) for i in range(1,31)]
plt.title('温度曲线',fontproperties=my_font)
plt.plot(x,y) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
plt.xticks(x,_x_tickets,rotation=45,fontproperties=my_font) #注意x,_x_tickets的长度必须保持一致
plt.yticks(range(1,31)[::5],_y_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
# plt.savefig('./page2.png')  #保存图片
plt.show() #展示图形

结果如下:

 

 2、需求升级

如果在上面图中画出两条温度曲线,也就是第二天的温度曲线,这时只需要使用plt再画一次即可,如:

from matplotlib import pyplot as plt #导入pyplot
from matplotlib import font_manager

#设置中文字体
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')

plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰
x1 = range(1,25,2)  #数据在x轴,是一个可迭代的对象
x2 = range(1,25,2)  #数据在x轴,是一个可迭代的对象
plt.xlabel('时间(h)',fontproperties=my_font)
y1 = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象
y2 = [10,8,10,6,8,10,21,10,11,8,15,9]  #数据在y轴,是一个可迭代的对象

plt.ylabel('温度(℃)',fontproperties=my_font)
_x1_tickets = ['{}点'.format(i) for i in x1]
_y1_tickets = ['{}℃'.format(i) for i in range(1,31)]
_x2_tickets = ['{}点'.format(i) for i in x2]
_y2_tickets = ['{}℃'.format(i) for i in range(1,31)]
plt.title('温度曲线',fontproperties=my_font)
plt.plot(x1,y1) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
plt.plot(x2,y2) #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
plt.xticks(x1,_x1_tickets,rotation=45,fontproperties=my_font) #注意x,_x_tickets的长度必须保持一致
plt.yticks(range(1,31)[::5],_y1_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
plt.xticks(x2,_x2_tickets,rotation=45,fontproperties=my_font) #注意x,_x_tickets的长度必须保持一致
plt.yticks(range(1,31)[::5],_y2_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
# plt.savefig('./page2.png')  #保存图片
plt.show() #展示图形

结果如下:

 

对上面的图中进行属性设置,包括线条颜色、样式、图例等。

from matplotlib import pyplot as plt #导入pyplot
from matplotlib import font_manager

#设置中文字体
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')

plt.figure(figsize=(20,8),dpi=80)  #figure指的就是我们画的图,dpi让图片更清晰
x1 = range(1,25,2)  #数据在x轴,是一个可迭代的对象
x2 = range(1,25,2)  #数据在x轴,是一个可迭代的对象
plt.xlabel('时间(h)',fontproperties=my_font)
y1 = [12,25,13,6,8,20,23,10,15,8,16,18]  #数据在y轴,是一个可迭代的对象
y2 = [10,8,10,6,8,10,21,10,11,8,15,9]  #数据在y轴,是一个可迭代的对象

plt.ylabel('温度(℃)',fontproperties=my_font)
_x1_tickets = ['{}点'.format(i) for i in x1]
_y1_tickets = ['{}℃'.format(i) for i in range(1,31)]
_x2_tickets = ['{}点'.format(i) for i in x2]
_y2_tickets = ['{}℃'.format(i) for i in range(1,31)]
plt.title('温度曲线',fontproperties=my_font)
plt.plot(x1,y1,label='第一天') #传入x,y通过plot进行绘制图形,(1,12),(3,25)...
plt.plot(x2,y2,label='第二天',color='red',linestyle='--',linewidth=5,alpha=0.5) #定义样式.
plt.xticks(x1,_x1_tickets,rotation=45,fontproperties=my_font) #注意x,_x_tickets的长度必须保持一致
plt.yticks(range(1,31)[::5],_y1_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
plt.xticks(x2,_x2_tickets,rotation=45,fontproperties=my_font) #注意x,_x_tickets的长度必须保持一致
plt.yticks(range(1,31)[::5],_y2_tickets[::5]) #注意y,_y_tickets的长度必须保持一致
# plt.savefig('./page2.png')  #保存图片
plt.grid(alpha=0.5) #绘制网格
plt.legend(prop=my_font,loc="upper left") #添加图例
plt.show() #展示图形

结果如下:

 

 二、总结

 Matplotlib的学习可参考官方中给的文档:https://matplotlib.org/

在上面简单的实例中,有如下的要点:

  • 绘制折线图
plt.plot(x,y)
  • 设置图片大小和分辨率
plt.figure(figsize=(20,8),dpi=80)
  • 保存图片
plt.savefig('./ex1.png') 
  • 设置x,y刻度
plt.xticks(x) 
plt.yticks(range(1,31)[::5]) 
  • 设置x,y轴标题
plt.xlabel('时间(h)',fontproperties=my_font)
plt.ylabel('温度(℃)',fontproperties=my_font)
  • 设置字体
#设置中文字体
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')
  • 绘制多个图形

多次使用plt.plot方法即可

  • 添加图例
plt.legend(prop=my_font,loc="upper left") #添加图例
  • 添加网格
plt.grid(alpha=0.5) #绘制网格

 

posted @ 2020-01-04 19:40  iveBoy  阅读(465)  评论(0编辑  收藏  举报
TOP