在接下来的文章中主要介绍如何利用python 中的matplotlib进行数据的可视化展示。
matplotlib是以MATLAB为基础,仿照MATLAB的函数形式的绘图接口,并将这些函数封装在matplotlib.pyplot模块中。方便python用户直接使用。
在这篇文章中主要介绍matplotlib的参数配置,颜色配置,以及面板布局。
一、matplotlib基本构成
首先我们设置一个空的面板:
import matplotlib.pyplot as plt # 画一个空图,面板,不传数据 plt.figure() plt.plot() plt.xlabel("X label") plt.ylabel("Y label") plt.title("title") plt.show()
运行结果如下图:
我们在给出一个sin函数的图像:
import matplotlib.pyplot as plt # 画sin函数 x = np.arange(0, 360) y = np.sin(x * np.pi / 180) plt.figure() plt.plot(x, y) plt.xlabel("X") plt.ylabel("Y") plt.title("sin") plt.show()
通过上面的代码和图,先简单了解一下matplotlib画图的构成。一个matplotlib图像是由figure(面板), axes(子图),xaxis/yaxis(坐标轴), line(坐标轴线), Tick(坐标刻度),label (坐标标签), title(图名)等构成。
所属关系如下图:
在绘图时利用figure创建窗口,subplot创建子图。在上面我们没有展现出来,在后面的例子中会在详细的介绍。所有的绘画只能在子图上进行。plt表示当前子图,若没有就创建一个子图。通常我们会省去窗口这一步,所以在一些教程中是直接使用plt进行画图。
二、 matplotlib参数配置
接下来介绍一下常用的配置参数,线条相关,以及常见颜色设置。
1)配置参数
figure: 在任何绘图之前,我们需要一个Figure对象,可以理解成我们需要一张画板才能开始绘图。它控制面板、边界颜色、图形大小、和子区( subplot)设置 。
axes/subplot: 在拥有Figure对象之后,在作画前我们还需要轴,没有轴的话就没有绘图基准,所以需要添加Axes。也可以理解成为真正可以作画的纸。设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示 。
font: 字体集(font family)、字体大小和样式设置 。
grid: 设置网格颜色和线性 。
legend: 设置图例和其中的文本的显示 。
line: 设置线条(颜色、线型、宽度等)和标记 。
xticks和yticks: 为x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小。
2)线条相关属性标记:
线条风格linestyle或ls 描述 ‘-‘ 实线 ‘:’ 虚线 ‘–’ 破折线 ‘None’,’ ‘,’’ 什么都不画 ‘-.’ 点划线
标记maker 描述 ‘o’ 圆圈 ‘.’ 点 ‘D’ 菱形 ‘s’ 正方形 ‘h’ 六边形1 ‘*’ 星号 ‘H’ 六边形2 ‘d’ 小菱形 ‘_’ 水平线 ‘v’ 一角朝下的三角形 ‘8’ 八边形 ‘<’ 一角朝左的三角形 ‘p’ 五边形 ‘>’ 一角朝右的三角形 ‘,’ 像素 ‘^’ 一角朝上的三角形 ‘+’ 加号 ‘\ ‘ 竖线 ‘None’,’’,’ ‘ 无 ‘x’ X
别名 颜色 b 蓝色 g 绿色 r 红色 y 黄色 c 青色 k 黑色 m 洋红色 w 白色
如果上面颜色不够用,还可以通过其他方式来定义颜色值:
1、使用HTML十六进制字符串 color=’#123456’ 使用合法的HTML颜色名字(’red’等)。
2、也可以传入一个归一化到[0,1]的RGB元组。color=(0.3,0.3,0.4)。
3、或者查颜色表。
三、构造子图
1)add_subplot直接构造子图
fig = plt.figure() ax1 = fig.add_subplot(221) ax2 = fig.add_subplot(222) ax3 = fig.add_subplot(224)
通过fig.add_subplot(221)的方式生成Axes,前面两个参数确定了面板的划分,例如 2, 2会将整个面板划分成 2 * 2 的方格,第三个参数取值范围是 [1, 2*2] 表示第几个Axes。如上图所示。
2)二维数组构建子图
fig, axes = plt.subplots(nrows=2, ncols=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')
fig面板不变,上图的axes是为二维数组的形式, 在循环绘图时,很方便。但是我们很明显的可以看到上图的缺点,下面两图的标题和上面的两图的label重合了。
3)多子图布局
fig, axes = plt.subplots(nrows=2, ncols=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') fig.subplots_adjust(wspace=0.5, hspace=0.6, left=0.125, right=0.9, top=0.9, bottom=0.1) # fig.tight_layout() #自动调整布局,使标题之间不重叠 plt.show()
通过fig.subplots_adjust()我们修改了子图水平之间的间隔wspace=0.5,垂直方向上的间距hspace=0.6,左边距left=0.125 等等,这里数值都是百分比的。以 [0, 1] 为区间,选择left、right、bottom、top 注意 top 和 right 是 0.9 表示上、右距离边距为10%。不确定怎样调整的时候,fig.tight_layout()是一个很好的选择,可以自动调整布局,使得标题不重叠。
对于下面的代码,很简单并易懂,很多人喜欢下面的作画方式, 但是这只适合简单的绘图,快速的将图绘出。在处理复杂的绘图工作时,我们还是需要使用 Axes 来完成作画的。
x = np.arange(0, 360) y = np.sin(x * np.pi / 180) plt.plot(x, y, color='red', linewidth=2) plt.show()
本文分享自微信公众号 - Python爬虫scrapy(python_scrapy),作者:a1131825850疯子
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2019-09-06
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句