Matplotlib基础
matplotlib是一个Python的2D图形包。pyplot封装了很多画图的函数
导入相关的包:
matplotlib.pyplot包含了一系列类似MATLAB中绘图函数的相关函数。每个matplotlib.pyplot中的函数对当前的图像进行一些修改。例如:产生新的图像,在图像中产生新的绘图区域,在绘图区域中画线,给绘图加上标记,等等…matplotlib.pyplot会自动记住当前的图像和绘图区域,因此这些函数会直接作用在当前的图像上。
在实际的使用过程中,常常以plt作为matplotlib.pyplot的省略。
plt.show()函数
默认情况下,matplotlib.pyplot不会直接显示图像,只有调用plt.show()函数时,图像才会显示出来。
plt.show()默认是在新窗口打开一幅图像,并且提供了对图像操作的按钮。
不过在ipython命令中,我们可以将它插入notebook中,并且不需要调用plt.show()也可以显示:
%matplotlib inline
%matplotlib notebook
不过在实际写程序中我们还是习惯用plt.show()将图像显示出来
plt.plot()函数绘制简单线图
其中y必须指定,但是x可以不指定,默认使用索引来作为x轴
只指定y
x,y都指定
字符参数
和MATLAB中类似,我们还可以用字符来指定绘图的格式:
表示颜色的字符参数有:
|字符| 颜色 |
|‘b’|蓝色,blue|
| ‘g’ |绿色,green |
|‘r’|红色,red|
|‘c’|青色,cyan|
|‘m’|品红,magenta|
|‘y’|黄色,yellow|
|‘k’|黑色,black|
|‘w’|白色,white|
表示类型的字符参数:
例如:我们要画出红色圆点
显示范围
与MATLAB类似,这里可以使用axis函数指定坐标轴显示范围:plt.axis([xmin,xmax,ymin,ymax])
传入Numpy数组,传入多组数据
之前我们传给plot的参数是列表,事实上,向plot中传入numpy数组是更正常的做法。事实上,如果传入的是列表,matplotlib会在内部将它转化成数组再进行处理:
在一个图像里画多条线:
线条属性
使用plt.plot()的返回值来设置线条属性
plot函数返回一个Line2D对象的列表,每个对象代表输入的一对组合,例如:
- line1,line2为两个Line2D对象
line1,line2=plt.plot(x1,y1,x2,y2,x3,y3) - 返回三个Line2D对象组成的列表
lines=plt.plot(x1,y1,x2,y2,x3,y3)
我们可以使用这个返回值来对线条属性进行设置:
plt.setp()修改线条性质
也可以使用MatLab风格:
子图
电影数据绘图
先将警告功能忽略,因为对实际运行没啥影响
导入第三方库:
通过参数的设置使中文能够正常的显示:
准备工作完成了
(1)绘制每个国家或地区的电影数量的柱状图
接下来将这个数据进行图形的绘制
接下来进行一些设定:
x = data.index
y = data.values
plt.figure(figsize=(10,6))
plt.bar(x,y,color='g')
plt.title('各国家或地区电影数量',fontsize=20)
plt.xlabel('国家或地区',fontsize=18)
plt.ylabel('电影数量',fontsize=18)
#可以调整坐标轴字体大小
plt.tick_params(labelsize=14)
#x轴显示转换90度
plt.xticks(rotation=90)
#在柱子上面显示数量,ha水平对齐,va垂直对齐
for a,b in zip(x,y):
plt.text(a,b+10,b,ha='center',fontsize=10)
#加一些网格线
plt.grid()
plt.show()
(2)绘制每年上映的电影数量的曲线图
需要到15年的数据
x = data.index
y = data.values
plt.plot(x,y,color='b')
plt.title('每年电影数量',fontsize=20)
plt.ylabel('电影数量',fontsize=18)
plt.xlabel('年份',fontsize=18)
#每隔十年显示一个数字
for a,b in zip(x[::10],y[::10]):
plt.text(a,b+10,b,ha='center',va='bottom',fontsize=10)
plt.annotate('2012年达到最大值',xy=(2012,data[2012]),xytext=(2025,2100),arrowprops=dict(facecolor='black',edgecolor='r'))#设置箭头位置,文字位置
plt.show()
(3)根据电影的长度绘制饼图
data数据准备
y = data.values
y = y/sum(y)
plt.figure(figsize=(7,7))
plt.title('电影时长占比',fontsize=15)
plt.pie(y,labels=data.index,autopct='%.1f%%',colors='bygr',startangle=90)#autopct='%.1f%%'设置浮点数一位小数,startangle=90希望y轴位置为起始位置
#增加图例
plt.legend()
plt.show()
y = y/sum(y)可以不用设置
返回值:
如果没有设置autopct,返回(patches,texts)
如果设置autopct,返回(patches,texts,autotexts)
(4)根据电影的评分绘制频率分布直方图
可以发现,电影评分服从一个右偏的正态分布