本文首发于微信公众号《Python希望社》,点击这里即可查看原文,欢迎关注,定时持续更新python学习干货。
无论你是编程小白,还是代码高手,大家都应该深有体会,可视化是我们分析数据,做论文报告中不可或缺的一部分。的确,在今天这个时代,大数据与我们的生活息息相关,如何将复杂的数据简洁、明朗的展示在读者面前就显得尤为重要,我们的文章往往最吸引读者的地方也就在于精美的作图。为此,我们推出了python作图系列推文《利用Matplotlib实现数据可视化》。
今天就带大家先来了解一下Matplotlib这个库以及怎么利用Matplotlib作一些简单的图。
Matplotlib是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
我们日常学习中需要用到的一些基础的图形都可以运用Matplotlib绘图实现,话不多说,接下来就让我们来看几个案例。
上图是我最近做的一个数据分析比赛的图,它描述了某天某城市的疫情传播风险区域。利用坐标(原点位置),半径等参数,即可绘制。下面给大家贴上代码。
from pylab import *#调用pylab模块
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 输入中文需要用到以上这两行代码
import matplotlib.pyplot as plt#调用Matplotlib.pyplot模块
fig = plt.figure()
ax = fig.add_subplot(111)
#这些是作为单个整数编码的子绘图网格参数。例如,“111”表示“1×1网格,第一子图”,“234”表示“2×3网格,第四子图”。
a1 = Circle(xy=(-4.87, -5.57), radius=1, alpha=0.5, color='red')
a2 = Circle(xy=(-2.53, -0.48), radius=1, alpha=0.5, color='red')
a3 = Circle(xy=(-4.50, -1.16), radius=1, alpha=0.5, color='red')
a4 = Circle(xy=(-5.01, -1.69), radius=1, alpha=0.5, color='red')
#作一个圆,第一个参数为圆心坐标,第二个为半径,第三个为透明度(0-1),第四个表示颜色
ax.add_patch(a1)#将图形添加到图中
ax.add_patch(a2)
ax.add_patch(a3)
ax.add_patch(a4)
plt.axis('scaled')
plt.axis('equal')#x轴与y轴有相同长度
plt.title('疫情传播风险区域')#标题
plt.text(-9.8, -7.5, "单位:千米")#注释,可以放在任何位置
plt.show()
除了画圆,我们还可以如法炮制,绘制一些其他的图形:
细心的小伙伴可能已经发现了我们在上述案例中用到了两个模块:pylab和matplotlib.pyplot,这里简单的介绍一下这两个模块。
Pyplot:“方便快速绘图matplotlib通过pyplot模块提供了一套和MATLAB类似的绘图API,将众多绘图对象所构成的复杂结构隐藏在这套API内部。”
pylab:“matplotlib还提供了一个名为pylab的模块,其中包括了许多NumPy和pyplot模块中常用的函数,方便用户快速进行计算和绘图,十分适合在IPython交互式环境中使用。”
这里顺带提一下Numpy这个库,Numpy(Numeric Python)是一个模仿matlab的对python数值运算进行的扩展,提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。而很多情况下matplot需要配合numpy包一起使用。
作用:pylab = pyplot+大部分numpy。也就是说pylab只是提供了一个方便的导入常用包的接口。
详情见官方介绍:链接: https://matplotlib.org/faq/usage_faq.html#matplotlib-pyplot-and-pylab-how-are-they-related.
接下来是一些比较实用的作图案例:
(一)柱状图
代码如下:
from pylab import *
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
x1 = np.arange(2004, 2017)
y1 = [700, 800, 950, 1100, 1070, 1000, 1050, 900, 950, 900, 1000, 960, 980]
y1 = np.array(y1)
plt.figure(1)
plt.bar(x1, y1, 0.6, color="coral")
plt.title("商品销量与时间的关系")
plt.xlabel(u"年份")
plt.ylabel(u"销量")
plt.text(2001.5, 1100, "单位:个")
plt.show()
(二)折线图
代码如下:
from pylab import *
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
x1 = np.arange(2004, 2017)
x2 = np.arange(2004, 2017)
y1 = [700, 800, 950, 1100, 1070, 1000, 1050, 900, 950, 900, 1000, 960, 980]
y2 = [500, 600, 650, 600, 670, 700, 750, 800, 650, 500, 700, 760, 680]
y1 = np.array(y1)
y2 = np.array(y2)
plt.figure(1)
plt.plot(x1, y1, label='商品1销量', c='r')
plt.scatter(x1, y1, c='r')
plt.plot(x2, y2, label='商品2销量', c='g')
plt.scatter(x2, y2, c='g')
plt.title("商品销量与时间的关系")
plt.xlabel(u"年份")
plt.ylabel(u"销量")
plt.legend()
plt.xticks(range(2004, 2018, 2))
plt.text(2002, 1150, "单位:个")
plt.show()
(三)饼图
代码如下:
from pylab import *
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
def plot_pie(x, y):
colors = 'yellowgreen', 'gold', 'lightskyblue', 'lightcoral', 'red', 'orange', 'blue', 'yellow', 'green',
explode = 0, 0, 0, 0, 0, 0, 0, 0, 0,
plt.pie(y, explode=explode, labels=x, colors=colors, autopct='%1.1f%%', shadow=False, startangle=50)
plt.axis('equal')
plt.show()
if __name__ == '__main__':
result = [5863., 882., 2000., 4470., 1200., 3251., 2480., 2295., 4712]
x = '可口可乐', '毛巾', '牙刷', '食用油', '篮球', '火腿肠', '方便面', '酸奶', '其余'
plot_pie(x, result)
上面的几个例子都是用我们自己得到的数据进行输入作图,下面为大家展示一下利用函数表达式作图。
(四)简单的函数图像
代码如下:
python
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1,1,50)
y1 = x ** 2
y2 = x
plt.figure()
plt.plot(x,y1)
plt.figure()
plt.plot(x,y2)
plt.show()
plot as plt
import numpy as np
x = np.linspace(-1,1,50)
y1 = x ** 2
y2 = x
plt.figure()
plt.plot(x,y1)
plt.figure()
plt.plot(x,y2)
plt.show()
以上就是利用Matplotlib绘制的一些最简单也是最常见的图,怎么样,你是否已经开始感受到它的魅力了呢?那么就请期待我们在此系列推文的后续为大家推出更多更精美的绘图吧!