Matplotlib是一个python的2D绘图库,是比较流行的底层绘图库。
Matplotlib库模仿MATALAB,所以部分的语言语法及规范和MATLAB相同。
Matplotlib主要用于数据可视化,可以直观表现数据信息,使得数据更加具体,容易理解。
Matplotlib可以绘制各种各样的数据图形,基本常用的是折线图、散点图、柱状图(条形图)、直方图等
import numpy as np
import matplotlib.pyplot as plt
#x轴
x=np.arange(0,5,0.1)
#y轴
y=np.sin(x)
#绘制图形
plt.plot(x,y)
plt.show()
from matplotlib import pyplot as plt
x=range(2,27,2)
y=[15,13,14,5,17,28,25,26,26,24,22,18,15]
#设置图片大小(figsize)和像素(dpi),figure表示轮廓图(或画布)
#可以实例化一个figure对象并传递参数,之后该实例增加或修改参数或是供其他函数调用
fig=plt.figure(figsize=(20,8),dpi=80)
#设置x轴的坐标刻度
plt.xticks(range(2,26))
#绘制图形
plt.plot(x,y)
#保存图片,'./matfig1.png'为保存路径,图片的存储格式为png.
plt.savefig('./matfig1.png')
plt.show()
默认情况下matplotlib不支持中文字符,所以要注意设置中文字体
(1)首先查找本机字体存储位置
linux/mac/window下查找本机字体存储地址:
fc-list %查找所有字体存储地址
fc-list :lang=zh %查看中文字体存储地址(冒号前有空格)
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname="C:/WINDOWS/fonts/msyhl.ttc")
(1)画出一个在10时、11时温度随着时间变化的折线图
from matplotlib import pyplot as plt
import random
from matplotlib import font_manager
#1、一种使用matplotlib.rc模块设定字体的方法
#import matplotlib
#font={'family':'Microsoft YaHei',
# 'weight':'bold',
# 'size':'large'}
#matplotlib.rc["font",**font]
#matplotlib.rc["font",family='Microsoft YaHei',weight='bold']
#2、第二种利用matplotlib.font_manager设置字体的方法
my_font=font_manager.FontProperties(fname="C:/WINDOWS/fonts/msyhl.ttc")
x=range(120)
y=[random.randint(20,35) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
#设置x轴的非数值型坐标刻度,
_x=list(x)
#设置10时、11时的以分钟为间隔的时间刻度序列
_xtick_labels =["10时{}分".format(i) for i in range(60)]
_xtick_labels += ["11时{}分".format(i) for i in range(60)]
#用时间刻度序列替换数值型刻度序列,::3稀疏坐标刻度(坐标间隔拓宽为3分钟)
#rotation调整刻度值的旋转角度,fontproperties设置刻度值的字体
plt.xticks(_x[::3],_xtick_labels[::3],rotation=45,fontproperties=my_font)
#设置x轴、y轴标签和图片标题,fontproperties设置中文字体
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("温度",fontproperties=my_font)
plt.title("温度随时间变化",fontproperties=my_font)
plt.show()
from matplotlib import pyplot as plt
from matplotlib import font_manager
#利用matplotlib.font_manager设置字体的方法
my_font=font_manager.FontProperties(fname="C:/WINDOWS/fonts/msyhl.ttc")
y=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
x=range(11,31)
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
#设置x轴的非数值型坐标刻度
_xtick_labels=["年龄{}岁".format(i) for i in x]
#用非数值型刻度序列替换数值型刻度序列
#rotation调整刻度值的旋转角度,fontproperties设置刻度值的字体
plt.xticks(x,_xtick_labels,rotation=45,fontproperties=my_font)
#设置y轴的数值型坐标刻度
plt.yticks(range(min(y),max(y)+1))
#设置x轴、y轴标签和图片标题,fontproperties设置中文字体
plt.xlabel("年龄",fontproperties=my_font)
plt.ylabel("旅游次数",fontproperties=my_font)
plt.title("每年的旅游次数",fontproperties=my_font)
#设置网格
plt.grid()
plt.show()
在同一张图上绘制正弦曲线和余弦曲线,并在图中标出图例
from matplotlib import pyplot as plt
import numpy as np
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname="C:/WINDOWS/fonts/msyhl.ttc")
x=np.arange(0,5,0.1)
y1=np.sin(x)
y2=np.cos(x)
#分别绘制正弦曲线和余弦曲线,color表示线条的颜色,linestyle表示线条的样式
plt.plot(x,y1,label="正弦曲线",color='r',linestyle="-.")
plt.plot(x,y2,label="余弦曲线",color='b',linestyle=":")
plt.title("在一张图上绘制正弦和余弦曲线",fontproperties=my_font)
#设置曲线的图例,prop表示图例的字体,loc表示图例在图中的位置
plt.legend(prop=my_font,loc="best")
plt.show()
(1)折线图
以上都是折线图,绘制折线图使用(matplotlib.plot())
from matplotlib import pyplot as plt
import numpy as np
x=np.arange(0,30,2)
y=x**2+5
plt.plot(x,y)
plt.show()
from matplotlib import pyplot as plt
import numpy as np
x=range(1,31)
y=np.random.rand(30)
plt.scatter(x,y)
plt.show()
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname="C:/WINDOWS/fonts/msyhl.ttc")
x=["小明","小华","小佳","小陈"]
y=[34.5,67.5,87.6,77.4]
#绘制条形图,width为条形的宽度
plt.bar(range(len(x)),y,width=0.3)
plt.xticks(range(len(x)),x,fontproperties=my_font)
plt.show()
from matplotlib import pyplot as plt
import random
y=[random.randint(0,90) for i in range(0,50)]
d=3
num_bins=(max(y)-min(y)) // d
plt.hist(y,num_bins)
plt.show()