Matplotlib是一个python的2D绘图库,是比较流行的底层绘图库。 Matplotlib库模仿MATALAB,所以部分的语言语法及规范和MATLAB相同。 Matplotlib主要用于数据可视化,可以直观表现数据信息,使得数据更加具体,容易理解。 Matplotlib可以绘制各种各样的数据图形,基本常用的是折线图、散点图、柱状图(条形图)、直方图等
默认情况下matplotlib不支持中文字符,所以要注意设置中文字体 (1)首先查找本机字体存储位置 linux/mac/window下查找本机字体存储地址:
fc-list %查找所有字体存储地址 fc-list :lang=zh %查看中文字体存储地址(冒号前有空格)(2)选择一个中文字体存储地址,在程序中加载字体
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()(2)画出一个人11~30岁每年旅行次数
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()(2)散点图
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()(3)条形图
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()(4)直方图
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()