专栏首页Python爬虫与数据分析数据分析 ——数据可视化matplotlib(一)

数据分析 ——数据可视化matplotlib(一)

在接下来的文章中主要介绍如何利用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’,’ ‘,’’               什么都不画    
‘-.’                        点划线

3)线条标记:

标记maker            描述

‘o’                 圆圈  
‘.’                 点
‘D’                 菱形  
‘s’                 正方形
‘h’                 六边形1    
‘*’                 星号
‘H’                 六边形2    
‘d’                 小菱形
‘_’                 水平线 
‘v’                 一角朝下的三角形
‘8’                 八边形 
‘<’                 一角朝左的三角形
‘p’                 五边形 
‘>’                 一角朝右的三角形
‘,’                 像素  
‘^’                 一角朝上的三角形
‘+’                 加号  
‘\  ‘               竖线
‘None’,’’,’ ‘       无   
‘x’                 X

4)颜色:

别名             颜色

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()是一个很好的选择,可以自动调整布局,使得标题不重叠。

4) Axes 和pyplot

对于下面的代码,很简单并易懂,很多人喜欢下面的作画方式, 但是这只适合简单的绘图,快速的将图绘出。在处理复杂的绘图工作时,我们还是需要使用 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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 将文章保存,并更换图片的地址为本地地址

    内容存储方式:将csdn文章部分保存为文件,格式TXT,图片另存,动态图片的格式为gif,其他的为jpg。其他的信息保存在mysql数据库

    andrew_a
  • Scrapy框架自己的见解

    对这个框架用的时间很长了,一般如果需要大量抓取的话,就需要用到这个框架,因为相对来说还是挺方便的。

    andrew_a
  • Scrapy爬取知乎------配置代理IP和UA

    爬取知乎,如果想大量并发的话的就必须配置代理IP。因为知乎的反爬策略就是并发过大就会限制你的爬虫,页面会自动重定向到验证码页面。所以防止你的爬虫被禁,设置个代理...

    andrew_a
  • python之批量读取文件

    python的os模块可以实现普遍的操作系统功能,并且和平台无关。以下为实现根目录下文件的批量读取。 os.listdir(dirname)可以列出dirn...

    py3study
  • Windows更新清理工具 (winsxs 清理工具)

    Windows 更新清理工具是一款效果非常显著的Windows7、Windows8操作系统清理优化工具!经常安装系统的朋友相比有所体会,刚刚安装完成的Win7、...

    张善友
  • asd

    #include<iostream> #include<cstdio> #include<cmath> #include<cstring> using name...

    attack
  • 20:反反复复

    20:反反复复 总时间限制: 1000ms 内存限制: 65536kB描述 Mo和Larry发明了一种信息加密方法。他们首先决定好列数,然后将信息(只包含字...

    attack
  • 如何高效的在服务器和本地进行上传和下载文件

    昨天, 师弟告诉我可以在xshell中使用sz进行下载, 想要上传的话用rz就行了. 然后我竟然没有听过. 学习最好的方法就是写一篇博客, 比如这篇.

    邓飞
  • 在 Windows 下用 GCC 编译器练习 C/C++ 的简单教程

    2018年8月更新: 这个暑假博主和小伙伴、老师一同为师弟师妹们折腾了一个关于计算机学习交流的小社区 0xFFFF ,经过一个暑假的积淀,留下了不少适合计算机入...

    zgq354
  • 趣味题:恺撒Caesar密码(c++实现)

    描述:Julius Caesar 生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是Caesar 军团中的一名军官,需要把Ca...

    用户2038589

扫码关注云+社区

领取腾讯云代金券