文档章节

Python 绘图 Matplotlib 快速参考手册

C
 Claroja
发布于 2017/05/08 23:18
字数 1470
阅读 332
收藏 0

http://www.labri.fr/perso/nrougier/teaching/matplotlib/#quick-references
1 作图函数
1.1 默认参数作图

import numpy as np#导入numpy库
import matplotlib.pyplot as plt#导入matplotlib库
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)#生成-π到+π的256个元素的等差数列
C,S = np.cos(X), np.sin(X)#生成x的正弦余弦函数并赋值给C,S
plt.plot(X,C)#画出x与C的图像
plt.plot(X,S)#画出x与S的图像
plt.show()#展示图像

Matplotlib
1.2 改变颜色和线宽

...
plt.figure(figsize=(10,6), dpi=80)#设置图表的宽高比为10:6,设置dpi为80
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-")#设置余弦函数颜色为蓝色,线宽2.5,样式为连线
plt.plot(X, S, color="red",  linewidth=2.5, linestyle="-")
...

Matplotlib
1.3 改变坐标轴刻度

...
plt.xlim(X.min()*1.1, X.max()*1.1)#x坐标轴最小值、最大值分别设置为X最小值和最大值的1.1
plt.ylim(C.min()*1.1, C.max()*1.1)#y坐标轴最小值、最大值分别设置为X最小值和最大值的1.1
...

Matplotlib
1.4 改变坐标轴刻度显示

...
plt.xticks( [-np.pi, -np.pi/2, 0, np.pi/2, np.pi])#显示+-π,+-π/2的刻度
plt.yticks([-1, 0, +1])#显示+-1,0的刻度
...

Matplotlib

...
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
       [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])#设置将刻度映射为具体标签

plt.yticks([-1, 0, +1],
       [r'$-1$', r'$0$', r'$+1$'])#设置将刻度映射为具体标签
...

Matplotlib
1.5 增加图例

...
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plt.plot(X, S, color="red",  linewidth=2.5, linestyle="-", label="sine")
plt.legend(loc='upper left', frameon=False)
...

Matplotlib
1.6 标记特殊点

...
t = 2*np.pi/3#设置标记点为2/3π
plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=1.5, linestyle="--")#plot横纵坐标参数都是列表,可以画出面积图,这里画出的是一条竖线
plt.scatter([t,],[np.cos(t),], 50, color ='blue')#标记出点
plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
             xy=(t, np.sin(t)), xycoords='data',
             xytext=(-100, -40), textcoords='offset points', fontsize=16,
             arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))#标注,第一个参数是标注的内容,第二个参数是标注的点,第三个参数是坐标,第四个参数是注释的位移,第五个参数是注释坐标,第六个参数是箭头样式的设置,第七个参数是连接的样式
plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=1.5, linestyle="--")
plt.scatter([t,],[np.sin(t),], 50, color ='red')

plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
             xy=(t, np.cos(t)), xycoords='data',
             xytext=(-90, -50), textcoords='offset points', fontsize=16,
             arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
...

Matplotlib

2 参数详细设置
2.1 窗口设置(fig)

参数 默认值 描述
num 1 作图窗口的个数
figsize figure.figsize 宽高,单位英寸
dpi figure.dpi 分辨率
facecolor figure.facecolor 背景颜色
edgecolor figure.edgecolor 框线颜色
frameon TRUE 是否显示框线

2.2.1 子图绘制(subplot)
你可以将一个画面分割成若干区域,然后分别在各个区域作画。你需要指明画面的行数和列数和作图的区域的数字代码(一般以横向排列)
subplot
subplot
subplot
这里写图片描述
2.2.2 比例子绘图(Axes)
类似于subplots,但是Axes允许将图片摆放在画板的任意位置。如果我们需要把一个小图放在一个大图的里面的话,就要选择Axes。
Axes
Axes
2.3 刻度(Tick)
Matplotlib提供给了一个刻度的配置系统。刻度定位器可以设置哪些地方的刻度可以出现,还可以设置刻度的格式。
这里写图片描述
2.4 动画制作(Animation)
在matplotlib上进行动画制作一直是非常困难的事情。但是,自从1.1版本之后,动画制作就变得简单和直观了。
一个简单的雨滴效果图可以通过随机分布的环形获得,当然,它的大小是随着时间的变化而变化的。为了模仿这些,我们可以使用越来越透明的颜色来表示环形的增长。当环形增长到最大的时候,我们就可以去除这些环形,再从新建立起新的环形。
第一步,建立空的画板

# New figure with white background
fig = plt.figure(figsize=(6,6), facecolor='white')
# New axis over the whole figure, no frame and a 1:1 aspect ratio
ax = fig.add_axes([0,0,1,1], frameon=False, aspect=1)

第二步,创建一些环形。我们可以使用散点图,并去除填充颜色。同样的我们需要设置初始的大小和颜色。

# 环形的数量和大小
n = 50
size_min = 50
size_max = 50*50
# 环形的坐标
P = np.random.uniform(0,1,(n,2))
# 环形的颜色
C = np.ones((n,4)) * (0,0,0,1)
# alpha颜色通道从 0 (透明) to 1 (不透明)
C[:,3] = np.linspace(0,1,n)
# 环形的大小
S = np.linspace(size_min, size_max, n)
# 散点作图
scat = ax.scatter(P[:,0], P[:,1], s=S, lw = 0.5,
                  edgecolors = C, facecolors='None')

# 确定坐标轴是(0,1),去除刻度标签
ax.set_xlim(0,1), ax.set_xticks([])
ax.set_ylim(0,1), ax.set_yticks([])

Matplotlib
现在我们需要为我们的动画写更新函数,我们知道每一个环形需要变大,变透明,最后消失。当然,我们不是真正的去除这些环形,而是把它分配到另外的随机的地点。

def update(frame):
    global P, C, S
    # 每一个环形都变得更加的透明
    C[:,3] = np.maximum(0, C[:,3] - 1.0/n)
    # 每一个环形都变得更加大
    S += (size_max - size_min) / n
    # 从新设置环形
    i = frame % 50
    P[i] = np.random.uniform(0,1,2)
    S[i] = size_min
    C[i,3] = 1
    # 更新散点对象
    scat.set_edgecolors(C)
    scat.set_sizes(S)
    scat.set_offsets(P)
    # 返回更新之后的对象
    return scat,

第三步,设置这个函数作为更新函数

animation = FuncAnimation(fig, update, interval=10, blit=True, frames=200) # animation.save('rain.gif', writer='imagemagick', fps=30, dpi=40) plt.show()

这里写图片描述

3.保存图片
3.1 保存为普通图片文件
3.2 保存为交互式图片文件
保存交互式图片页面

import matplotlib.pyplot as plt
import pickle as pl
#调用matplotlib的figure对象
fig = plt.figure()
x = [1,2,3,4,5]
y = [1,2,3,4,5]
plt.plot(x,y)
#序列化figure对象,并保存
pl.dump(fig,open('C:/Users/Administrator/Desktop/fig.pickle','wb'))

读取交互式页面:

import matplotlib.pyplot as plt
import pickle as pl
# 载入序列化文件
fig = pl.load(open('C:/Users/Administrator/Desktop/fig.pickle','rb'))
plt.show()
# 获得图片信息
print(fig.axes[0].lines[0].get_data())

原文链接:
http://www.labri.fr/perso/nrougier/teaching/matplotlib/#introduction

© 著作权归作者所有

C
粉丝 0
博文 128
码字总数 44892
作品 0
南京
私信 提问
matplotlib绘图库入门

matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。 它的文档相当完备,并且Galle...

ranvane
2014/06/24
153
0
70种方法,轻松入门Python可视化编程

图形可视化是展示数据的一个非常好的手段,好的图表自己会说话。毋庸多言,在Python的世界里,matplotlib是最著名的绘图库,它支持几乎所有的2D绘图和部分3D绘图,被广泛地应用在科学计算和数...

全部原谅
2018/09/04
32
0
人工智能初学---开发工具使用

1. Anaconda Anaconda 是一个用于科学计算的Python 发行版。支持linux ,windows 系统,提供了包管理与环境管理的功能,可以很方便的解决多版本Python的并存,切换,以及各种第三方包(如 Nu...

linzihahaha
2018/11/12
0
0
Python中matplotlib的基本使用

Python中matplotlib的基本使用 01.简介 基本上每门计算机语言都可以绘制图像,在科学计算中matlab、R的绘图能力是非常强大的。但是对于挚爱python的程序员说,python绘图图形也还是不错的。当...

meiqi0538
2018/04/19
0
0
Python Shell下使用matplotlib

Python Shell下使用matplotlib Created Monday 10 December 2012 matplotlib默认是延迟绘图直到脚本结束,因为绘图是一个高代价的操作。所以可能不想每次每个属性的改变就更新绘图,只有所有...

LianyouCQ
2012/12/10
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

RxJava进行单元测试的方式

@Test public void completeTask_retrievedTaskIsComplete() { // Given a new task in the persistent repository final Task newTask = new Task(TITLE, ""); ......

SuShine
14分钟前
2
0
正则表达式大全

检验手机号码 # 要求:手机号码必须为11位数字,以1开头,第二位为1或5或8。import redef verify_mobile(): mob = input("请输入手机号码:") ret = re.match(r"1[358]\d{9}", m......

彩色泡泡糖
18分钟前
3
0
QT之border-image属性

一、border-image的兼容性 border-image可以说是CSS3中的一员大将,将来一定会大放光彩,其应用潜力真的是非常的惊人。可惜目前支持的浏览器有限,仅Firefox3.5,chrome浏览器,Safari3+支持...

shzwork
19分钟前
5
0
Kubernetes Operator简易教程

1. 安装operator-sdk //安装 operator-sdk$ apt-get install operator-sdk.....$ operator-sdk versionoperator-sdk version: v0.7.0$ go versiongo version go1.11.4 darwin/amd64 2......

Robotcl_Blog
19分钟前
4
0
再谈DAG任务分解和Shuffle RDD

1、DagScheduler分析 DagScheduler功能主要是负责RDD的各个stage的分解和任务提交。Stage分解是从触发任务调度过程的finalStage开始倒推寻找父stage,如果父stage没有提交任务则循环提交缺失...

守望者之父
25分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部