Python易筋经-matplotlib

“孔德之容,惟道是从。
道之为物,惟恍惟惚。
惚兮恍兮,其中有象;恍兮惚兮,其中有物;窈兮冥兮,其中有精。
其精甚真,其中有信。
自古及今,其名不去,以阅众甫。
吾何以知众甫之状哉?
以此。”[1]

Python 在处理数据、分析数据以及数据可视化方面拥有很多功能强大的工具,这也是 Python 在科学领域中能够迅速发展的一个主要原因。今天记录一下matplotlib,在数据可视化方面,你必须熟练shying它。

Matplotlib

Matplotlib 是 Python 的一个绘图库。它包含了大量的工具,你可以使用这些工具创建各种图形,包括简单的散点图,正弦曲线,甚至是三维图形。Python 科学计算社区经常使用它完成数据可视化的工作。
首先引入模块包:

import matplotlib.pyplot as plt

画一段正弦曲线

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1,10,50)  #在指定的间隔内返回均匀间隔的数字。
plt.plot(x,np.sin(x)) #定义显示x轴,y轴数据
plt.show() #图显示

输出图形如下:

《Python易筋经-matplotlib》 plt_output_sin.png

叠加绘制两个数据集

试试用上面的50个数字绘制正弦曲线和余弦曲线的叠加。

plt.plot(x,np.sin(x),x,np.cos(x))
plt.show()

输出图形如下:

《Python易筋经-matplotlib》 plt_2layer_sinXcos.png

自定义图形的外观

当在同一个图形上展示多个数据集时,通过改变线条的外观来区分不同的数据集变得非常必要。

plt.plot(x,np.sin(x),'r-o',x,np.cos(x),'g--')
plt.show()

输出图形如下:

《Python易筋经-matplotlib》 set_linetype.png

代码展示了两种不同的曲线样式:’r-o’ 和 ‘g–‘

‘-o’ 代表包含实心点标记的实线,’–‘ 代表虚线
颜色:蓝色 – ‘b’ 绿色 – ‘g’ 红色 – ‘r’ 青色 – ‘c’ 品红 – ‘m’ 黄色 – ‘y’ 黑色 – ‘k’ 白色 – ‘w’
线:直线 – ‘-‘ 虚线 – ‘–‘ 点线 – ‘:’ 点划线 – ‘-.’
常用点标记:点 – ‘.’ 像素 – ‘,’ 圆 – ‘o’ 方形 – ‘s’ 三角形 – ‘^’ 更多点标记样式

处理文字

text()命令可以在任意的位置添加文字,xlabel(),ylabel(),title()分别是添加x轴,y轴标签和标题。

import matplotlib.pyplot as plt
import numpy as np
# Fixing random state for reproducibility
np.random.seed(19680801)
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
# the histogram of the data
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='b', alpha=0.75)
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()

输出图形:

《Python易筋经-matplotlib》 plot_text_demo.png

所有的text()命令会返回一个matplotlib.text.Text实例,通过属性或者setp()来改变他们。

t = plt.xlabel(‘my data’, fontsize=14, color=’red’)

使用数学表达式

plt.title(r’$\sigma_i=15$’)

前置的r是指定它后面的字符串是原始的字符串,然后用$包裹表示中间的是数学表达式,\表示转译具体的数学符号。

注释

annotate()方法提供了一个注释的方法。
annotate(string,xy,xytest,arrowprops)

ax = plt.subplot(111)
t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = plt.plot(t, s, lw=2)
plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='red', shrink=0.05),
)
plt.ylim(-2,2)
plt.show()

输出图形:

《Python易筋经-matplotlib》 plot_annotate.png

默认的情况下,xy和xytext使用的坐标是数据的坐标,你也可以指定其他的坐标系统。

使用子图

在一个窗口绘制多张图,将上述的叠加的用不同曲线样式的例子用子图的方式改造:

plt.subplot(2,1,1)
plt.plot(x,np.sin(x),'r-o')
plt.subplot(2,1,2)
plt.plot(x,np.cos(x),'g--')
plt.show()

输出图形如下:

《Python易筋经-matplotlib》 2layer_subgraph.png

使用子图只需要一个额外的步骤,就可以像前面的例子一样绘制数据集。即在调用 plot() 函数之前需要先调用 subplot() 函数。该函数的第一个参数代表子图的总行数,第二个参数代表子图的总列数,第三个参数代表活跃区域。

活跃区域代表当前子图所在绘图区域,绘图区域是按从左至右,从上至下的顺序编号。例如在 3×3 的方格上,活跃区域 4 在方格上的坐标为 (1, 1)。

散点图

散点图是一堆离散点的集合。用 Matplotlib 画散点图也同样非常简单。
还以画正弦曲线为例:

plt.scatter(x,np.sin(x))
plt.show()

输出图形:

《Python易筋经-matplotlib》 plt_scatter.png

只需要调用 scatter() 函数并传入两个分别代表 x 坐标和 y 坐标的数组。注意,我们通过 plot 命令并将线的样式设置为 ‘bo’ 也可以实现同样的效果。

彩色映射散点图

另一种你可能用到的图形是彩色映射散点图。这里我们会根据数据的大小给每个点赋予不同的颜色和大小,并在图中添加一个颜色栏。

x = np.random.rand(1000)
y = np.random.rand(1000)
size = np.random.rand(1000)*50
colors = np.random.rand(1000)
plt.scatter(x,y,size,colors)
plt.colorbar()
plt.show()

输出图形:

《Python易筋经-matplotlib》 plt_scatter_colors.png

上面的代码大量的用到了 np.random.rand(1000),原因是我们绘图的数据都是随机产生的。

同前面一样我们用到了 scatter() 函数,但是这次我们传入了另外的两个参数,分别为所绘点的大小和颜色。通过这种方式使得图上点的大小和颜色根据数据的大小产生变化。

然后我们用 colorbar() 函数添加了一个颜色栏。

直方图

直方图是 Matplotlib 中最简单的图形之一。你只需要给 hist() 函数传入一个包含数据的数组。第二个参数代表数据容器的个数。数据容器代表不同的值的间隔,并用来包含我们的数据。数据容器越多,图形上的数据条就越多。

z = np.random.rand(1000)
plt.hist(z,50)
plt.show()

输出图形:

《Python易筋经-matplotlib》 plt_column.png

添加标题、坐标轴标记和图例

数据仍然使用上述正弦曲线和余弦曲线叠加图的那个,现在把标签和纵横坐标标签以及图例加上:

plt.plot(x,np.sin(x),'r-o',label='Sin(x)') # 要显示图例,需定义lable参数
plt.plot(x,np.cos(x),'g-^',label='Cos(x)')
plt.legend() #图例
plt.xlabel('Xlabel') #x轴标签
plt.ylabel('Ylabel') #y轴标签
plt.title('my title') # 标题
plt.show()

输出图形:

《Python易筋经-matplotlib》 plt_complete.png

网上这篇帖子,对matplotlib的使用整理的也很出彩,可以移步去看看:
Python–matplotlib绘图可视化知识点整理

  1. 老子《道德经》第二十一章,老子故里,中国鹿邑。

    原文作者:南宋临安府
    原文地址: https://www.jianshu.com/p/455ce276a3db
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞