博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
matplotlib 入门之Pyplot tutorial
阅读量:5846 次
发布时间:2019-06-18

本文共 5781 字,大约阅读时间需要 19 分钟。

学习笔记

pyplot 介绍

import matplotlib.pyplot as pltimport numpy as np
plt.plot([1, 2, 3, 4])plt.ylabel('some numbers')plt.show()

image.png

  • 注意:pyplot的函数往往也是对象的函数
fig, (ax1, ax2) = plt.subplots(1, 2)ax1.plot([1, 2, 3, 4])ax2.plot([2, 3, 4, 5])#ax1.ylabel("...") 没有这个方法。。。#fig.show()会显示non-GUI-backend而不能执行, 而ax1.show() 或者ax2.show(),没有该方法#估计得通篇看完再能窥其门径了

image.png

从上面的例子可以看出,纵坐标是我们给的数据,而横坐标,pyplot会自动从0给予编号。

plt.plot([1, 2, 3, 4], [1, 4, 9, 16])plt.show()

image.png

修饰你的图案

pyplot格式继承自matlab(我不知道)。plot的第三个可选参数是一个格式字符串,代表颜色和曲线的种类,默认为"b-"。

plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro') #'ro' : red circles 红色的圆plt.axis([0, 6, 0, 20]) # [xmin, xmax, ymin, ymax]plt.show()

image.png

格式字符串 [color][marker][line]

fmt = '[color][marker][line]'

Colors

image.png

当格式字符串只限制颜色的时候,你可以写颜色的全称,也可以用16进制来表达。

或者任意的

plt.plot([1, 2, 3, 4], [1, 4, 9, 16], '#FF0000')plt.axis([0, 6, 0, 20])plt.show()

image.png

Markers

image.png

Line Styles

image.png

plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'g*--') #绿色 * 虚线plt.axis([0, 6, 0, 20])plt.show()

image.png

利用关键字作图(大概是数据映射到属性吧)

data = {'a': np.arange(50),        'c': np.random.randint(0, 50, 50),        'd': np.random.randn(50)}data['b'] = data['a'] + 10 * np.random.randn(50)data['d'] = np.abs(data['d']) * 100plt.scatter('a', 'b', c='c', s='d', data=data)plt.xlabel('entry a')plt.ylabel('entry b')plt.show()

image.png

传入类别

names = ['group_a', 'group_b', 'group_c']values = [1, 10, 100]plt.figure(1, figsize=(9, 3)) #figsize: 长9个单位,高3个单位plt.subplot(131)  #131 plt.bar(names, values)plt.subplot(132)plt.scatter(names, values)plt.subplot(133)plt.plot(names, values)plt.suptitle('Categorical Plotting')plt.show()

image.png

控制线的属性

线有许多属性,比如线的宽度,虚线的形式等等。

我们有很多方法来设置线的属性:

plt.plot(x, y, linewidth=2.0)

使用line2D对象的setter方法也可以完成。

x1 = np.array([1, 2, 3, 4])y1 = x1 ** 2x2 = np.array([4, 3, 2, 1])y2 = np.sin(x2)line1, line2 = plt.plot(x1, y1, x2, y2)line1.set_antialiased(False) #关闭抗锯齿line2.set_linewidth(5.0)plt.show()

image.png

使用setp()指令同样能够办到,这玩意儿还会返回图片的各种属性。

x1 = np.array([1, 2, 3, 4])y1 = x1 ** 2x2 = np.array([4, 3, 2, 1])y2 = np.sin(x2)lines = plt.plot(x1, y1, x2, y2)plt.setp(lines, color='r', linewidth=2.0)

image.png

Line2D的属性

image.png

pro1 = {       'alpha':0.2,       'animated':True, #动画?啥效果?       'antialiased':True,#抗锯齿 默认为True       'color': 'red',       'dash_capstyle': 'butt', #不知道干啥的  包裹起来?       'dash_joinstyle': 'miter', #不知道干啥的       'label': "会出现吗?",       'linestyle': 'steps',       #'lod': True 为啥没这属性       'marker': '+',       'markeredgecolor': 'red', #断点的颜色?       'markeredgewidth': 2.0, #断点的大小       'markerfacecolor': 'yellow',       'markersize': 6.0 #这个是那个断点的大小,可是是什么压制了它的洪荒之力              }pro2 = {        'alpha':0.8,        'animated':False,        'aa':False,        'c': '#00FF00',        'linestyle': '--',        'marker': '1',        'mec': 'blue',        'mew': 3.0,        'mfc': 'yellow', #啥意思啊,嵌了一层黄色        'ms': 2.0            }x1 = np.arange(20)y1 = x1x2 = np.linspace(0, 20, 50)y2 = np.sin(x2)line1, line2 = plt.plot(x1, y1, x2, y2)# use keyword argsplt.setp(line1, **pro1)plt.setp(line2, **pro2)plt.show()

image.png

操作多figures和axes

matlab和pyplot都有当前figure,axes的概念,所有画图操作都会应用到当前的axes上。函数gca()会返回当前的axes对象,而gcf()会返回当前figure对象。

def f(t):    return np.exp(-t) * np.cos(2*np.pi*t)t1 = np.arange(0.0, 5.0, 0.1)t2 = np.arange(0.0, 5.0, 0.02)plt.figure(1)plt.subplot(211)plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')plt.subplot(212)plt.plot(t2, np.cos(2*np.pi*t2), 'r--')plt.show()

image.png

subplot(mnk)

m: numrows

n: numcols
k: plot_numer [1-m*n]

就相当于把一块画布割成m行n列,即有mn块小区域,k就是我们要子图所放的区域的标识,从1到mn。而且,从下面的例子中可以看出,位置是从上到下,从左往右标号的。

def f(t):    return np.exp(-t) * np.cos(2*np.pi*t)t1 = np.arange(0.0, 5.0, 0.1)plt.figure(1)plt.subplot(221)plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')plt.subplot(222)plt.plot(t1, f(t1), 'ro', t2, f(t2), 'k')plt.subplot(223)plt.plot(t1, f(t1), 'go', t2, f(t2), 'k')plt.subplot(224)plt.plot(t1, f(t1), 'yo', t2, f(t2), 'k')plt.show()

image.png

clf()清空当前figure, cla()清空当前axes.

另外,figure所占内存,只用当调用的时候才会完全释放。

加入Text

text() :可将文本加入至任意位置

xlabel(), ylabel(), title() :加入至固定位置

mu, sigma = 100, 15x = mu + sigma * np.random.randn(10000)# the histogram of the datan, bins, patches = plt.hist(x, 50, density=1, facecolor='g', alpha=0.75)plt.xlabel('Smarts')plt.ylabel('Probability')plt.title('Histogram of IQ')plt.text(60, .025, r'$\mu=100,\ \sigma=15$')#r表示原始字符串,否则得这么写plt.text(60, .025, '$\\mu=100,\ \\sigma=15$')plt.axis([40, 160, 0, 0.03])plt.grid(True)plt.show()

image.png

Annotating text

ax = plt.subplot(111)t = np.arange(0.0, 5.0, 0.01)s = np.cos(2*np.pi*t)line, = plt.plot(t, s, lw=2)plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),             arrowprops=dict(facecolor='black', shrink=0.05),             )plt.ylim(-2, 2)plt.show()

image.png

非线性axes

pyplot提供非线性标度,如对数化等等。(纵坐标好像还是原来的y,只是图像变了)

from matplotlib.ticker import NullFormatter  # useful for `logit` scale# Fixing random state for reproducibilitynp.random.seed(19680801)# make up some data in the interval ]0, 1[y = np.random.normal(loc=0.5, scale=0.4, size=1000)y = y[(y > 0) & (y < 1)]y.sort()x = np.arange(len(y))# plot with various axes scalesplt.figure(1)# linearplt.subplot(221)plt.plot(x, y)plt.yscale('linear')plt.title('linear')plt.grid(True)# logplt.subplot(222)plt.plot(x, y)plt.yscale('log')plt.title('log')plt.grid(True)# symmetric logplt.subplot(223)plt.plot(x, y - y.mean())plt.yscale('symlog', linthreshy=0.01)plt.title('symlog')plt.grid(True)# logitplt.subplot(224)plt.plot(x, y)plt.yscale('logit')plt.title('logit')plt.grid(True)# Format the minor tick labels of the y-axis into empty strings with# `NullFormatter`, to avoid cumbering the axis with too many labels.plt.gca().yaxis.set_minor_formatter(NullFormatter())# Adjust the subplot layout, because the logit one may take more space# than usual, due to y-tick labels like "1 - 10^{-3}"plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25,                    wspace=0.35)plt.show()

image.png

转载于:https://www.cnblogs.com/MTandHJ/p/10804598.html

你可能感兴趣的文章
解决windows环境中python2.7'ascii' codec can't encode character
查看>>
maven 项目中出现红叉
查看>>
oracle用户表视图初探
查看>>
使用HPjmeter分析GC log
查看>>
每天一个linux命令(3):pwd命令
查看>>
google重定向错误问题
查看>>
当你碰到所装操作系统和服务器不兼容该怎么办?(虚拟化技术)
查看>>
Sublime3 快捷键
查看>>
apache压力测试(性能及监控)
查看>>
列出所有子集-----字典顺序 2013年1月14日
查看>>
定制个人的todo list
查看>>
Python+sklearn使用线性回归算法预测儿童身高
查看>>
记一次与自动论坛发帖机的斗争
查看>>
Linux shell 编程-关于16进制
查看>>
Hello! RenderScript
查看>>
java集合框架印象
查看>>
poj(2406)(kmp)
查看>>
恢复Reflector反编译后资源文件的办法
查看>>
HandlerExceptionResolver异常解析器家族揭秘
查看>>
Red Hat Linux4.0下主DNS服务器的搭建
查看>>