Python图形化输入 python 图形化_子图

简介

Python有许多可视化工具,本文只介绍Matplotlib库。Matplotlib是一种2D的绘图库,可支持硬拷贝和跨系统的交互。它可以在python脚本、IPython(Jupyter)的交互环境下、Web应用程序中使用。当初的目的是为Python构建一个MATLAB式的绘图接口。它不仅支持各种操作系统上许多不同的GUI后端,而且还能将图片导出为各种常见的矢量和光栅图:PDF、SVG、JPG、PNG、BMP、GIF等。

Matplotlib程序包

俗话说的好,“一图胜千言”,我们需要通过可视化的方式查看、分析数据,虽然pandas也有一些绘图的操作,但是相比较而言,Matplotlib在绘图显示效果方面更加绚丽。

Pyplot 为Matplotlib提供了一个方便的接口。我们可以导入Matplotlib库进行简单的操作。

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi, 256)
y1 = np.cos(x)
y2 = np.sin(x)
plt.plot(x, y1)
plt.plot(x, y2)
plt.show()
importnumpyasnp
importmatplotlib.pyplotasplt
x=np.linspace(-np.pi,np.pi,256)
y1=np.cos(x)
y2=np.sin(x)
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()

输出如下图形:

Python图形化输入 python 图形化_python画图程序没有图_02

绘图命令及属性设置

在上面的例子中,我们使用的基本上是默认的属性和绘图框架。现在我们来看

Pyplot 绘图的基本框架是什么,与Photoshop一样,作图时要先定义一张画布,此处的画布就是Figure,然后在画布上添加其他的素材。

创建子图和设置属性

代码如下:

x = np.linspace(0, 10, 1000)
y1 = np.sin(x)
y2 = np.cos(x**2)
plt.figure(figsize=(8, 4))
plt.plot(x, y1, label='$sin(x)$', color='red', lw=2)
plt.plot(x, y2, label='$cos(x^2)$')
plt.xlabel('Time(s)')
plt.ylabel('Volt')
plt.title('Pyplot First Example')
plt.ylim(-1.5, 1.5)
plt.legend()
plt.show()
x=np.linspace(0,10,1000)
y1=np.sin(x)
y2=np.cos(x**2)
plt.figure(figsize=(8,4))
plt.plot(x,y1,label='$sin(x)$',color='red',lw=2)
plt.plot(x,y2,label='$cos(x^2)$')
plt.xlabel('Time(s)')
plt.ylabel('Volt')
plt.title('Pyplot First Example')
plt.ylim(-1.5,1.5)
plt.legend()
plt.show()

使用关键字参数可以指定绘制的曲线的各种属性:

label:给曲线一个标签名称,可以在图例中方便显示,如果标签字符串前后有字符

$ 围住,则表示使用内嵌的LaTex引擎将其显示为特定的数学公式;

color:指定曲线颜色,可以使用十六进制数或者以0-1的RGB表示,比如‘#ff0000’,(1.0, 0.0, 0.0);

linewidth:曲线的线宽,也可以使用缩写形式

lw 。

最终得到如下图:

Python图形化输入 python 图形化_Volt_03

创建多个子图

如果需要同时绘制多个图表,可以给Figure传递一个整数参数指定图表的序号,也就是每张画布的序号。如果指定序号的画布已经存在,将会让它成为当前的绘图对象。来看实例代码:

fig1 = plt.figure(2)
plt.subplot(211) # 将绘图区域等分成2行1列的,并选择第一个区域
plt.subplot(212) # 将绘图区域等分成2行1列的,并选择第二个区域
plt.show()
fig1=plt.figure(2)
plt.subplot(211)# 将绘图区域等分成2行1列的,并选择第一个区域
plt.subplot(212)# 将绘图区域等分成2行1列的,并选择第二个区域
plt.show()

在这里指定了在Figure2上进行绘图操作。得到如下图:

Python图形化输入 python 图形化_python画图程序没有图_04

事实上,我们可以很随意的拆分得到各种想要的子图,比如:

f1 = plt.figure(5)
plt.subplot(221)
plt.subplot(222)
plt.subplot(212)
plt.subplots_adjust(left=0.08, right=0.95, wspace=0.25, hspace=0.45)
plt.show()
f1=plt.figure(5)
plt.subplot(221)
plt.subplot(222)
plt.subplot(212)
plt.subplots_adjust(left=0.08,right=0.95,wspace=0.25,hspace=0.45)
plt.show()

在Figure5上我们随意的拆分了几个区域,最后通过

subplots_adjust() 函数调整绘图在画布上的分布。最后得到如下图:

Python图形化输入 python 图形化_Volt_05

通过Axes对象设置属性

上面的例子是在Figure上绘制图案,但是当我们绘图较多,需要精调每张小图的时候,就要用到Axes对象。具体代码如下:

fig, axes = plt.subplots(2, 2) # 相当于(nrows=2, ncols=2)
plt.show()


fig,axes=plt.subplots(2,2)# 相当于(nrows=2, ncols=2)
plt.show()

subplots() 函数能够批量创建多个子图区域,返回画布

fig 和包含所有子坐标轴的

axes 对象。得到如下图:

Python图形化输入 python 图形化_子图_06

或者我们可以精调每张子图的属性,代码如下:

fig, axes = plt.subplots(2, 2)
axes[0, 0].set(title='upper left')
axes[0, 1].set(title='upper right')
axes[1, 0].set(title='lower left')
axes[1, 1].set(title='lower right')
for ax in axes.flat:
ax.set(xticks=[], yticks=[])
plt.show()
fig,axes=plt.subplots(2,2)
axes[0,0].set(title='upper left')
axes[0,1].set(title='upper right')
axes[1,0].set(title='lower left')
axes[1,1].set(title='lower right')
foraxinaxes.flat:
ax.set(xticks=[],yticks=[])
plt.show()

在这里设置它们的title,并删除横纵坐标。通过遍历axes的

flat 属性,依次

set 去除坐标。最终得到如下图:

Python图形化输入 python 图形化_子图_07

实际上,plot操作的底层操作就是Axes对象的操作,只不过如果我们不用Axes而只用plot,它默认的是

plot.subplot(111) ,也就是说plot其实是Axes的特例。

保存Figure对象

最后一项操作是保存图片,此时需要使用

savefig() 函数。具体代码如下:

plt.savefig('test.png', dpi=500)
1
plt.savefig('test.png',dpi=500)

dpi 参数控制保存的像素,值越大,内存消耗越大。

总结

除了上述的基本操作以外,Matplotlib还有其他更高级的方法作图。此处只是简单介绍它在绘图时需要注意的事项。