python之matplotlib实现绘图和可视化
绘图是数据分析工作中最重要的任务之一,是探索过程的一部分。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实现绘图和可视化相关推荐
- python绘图实例-Python使用matplotlib简单绘图示例
本文实例讲述了Python使用matplotlib简单绘图.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python2 """ ...
- Python:使用matplotlib进行绘图时中文变成乱码的解决
QUESTION:Python:使用matplotlib进行绘图时中文变成乱码的解决? ANSWER: 在绘图前加上下面的代码: plt.rcParams['font.sans-serif']=['S ...
- 简单python脚本实例画图-Python使用matplotlib简单绘图示例
本文实例讲述了Python使用matplotlib简单绘图.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python2 """ ...
- Python使用matplotlib.pyplot绘图时设置坐标轴刻度
问题描述:在使用matplotlib绘图时,可能会需要设置坐标轴上刻度之间的距离,或者为刻度设置标签. 技术要点:pyplot的xticks()和yticks()函数的用法. 参考代码1: 运行结果1 ...
- 【Python】matplotlib基础:数据可视化
matplotlib基础:绘图和可视化 目录: 文章目录 @[toc] 一 绘图的可用性 一 绘图的可用性
- python mat函数的作用_介绍python的matplotlib常用绘图函数
免费学习推荐:python视频教程 matplotlib具有强大的绘图功能,但是语句琐碎,每次使用都需要一句一句书写未免太过麻烦.本文根据平时绘图经验总结了常用绘图函数,可以直接使用,非常方便impo ...
- mac上python的matplotlib库绘图时xlabel中文字符显示成小方框-解决方案
import matplotlib.pyplot as plt 然后,mac上Python绘图遇到,一个汉字一个框: 找了好几篇博客,并不管用,原因可能是设置的SimHei.KaiTi之类的字体在ma ...
- Python 使用matplotlib批量绘图并合成视频
实现思路 1.导入matplotlib,绘制图像,并将图片存储为bgr图像 2.导入cv2,读取bgr图像,最终存储为MP4格式文件 示例: import numpy as np import mat ...
- 用python绘制熊猫图案_利用Python进行数据分析_Pandas_绘图和可视化_Matplotlib
1 认识Figure和Subplot import matplotlib.pyplot as plt matplotlib的图像都位于Figure对象中 fg = plt.figure() 通过add ...
- python的matplotlib常用绘图函数
matplotlib具有强大的绘图功能,但是语句琐碎,每次使用都需要一句一句书写未免太过麻烦.本文根据平时绘图经验总结了常用绘图函数,可以直接使用,非常方便 import matplotlib.pyp ...
最新文章
- MongoDB 在评论中台的实践
- navigationbar
- 计算机管理文件和文件夹的教案任务设置,信息教学设计:文件和文件夹的基本操作...
- .NET 通用权限设计
- C语言/C++零基础到大神全栈学习笔记
- Java 正青春:现状与技术趋势报告
- linux ../的含义
- C语言程序设计(第三版)何钦铭著 习题4-3
- SHA1算法 C语言实现
- qsnctf 2048 wp
- msk基带信号matlab,MSK、GMSK调制及相干解调Matlab仿真
- 服务端安全之信息泄露
- cousera课程 Introduction to Programming with MATLAB 范德堡大学 作业1
- brew 特别慢 解决方案
- 电脑连接网线之后怎么给手机开热点
- 日行一小步,坚持一大步
- 选择器(尚硅谷前端网课学习笔记)
- iOS应用程序的辅助功能:语音识别
- STM32实现LED流水灯
- 齐次坐标表示向量与坐标理解
热门文章
- Linux查看目录busy,linux umount 提示"device is busy" 终极解决
- Surface Pro的MicroSDHC卡测速
- 倾斜摄影在农房一体不动产测量中的技术流程(Smart3D+EPS)
- MapStruct - Ambiguous constructors found
- 案例: 模拟京东快递单号查询
- 阿里云服务器防止ddos被攻击
- java string替换最后一个字符_sed替换每行最后一个字符
- Vscode latex插件生成pdf目录空白问题
- 什么是平面设计,平面设计主要做什么?
- 【数学模型】基于Matlab模拟超市排队系统