绘图是数据分析工作中最重要的任务之一,是探索过程的一部分。python为我们提供了许多可视化工具,最常用的的是matplotlib。matplotlib是一种用于创建出版质量图标的桌面绘图包(主要是2D方面),它为python构建了一个MATLAB式的绘图接口。它不仅支持各种操作系统上许多不同的GUI后端,而且还能将图片导出为各种常见的矢量和光栅图:PDF、SVG、JPG、PNG、BMP、GIF等。matplotlib还有许多插件工具集,如用于3D图形的mplot3d以及用于地图和投影的basemap.

一、Figure

matplotlib的图像都位于Figure对象中,利用plt.figure创建新的Figure,不能通过空的Figure绘图。必须用add_subplot创建一个或多个subplot才行。

代码:

import matplotlib.pyplot as plt
import numpy as np
data = np.arange(10)
plt.plot(data)
#创建一个figure
fig = plt.figure()
#创建的图像是2*2的,目前选中的是4个subplot中的第一个(编号从1开始)
ax1 = fig.add_subplot(2, 2, 1)
ax3 = fig.add_subplot(2, 2, 3)
ax2 = fig.add_subplot(2, 2, 2)
#此时,发出一个绘图指令,matplotlib会在最后一个用过的subplot(若无,则创建一个)上进行绘制
#'k--'是一个线性选项,代表黑色虚线
plt.plot(np.random.randn(50).cumsum(), 'k--')
#柱状图
ax1.hist(np.random.randn(100), bins=20, color='k', alpha=0.3)
#散点图
ax3.scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30))
#可以使用plt.close()方法关闭图在控制台出现
#plt.close('all')

结果显示:

二、subplot

plt.subplots创建新的figure,并返回一个含有已创建的subplots对象的numpy数组,这样可以轻松地对axes数组进行索引,类似于二维数组的索引,例:axes[0,1]代表第一行第二个图:

其中subplots函数中各选项:

代码:

#创建subplot对象
fig, axes = plt.subplots(2, 3)
"""
result:2*3的子图
其中axes:
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000000000BBDBE80>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000000BC055C0>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000000C2A8400>],[<matplotlib.axes._subplots.AxesSubplot object at 0x000000000C464C88>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000000C4D9358>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000000D3976A0>]], dtype=object)
"""fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
for i in range(2):for j in range(2):axes[i, j].hist(np.random.randn(500), bins=50, color='k', alpha=0.5)
#将间距缩到0,从图中可以看出轴标签重叠,对于这种情况,只能自己设置刻度位置和标签了
plt.subplots_adjust(wspace=0, hspace=0)

结果:

三、颜色、标签和线型

matplotlib的plot函数接受一组X和Y坐标,还可以接受一个表示颜色和线型的字符串缩写。

若要根据x和y绘制绿色虚线,可执行以下代码:

ax.plot(x,y,'g--')
#或更明确的方式
ax.plot(x,y,linestyle='--',color='g')

线型图还可以加上一些标记(marker),以强调实际的数据点。

代码:

plt.figure()
plt.plot(np.random.randn(30).cumsum(), 'ko--')
#上式可以改成更为明确的形式:
plt.plot(np.random.randn(30).cumsum(), color='k', linestyle='dashed', marker='o')

结果:

在线型图中,非实际数据点默认是按线性方式插值,可以通过drawstyle选项修改:

plt.figure()
data = np.random.randn(30).cumsum()
plt.plot(data, 'k--', label='Default')
plt.plot(data, 'k-', drawstyle='steps-post', label='steps-post')
plt.legend(loc='best')

四、刻度、标签、图例

pyplot接口的设计目的就是交互式使用,含有xlim、xticks和xticklabels之类的方法。它们分别控制图表的范围、刻度位置、刻度标签。其使用方式有以下两种:

  • 调用时不带参数,则返回当前的参数值。例如,plt.xlim()返回当前X轴绘图范围。
  • 调用时带参数,则设置参数值。因此,plt.xlim([0,10])会将X轴的范围设置为0到10。

这些方法都是对当前或最近创建的AxesSubplot起作用的。

对于subplot对象,以xlim为例,就是ax.get_xlim和ax.set_xlim。

#设置标题、轴标签、刻度、刻度标签
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(np.random.randn(1000).cumsum())
#设置刻度
ticks = ax.set_xticks([0, 250, 500, 750, 1000])
#设置刻度标签
labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'],rotation=30, fontsize='small')
#设置标题
ax.set_title('My first matplotlib plot')
#设置轴标题
ax.set_xlabel('Stages')

结果:

添加图例

图例(legend)是另一种用于标识图表元素的重要工具。

方法有两种,最简单的一种是在添加subplot时传入label参数。

from numpy.random import randn
fig = plt.figure(); ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(1000).cumsum(), 'k', label='one')
ax.plot(randn(1000).cumsum(), 'k--', label='two')
ax.plot(randn(1000).cumsum(), 'k.', label='three')
#显示图例,loc表示图例位置,best为最佳位置。
#ax.legend()或plt.legend()方法
ax.legend(loc='best')

左图是无图例的,右图是有图例的。

注解以及在subplot上绘图

除标准的图表对象之外,你可能还希望绘制一些自定义的注释(比如文本、箭头或其他图形等)。

注解还可以通过text、arrow和annotate等函数进行添加,text可以将文本绘制在图表的指定坐标(x,y),还可以加上一些自定义格式:

from datetime import datetime
import pandas as pdfig = plt.figure()
ax = fig.add_subplot(1, 1, 1)data = pd.read_csv('spx.csv', index_col=0, parse_dates=True)
spx = data['SPX']spx.plot(ax=ax, style='k-')crisis_data = [(datetime(2007, 10, 11), 'Peak of bull market'),(datetime(2008, 3, 12), 'Bear Stearns Fails'),(datetime(2008, 9, 15), 'Lehman Bankruptcy')
]
#添加注释(包括文本和箭头)
for date, label in crisis_data:ax.annotate(label, xy=(date, spx.asof(date) + 75),xytext=(date, spx.asof(date) + 225),arrowprops=dict(facecolor='black', headwidth=4, width=2,headlength=4),horizontalalignment='left', verticalalignment='top')# 设置x、y轴范围:Zoom in on 2007-2010
ax.set_xlim(['1/1/2007', '1/1/2011'])
ax.set_ylim([600, 1800])
#添加标题
ax.set_title('Important dates in the 2008-2009 financial crisis')

结果:

五、将图表保存到文件

利用plt.savefig可以将当前图表保存到文件。该方法相当于Figure对象的实例方法savefig。

python之matplotlib实现绘图和可视化相关推荐

  1. python绘图实例-Python使用matplotlib简单绘图示例

    本文实例讲述了Python使用matplotlib简单绘图.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python2 """ ...

  2. Python:使用matplotlib进行绘图时中文变成乱码的解决

    QUESTION:Python:使用matplotlib进行绘图时中文变成乱码的解决? ANSWER: 在绘图前加上下面的代码: plt.rcParams['font.sans-serif']=['S ...

  3. 简单python脚本实例画图-Python使用matplotlib简单绘图示例

    本文实例讲述了Python使用matplotlib简单绘图.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python2 """ ...

  4. Python使用matplotlib.pyplot绘图时设置坐标轴刻度

    问题描述:在使用matplotlib绘图时,可能会需要设置坐标轴上刻度之间的距离,或者为刻度设置标签. 技术要点:pyplot的xticks()和yticks()函数的用法. 参考代码1: 运行结果1 ...

  5. 【Python】matplotlib基础:数据可视化

    matplotlib基础:绘图和可视化 目录: 文章目录 @[toc] 一 绘图的可用性 一 绘图的可用性

  6. python mat函数的作用_介绍python的matplotlib常用绘图函数

    免费学习推荐:python视频教程 matplotlib具有强大的绘图功能,但是语句琐碎,每次使用都需要一句一句书写未免太过麻烦.本文根据平时绘图经验总结了常用绘图函数,可以直接使用,非常方便impo ...

  7. mac上python的matplotlib库绘图时xlabel中文字符显示成小方框-解决方案

    import matplotlib.pyplot as plt 然后,mac上Python绘图遇到,一个汉字一个框: 找了好几篇博客,并不管用,原因可能是设置的SimHei.KaiTi之类的字体在ma ...

  8. Python 使用matplotlib批量绘图并合成视频

    实现思路 1.导入matplotlib,绘制图像,并将图片存储为bgr图像 2.导入cv2,读取bgr图像,最终存储为MP4格式文件 示例: import numpy as np import mat ...

  9. 用python绘制熊猫图案_利用Python进行数据分析_Pandas_绘图和可视化_Matplotlib

    1 认识Figure和Subplot import matplotlib.pyplot as plt matplotlib的图像都位于Figure对象中 fg = plt.figure() 通过add ...

  10. python的matplotlib常用绘图函数

    matplotlib具有强大的绘图功能,但是语句琐碎,每次使用都需要一句一句书写未免太过麻烦.本文根据平时绘图经验总结了常用绘图函数,可以直接使用,非常方便 import matplotlib.pyp ...

最新文章

  1. MongoDB 在评论中台的实践
  2. navigationbar
  3. 计算机管理文件和文件夹的教案任务设置,信息教学设计:文件和文件夹的基本操作...
  4. .NET 通用权限设计
  5. C语言/C++零基础到大神全栈学习笔记
  6. Java 正青春:现状与技术趋势报告
  7. linux ../的含义
  8. C语言程序设计(第三版)何钦铭著 习题4-3
  9. SHA1算法 C语言实现
  10. qsnctf 2048 wp
  11. msk基带信号matlab,MSK、GMSK调制及相干解调Matlab仿真
  12. 服务端安全之信息泄露
  13. cousera课程 Introduction to Programming with MATLAB 范德堡大学 作业1
  14. brew 特别慢 解决方案
  15. 电脑连接网线之后怎么给手机开热点
  16. 日行一小步,坚持一大步
  17. 选择器(尚硅谷前端网课学习笔记)
  18. iOS应用程序的辅助功能:语音识别
  19. STM32实现LED流水灯
  20. 齐次坐标表示向量与坐标理解

热门文章

  1. Linux查看目录busy,linux umount 提示"device is busy" 终极解决
  2. Surface Pro的MicroSDHC卡测速
  3. 倾斜摄影在农房一体不动产测量中的技术流程(Smart3D+EPS)
  4. MapStruct - Ambiguous constructors found
  5. 案例: 模拟京东快递单号查询
  6. 阿里云服务器防止ddos被攻击
  7. java string替换最后一个字符_sed替换每行最后一个字符
  8. Vscode latex插件生成pdf目录空白问题
  9. 什么是平面设计,平面设计主要做什么?
  10. 【数学模型】基于Matlab模拟超市排队系统