导入模块
import matplotlib.pyplot as plt
如果想显示交互式界面,可以加:
%matplotlib tk # 默认是行内显示%matplotlib inline
解决中文显示问题
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
简介
Python最常用的绘图库,提供了一整套十分适合交互式绘图的命令API,比较方便的就可以将其嵌入到GUI应用程序中。
官网examples入门学习:
http://matplotlib.org/examples/index.html
http://matplotlib.org/gallery.html
Matplotlib它能帮你画出美丽的:
- 线图;
- 散点图;
- 等高线图;
- 条形图;
- 柱状图;
- 3D 图形;
- 甚至是图形动画等等.
看下代码示例,最简单的画一张折线图:
import matplotlib as mpl
plt.plot([1,2,3],[1.5,1,2.5]) # X轴为[1,2,3],Y轴为[1.5,1,2.5]
plt.show() #显示图形
图形 figure
figure:图形、画板,matplotlib中的所有图像都是位于figure对象中。matplotlib 的 figure 就是一个 单独的 figure 小窗口,小窗口里面还可以有画很多的图形。
创建画板时的参数,figure(num,figsize)
num:画板序号,仅给画板编号。
figsize:设置画板大小,以英寸为单位。figsize=(8,5) 8英寸宽,5英寸高
x=np.arange(-3,3,0.1)
y1=np.sin(x)
y2=np.cos(x)
plt.figure() #创建第一个画板
plt.plot(x,y1)
plt.figure(num=3,figsize=(8,5)) # 创建第二个画板
plt.plot(x,y2)
plt.show()
标题、标签、图例、刻度和显示范围
title:设置标题
plt.title("这是一个标题")
xlabel、ylabel:设置X轴Y轴标签
plt.xlabel("X轴标签")
plt.ylabel("Y轴标签")
设置标签的文字的大小和颜色
label_font = {
'family': 'SimHei',
'weight': 'normal',
'size': 30,
'color':'red',
}
plt.xlabel("X轴标签",label_font)
plt.ylabel("Y轴标签",label_font)
xlim、ylim:控制画板的范围
plt.xlim(-6,6) # 设置X轴的显示范围
plt.ylim(-3,3) # 设置Y轴的显示范围
xticks、yticks: 控制画板轴的显示刻度值
plt.xticks([刻度范围],[点显示的东西])
刻度上之前的值会被擦除,重新绘制刻度显示值,不在刻度范围中的点不会显示内容。
plt.yticks([-1,0,1],["A","B","C"])
plt.xticks([0],["原点"])
legend ():生成默认图例
matplotlib 中的 legend 图例就是为了帮我们展示出每个数据对应的图像名称. 更好的让读者认识到你的数据结构。
画折线图的时候,调用plot的时候可以增加线条的label,画多个线条的时候就能区分线条。
设置线条的label时,必须调用plt.legend()线条标签才会显示出来。
x=np.arange(-3,3,0.1)
y1=np.sin(x)
y2=np.cos(x)
figsize=(8,6)
plt.figure(figsize=figsize) #创建一个画板
plt.title("这是一个标题")
label_font = {
'family': 'SimHei',
'weight': 'normal',
'size': 30,
'color':'red',
}
plt.xlabel("X轴标签",label_font)
plt.ylabel("Y轴标签",label_font)
plt.xlim(-6,6) # 设置X轴的显示范围
plt.ylim(-3,3) # 设置Y轴的显示范围
plt.yticks([-1,0,1],["A","B","C"]) # 设置显示刻度值
plt.xticks([0],["原点"])
plt.plot(x,y1,label="SIN") # 增加线条的label,标注线条功能
plt.plot(x,y2,label="COS")
plt.legend() # 生成图例
plt.show()
子图subplot
Subplot:子图
figure对象下创建一个或多个subplot对象(即axes)用于绘制图像。
subplot(numRows, numCols, plotNum)
numRows:几行
numCols:几列
plotNum:第几个子图
也可以通过figure对象,用面向对象的方式添加子视图,fig.add_subplot()返回子视图对象。
x=np.arange(-3,3,0.1)
y1=np.sin(x)
y2=np.cos(x)
plt.figure() #创建第一个画板
plt.subplot(1,2,1) # 一行二列第1个子图
plt.plot(x,y1)
plt.title("第一张图")
plt.subplot(1,2,2) # 一行二列第2个子图
plt.plot(x,y1)
plt.title("第二张图")
fig2=plt.figure(num=3,figsize=(8,5)) # 创建第二个画板
aex1=fig2.add_subplot(2,1,1) # 面向对象方式创建子图,二行一列第1个子图
aex2=fig2.add_subplot(2,1,2) # 二行一列第2个子图
aex1.plot(x,y2)
aex1.set_title("第三张图")
aex2.plot(x,y2)
aex2.set_title("第四张图")
fig2.subplots_adjust(wspace=0,hspace=0) #调节子视图之间的间距
plt.show()
设置边框
gca获取当前坐标轴信息。使用spines设置边框,使用set_color设置边框颜色:默认白色
ax=plt.gca()
ax.spines['top'].set_color("none")
plt.plot([1,2,3],[1.5,1,2.5]) # X轴为[1,2,3],Y轴为[1.5,1,2.5]
ax=plt.gca()
ax.spines['top'].set_color("none")
ax.spines['left'].set_color("none")
ax.spines['right'].set_color("none")
ax.spines['bottom'].set_color("none")
plt.show() #显示图形
外部边框都已经去掉了
Sublots():返回一个画板和多个子图
参数:
nrows=x, ncols=x, sharex=True, sharey=False,
gridspec_kw={'height_ratios':[2,2,1,1]}
例: fig, ax = plt.subplots(2,2),
其中参数分别代表子图的行数和列数,一共有 2x2 个图像。函数返回一个figure图像和一个子图ax的array列表。
保存图片
plt.savefig('filepath')
plt.savefig('filepath',dpi=300) 设置dpi图片清晰度
常见图形
1、折线图plot
plot(x,y1,x,y2) ,一个plot也可以画多条线条
color="" 设置线条颜色
plot(x,y,color='red')
linewidth=num 设置线条宽度
plot(x,y,color='red',linewidth=3)
linestyle='-.' 设置线条类型
- dashed 虚线
- dotted 点线
- solid 实线
- -. 虚点线
marker 标记点样式
plot(x,y,color='red',linewidth=1,marker="*")
markersize=num 标记点大小
2、柱状图bar
plt.bar(x,data,width=0.8,align='center')
x数据位置
data数据值,高度
align 对齐方式,edge右边,
plt.text(x,y,text) x,y点坐标上面写字
3、饼图pie
plt.pie(data,label=[],explode)
explode 每一块离开中心的距离
radius=float 半径长度,控制圆大小
startangle 起始角度
shadow=True 阴影
autopct="%.1f%%” 每一块的百分比描述
pctdistance 描述距离中心的位置
4、散点图 scatter
scatter(x,y)
x,y相同长度的序列
科学计算库拓展
通过Series和DataFrame直接画图
ser.plot() 折线图
ser.plot(kind='bar') 柱状图
ser.plot(kind='pie',autopct="%.1f%%") 饼图
plt.show()
DataFrame 制图