容器层主要由Canvas(画板)、Figure(画布)、Axes(图表)组成。
辅助显示层为Axes内除根据数据画出的图像以外的内容,主要包括外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等。
该层的作用可使图像更加直观、更加容易理解,但对图像没有实质性的影响
图像层指的Axes内通过plot(折线图)、hist(柱状图)、contour(轮廓图)、bar(柱状图)、barbs、pie(饼图)等函数绘制出的图像。
定义多个figure画多个图像
在一个figure中画多个图像
matplotlib.pyplot包含了一系列类似于matlab的画图函数,作用于当前图形(figure)的当前坐标系(axes)
设置图片的大小与清晰度
保存图片
注意 plt.show()会释放figure资源,如果在显示图像之后保存图片只能保存空图片
本意是显示0点,1点等,乱码就显示如下
下载中文字体(黑体,看准系统版本)
windows和mac中,双击安装
linux中,拷贝字体到/usr/share/fonts下
sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf
cd ~/.matplotlib
rm -r *
cd ~/.cache/matplotlib
rm -r *
vi ~/.matplotlib/matplotlibrc
font.family : sans-serif
font.sans-serif : SimHei
axes.unicode : False
sudo find -name matplotlibrc
./.virtualenvs/ai/lib/python3.5/site-package/matplotlib/mpl-data/matplotlib
font.family : sans-serif
font.sans-serif : SimHei
axes.unicode : False
为了更加清楚地观察图像对应地值
plt.grid(True,linestyle=‘–‘,alpha=0.5)
一个图就是一个plot,需要加图层就是多定义一个plot
在图层上添加说明
plt.plot(,label=str)
plt.legend(loc=‘lower left’)
matplotlib.pyplot.subplots(nrows=1,ncols=1,**fig_kw)创建一个带有多个axes(坐标系/绘图区)的图
plt.函数名()相当于面向过程的画图方法,axes.set_函数名()相当于面向对象的画图方法
In
# 绘制0-12点的温度变化图
import matplotlib.pyplot as plt
#创建宽20高8英寸dpi为80的画布
figure,axes=plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80)
x=[0,1,2,3,4,5,6,7,8,9,10,11]#时间 x
y=[2,3,2,2,2,4,5,8,9,9,12,15]#温度 y
y1=[12,9,8,9,7,5,5,2,0,9,12,15]#温度 y1
axes[0].plot(x,y,label='picture1') #绘制图像1
axes[1].plot(x,y1,label='picture2') #绘制图像2
axes[0].legend(loc='lower left') #显示图例
axes[1].legend(loc='lower left') #显示图例
#设置两个轴显示刻度
y_label=['{}℃'.format(i)for i in y]
x_label=['{}h'.format(i)for i in x]
#添加网格
axes[0].grid(True,linestyle='--',alpha=0.5)
axes[1].grid(True,linestyle='--',alpha=0.5)
#添加描述信息
axes[0].set_xlabel('time/h')
axes[0].set_ylabel('tempreture/℃')
axes[0].set_title('tempreture_change_picture')
axes[1].set_xlabel('time/h')
axes[1].set_ylabel('tempreture/℃')
axes[1].set_title('tempreture_change_picture')
axes[0].set_xticks(x,x_label)
axes[0].set_yticks(y,y_label)
axes[1].set_xticks(x,x_label)
axes[1].set_yticks(y1,y_label)
plt.show()
画图之前先写出y的表达式
import numpy as np
import math
x=np.linspace(-1,1,1000)
y=-1*x*x #表达式y
plt.figure(figsize=(20,8),dpi=80)#创建画布
plt.plot(x,y) #绘制图形
plt.grid() #添加网格
plt.show()
#绘制公司的第一月份和第一年的收入图
x=['company A','company B','company C','company D']
y_month=[1200,2100,4100,3110]
y_year=[5810,5120,8040,7410]
plt.figure(figsize=(6,4),dpi=80)#创建画布
plt.bar([0,1,2,3],y_month,width=0.2,label='first month income',
color=['r']) #绘制图形
plt.bar([0.2,1.2,2.2,3.2],y_year,width=0.2,
label='first year income') #绘制图形
plt.legend()
plt.xticks(range(4),x)
plt.title('company income table')
plt.grid() #添加网格
plt.show()
x=[143,152,164,148,165,157,159,162,170,176,148,154,165,158,149,172,157,164,168,157]
plt.figure(figsize=(6,4),dpi=80)#创建画布
plt.hist(x,11)
plt.title('table')#标题
plt.xticks(range(min(x),max(x),3))
plt.show()
name=['A','B','C','D','E','F']
count=[1250,900,850,749,1300,890]
plt.figure(figsize=(6,4),dpi=80)#创建画布
plt.pie(count,labels=name,colors=['r','b','y','g','c','m'],autopct='%1.2f%%')
plt.title('table')#标题
#如果图形不平整,加该行代码
#plt.axis('equal')
plt.show()