文章标题

来源:互联网 发布:java获取文件路径 编辑:程序博客网 时间:2024/06/06 04:13

pyplot tutorial

环境: Anaconda4.2.0

matplotlib.pyplot工作流程

pyplot 有两个重要概念: current figure, current axes
记住所有的plot命令都会应用到 current axes

一般pyplot画图具有这样一个流程

  1. 创建一个当前画板 plt.figure(1), 1为画板的编号,可以不填,这一步骤也可以省略, 直接执行第2步后台会自动执行这一步
  2. plt.subplot(221) 将当前画板分为4个绘画区域(axes),221表示将画板分为2行2列,并在第一个画板绘图
  3. plt.plot(x,y,…) 绘图,并制定 line 的属性和图例
  4. plt.xlabel(‘x’) 等 配置坐标轴
  5. plt.show() 显示图片
Created with Raphaël 2.1.0create figurecreate plot areaplot linesdecorate the plot with labelshow()

import matplotlib.pyplot as pltimport numpy as np#只传入一个参数的话, 默认为y轴, x轴默认为range(n),输出为把输入连起来的折线plt.plot([1, 2, 3, 4])plt.xlabel('x轴说明')plt.ylabel('y轴说明')plt.plot([1,2,3,4],[1,4,9,16], 'ro') # ro 表示点的颜色和形状, 默认为 'b-'# 指定坐标轴的取值范围 [xmin, xmax, ymin, ymax]plt.axis([0, 6, 0, 20])  # 注意传入的是一个列表x = np.arange(0, 4, 0.02) # plot可以一步画出多条线plt.plot(x, x, 'r--', x, np.power(x,2), 'bs', x, np.power(x,3), 'g^')

controlling line properties

绘图中的line有很多属性 ,这里有很多方式设置line properties

  1. 关键字 如: linewidth
    plt.plot(x, y, 'linewidth'=2.0)

  2. 使用 matplotlib.line.Line2D 的set方法, plt.plot() 会返回 matplotlib.line.Line2D对象元组 如
    line1, line2 = plot(x1, y1, x2 ,y2)

  3. 使用pyplot.setp()方法(set properties), 该方法透明处理单个对象和一组对象(见例子)

import matplotlib.pyplot as pltimport numpy as np#2x = np.arange(0, 4, 0.2)# 返回的是一个元组, 通过 line, 取得元组的第一个元素line, = plt.plot(x, y, 'g-')#关闭抗锯齿, 可以看到输出的图像与之前比起来不是那么平滑line.set_antialiased(False) #3line1, line2 = plot(x1, y1, x2 ,y2)plt.setp(lines, color='r', 'linewidth'=2.0)lines = plt.plot([1, 2, 3])# 为了得到可设置的 line properties,plt.setp(lines)# 如果你只想知道某一个属性的有用取值, 如下(属性要用''括起来)plt.setp(lines, 'linestyle')

working with multiple figures and axes

pyplot 有两个重要概念: current figure, current axes
记住所有的plot命令都会应用到 current axes

plt.gca(): 返回当前axes(matplotlib.axes.Axes)
plt.gcf(): 返回当前figure(matplotlib.figure.Figure)
plt.clf(): 清理当前figure
plt.cla(): 清理当前axes
plt.close(): 一副figure知道显示的调用close()时才会释放她所占用的资源;
如果你在画很多图,就要注意了,防止内存占用过高

import numpy as npimport matplotlib.pyplot as pltplt.figure(1)def f(t):    return np.exp(-t) * np.cos(2*np.pi*t)t1 = np.arange(0.0, 5.0, 0.1)plt.subplot(211)plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')# 心形线参数方程:x=a*(2*cos(t)-cos(2*t)), y=a*(2*sin(t)-sin(2*t))t2 = np.arange(0.0, np.pi, pi/20)x = 2*np.cos(t2)-np.cos(2*t2)y = 2*np.sin(t2) - np.sin(2*t)plt.subplot(212)plt.axis([-6, 4, -5, 5])plt.plot(x, y, 'r--')plt.show()

Working with text

text(x, y, s[, fontsize]): 在坐标(x,y)显示s ,fontsize指定字体大小

plt.text()可以在任意位置添加文本, 而plt.xlabel(), plt.ylabel, plt.title()是将文本放在指定位置


np.random.randn(n): 这个函数的作用就是从标准正态分布中返回n个样本值

p, bins, patches = plt.hist(data, bins, normed=True, facecolor='g', alpha=0.75)

上述命令画的是一个直方图(histogram)
1. data: 输入数据集,如 np.random.randn(10000)
2. bins: 直方图中长条(箱子)的个数
3. ‘g’: 箱子的颜色
4. alpha: 箱子的透明度
5. normed: 决定直方图y轴取值是落在某个箱子中的元素的个数(normed=False或normed=0),
还是某个箱子中的元素的个数占总体的百分比(normed=True或normed=1)
返回值
6. p: 直方图中 数据x落在 某个箱子里元素个数(或者占比)组成的数组
7. n: 直方图中 箱子取值(可能是落在该区间的x的均值)组成的数组
8. patches: 是一个封装了 p 和 n信息的列表的集合(Patch对象)

import numpy as npimport matplotlib.pyplot as plt# Fixing random state for reproducibility# np.random.randn 这个函数的作用就是从标准正态分布中返回一个或多个样本值np.random.seed(20170617)mu, sigma = 100, 15x = mu + sigma * np.random.randn(10000)p, bins, patches = plt.hist(x, 50, normed=True, 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$')plt.axis([40, 160, 0, 0.03])plt.grid(True) # 显示网格plt.show()

12

原创粉丝点击