在接下来的文章中主要介绍如何利用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 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!