一、为什么要学习matplotlib?
(1)能够将数据进行可视化。
(2)使数据更加直观、更具说服力。
二、什么是matplotlib
底层绘图库,主要做数据可视化图表,名称取材于MATLAB,模仿MATLAB构建
三、Matplotlib基本要点
1、
(1)红色的点是坐标点,有点无线散点图,有线无点折线图。
2、假设一天中每隔两小时(range(2,26,2))的气温分别是[15,13,14.5,17,20,25,26,27,22,18,15]
(1)如果我们把气温视作y轴坐标,时间视为x轴坐标,两者相应的数据个数必须是一一对应的。
(2)range函数可以取步长但range不能代替列表,后面会详细讲到。
(3)在绘图前要准备好两轴的数据(可迭代对象)
3、matplotlib下有专用的模块pyplot模块帮助绘制图形,导入规则:
(1)plot函数会帮助我们将数据一一对应,不需要手动去对应(绘制的是折线图),对应前面的那句话:x和y轴数据个数必须一一对应。
(2)show函数会帮助我们将图形展示出来
4、matplotlib会自动帮我们设置刻度、图形大小等图形元素,我们可以自己修改
目前存在问题:
(1)设置图片大小(高清无码的大图)
(2)保存到本地
(3)描述信息,比如x轴和y轴表示什么,这个图的标题是什么
(4)调整x或者y的刻度的间距
(5)线条的样式(比如颜色,透明度等)
(6)标记出特殊的点(最低点和最高点等)
(7)给图片添加水印(防止盗用)
5、设置图片大小
(1)调用figure方法,figsize表示设置图片的宽和高,dpi表示每英寸点的个数,调整图片的清晰度
6、图片的保存
(1)绘制之后保存,savefig方法设置保存的地址,可以保存为svg矢量图格式,在网页中放大不会产生失真
7、设置刻度
(1)xticks()可以设置x的刻度,如果直接传入x,它会将每个x的刻度都传入进去作为x轴,也可以手动传入列表设置刻度(创建列表手动设置步长,在传入列表后还可以二次设置步长)
(2)yticks()可以设置y的刻度,我们通常将y轴最大值和最小值引入代表最高刻度和最低刻度。
from matplotlib import pyplot as plt #数据在x轴的位置,是一个可迭代对象 x = range(2,26,2) #数据在y轴的位置,是一个可迭代的对象.与x轴元素的个数一一对应 y = [15,13,14.5,17,20,25,26,26,24,22,18,15] #设置图片大小 plt.figure(figsize=(20,8),dpi=80) #绘制图形 plt.plot(x,y) #设置x轴刻度 _xtick_labels = [i/2 for i in range(4,49)] #创建列表作为初始刻度 plt.xticks(_xtick_labels[::3]) #二次设置步长规定自己想要的效果 #设置y轴刻度 plt.yticks(range(min(y),max(y)+1)) #保存图片 # plt.savefig("./t1.png") #展示图形 plt.show()
8、小测试1:如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况 a = [random.randint(20,35) for I in range(120)]
9、优化图像:对于上面的气温变化图像,我们需要将横坐标修改为字符串形式的时间轴。之所以在xticks中传入两个参数是为了让数字和字符串之间形成对应。range函数返回的是一个可迭代对象,但这个对象并非列表,所以要用list()将可迭代对象转化为列表进行对应操作。(注:在没有用到字符串形式的时候不需要考虑,x轴的刻度可以随意规定)
10、设置中文显示:
(1)第一种方法(适用于windows、linux):
(2)我采用了一劳永逸的方法,直接修改matplotlib的内置文件
###############第一步###################
将中文字体复制到matplotlib的字体目录中
matplotlib默认安装在 %PythonPath%Libsite-packages 目录下。复制微软雅黑字体到 %PythonPath%Libsite-packagesmatplotlibmpl-datafonts tf 中
###############第一步################### 配置文件matplotlibrc,如下图方式修改即可。
11、添加描述信息
(1)x轴标签的添加调用函数xlabel()
(2)y轴标签的添加调用函数ylabel()
(3)图标题的添加调用函数titile()
from matplotlib import pyplot as plt import random import matplotlib x = range(0,120) y = [random.randint(20,35) for i in range(120)] plt.figure(figsize=(20,8),dpi=80) plt.plot(x,y) #设置x轴刻度 _xtick_labels = ["10点{}分".format(i) for i in range(60)] _xtick_labels += ["11点{}分".format(i) for i in range(60)] #取步长,数字和字符串一一对应,数据的长度一样 plt.xticks(list(x)[::3],_xtick_labels[::3],rotation=45) #添加描述信息 plt.xlabel("时间") plt.ylabel("温度 单位(℃)") plt.title("10到12点每3分钟的气温变化情况") plt.show()
12、小测验2:(图例部分看后面一章节学习后再进行)
假设大家在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]
要求:
(1) y轴表示个数。
(2) x轴表示岁数,比如11岁,12岁等。
(3) 自定义绘制图形的风格。
(4) 每条线添加图例。
from matplotlib import pyplot as plt x = range(11,31) 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] plt.figure(figsize=(20,15),dpi=80) plt.plot(x,a,label='你') plt.plot(x,b,label='你的同桌') _xtick_labels = [i for i in range(11,31)] plt.xticks(_xtick_labels) plt.yticks(range(min(b),max(a)+1)) plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3, ncol=3, mode="None", borderaxespad=0.) plt.xlabel("岁数") plt.ylabel("个数") plt.title("11岁到30岁每年交的女(男)朋友的数量") plt.show()