备忘:python matplotlib

本文详细介绍了使用Matplotlib库进行数据可视化的方法,包括坐标轴设置、曲线特征控制、文字处理、画函数、画子图、画直方图、画分布图、画BoxPlot图、画幂函数图及显示图形中的数学公式等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.norm.html#scipy.stats.norm

http://docs.scipy.org/doc/scipy-0.7.x/reference/tutorial/interpolate.html
http://docs.scipy.org/doc/scipy-0.7.x/reference/generated/scipy.stats.norm.html?highlight=norm#scipy.stats.norm
http://docs.scipy.org/doc/scipy-0.7.x/reference/tutorial/interpolate.html?highlight=fit%20curve
http://stackoverflow.com/questions/7805552/fitting-a-histogram-with-python
http://docs.scipy.org/doc/scipy/reference/stats.html

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.probplot.html#scipy.stats.probplot


典型的Matplot例子:http://www.kunli.info/2009/02/08/matplot-python-manual/

import numpy as np
import matplotlib.pyplot as plt

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–’)

题目,坐标轴设置

最简单的就是通过title,xlabel和ylabel设置,比如

xlabel(“xxxx”, fontsize=18, color=”red”)

这里title是某个axis的title,如果希望整个figure有title,那么需要用suptitle() 函数,用法和title是一样的。
x和y轴的范围设定是通过

plt.axis([0, 6, 0, 20])

这就是表示x轴是0到6,y轴是0到20。也可以用xlim和ylim单独控制,比如

ylim( ymin, ymax )

当然还可以用yscale和xscale指定坐标轴的scale类型,分别是‘linear’ | ‘log’ | ‘symlog’,比如

xscale("log")

还可以通过yaxis.grid和xaxis.grid控制怎么显示网格,是否显示网格。grid的函数是这样的

grid(self, b=None, which=’major’, **kwargs)
Set the axis grid on or off; b is a boolean use which =
‘major’ | ‘minor’ to set the grid for major or minor ticks

如果用yaxis.grid (false),就表示不用显示y轴方向的网格。

有时候我们需要在坐标轴上放文字,比如在x轴上放置月份名称之类,这就需要xticks函数。其用法是比如

xticks( arange(5), ('Tom', 'Dick', 'Harry', 'Sally', 'Sue') )

这里,第一个参数表示放置位置,第二个是放置内容。

设置曲线特征

lines = plt.plot(x1, y1, x2, y2)
# use keyword args
plt.setp(lines, color='r', linewidth=2.0)
# or matlab style string value pairs
plt.setp(lines, 'color', 'r', 'linewidth', 2.0)

如果希望知道有哪些属性可以指定,可以传递对象给setp()函数,比如

In [69]: lines = plt.plot([1,2,3])

In [70]: plt.setp(lines)
alpha: float
animated: [True | False]
antialiased or aa: [True | False]
…snip

具体能控制的属性参见这里

文字处理
text()命令可以被用来放置文字在绝对坐标轴上,用法是

text(60, .025, r'$\mu=100,\ \sigma=15$', horizontalalignment='left', verticalalignment='top')

放置的东西前面加个r表示包括数学公式。具体能控制的属性可以参见属性列表。具体的数学公式和符号的表达方式参见这里

这只是放置文字,还有一种需求是要求放置文字标注比如这种图:

这时候就要用到anotate()函数了,用法大概是这样的,

plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5), arrowprops=dict(facecolor='black', shrink=0.05), )

第一个参数是要放置的文字,第二个参数是要指向的坐标,第三个是放置文字的坐标,最后一个是箭头属性。相关属性设置参见这里

对于经常写公式的人来讲,可能latex的格式会感觉更加常用一点。这时候,可以在放置text之前先用

rc('text', usetex=True)

然后与文字有关的地方都用r”"来引用,比如

title(r"\TeX\ is Number $\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!",
fontsize=16, color='r')

画函数

plt.plot最简单的形式就是take一组列表数据

plt.plot([1,2,3])

此时plot自动将其认为是y轴的数据,x轴数据自动分配,相当于是

plt.plot([0,1,2],[1,2,3])

也就是说,对于plot,标准形式是

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

当然,后面可以跟控制表示形式的参数,比如

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

就表示用红色点表示,而不是直线。参数默认是’b-’,表示蓝色直线。
plot还支持同时在一张图里面绘制多个图形,比如


import matplotlib.pyplot as plt
plt.plot(x1, y1, 'r--', x2, y2, 'bs', x3, y3, 'g^')

就可以用不同的形式绘制三条曲线。

画子图

用plt.subplot(xxx),第一个数字表示numrows,第二个表示numcols,第三个表示fignum。fignum的数量最高也就是numrows乘以numcols。

如果是想产生多个图,每个图包含几个子图,那用figure()来控制图的数量。

画直方图

用函数

hist(x, bins=10, range=None, normed=False, cumulative=False,
bottom=None, histtype='bar', align='mid',
orientation='vertical', rwidth=None, log=False, **kwargs)

具体用法参加这里

画分布图
函数

scatter(x, y, s=20, c='b', marker='o', cmap=None, norm=None,
vmin=None, vmax=None, alpha=1.0, linewidths=None,
verts=None, **kwargs)

具体参数看这里,唯一一个不是很确定的是s的取值,我曾经估计是s值要和x和y的列表长度一样,也就是大概是点的个数?但具体画的时候发现不是这样,点的个数取决于x和y的列表长度。有待研究。

画Box Plot图
用matplot画Box Plot不知道有多方便,直接用函数

boxplot(x, notch=0, sym='+', vert=1, whis=1.5,
positions=None, widths=None)

你直接把一组数用x送进去,出来就是Box图。如果你想一个图表示多个Box,也很简单,让xappend多个list,出来的就是这些list的box图。一个例子如下

for attribute in iris[type].keys():
list = iris[type][attribute]
data.append(list)
subplot(2,2,count)
title("Boxplot of %s" % type, fontsize=18, color="red")
xticks(arange(5),("","Sepal len","Sepal wid","Petal len","Petal wid"))
ylabel("Value")
boxplot(data,0,'gd')

详细的属性控制参见这里

画幂函数图

例子

from matplotlib.matlab import *

x = linspace(-4, 4, 200)
f1 = power(10, x)
f2 = power(e, x)
f3 = power(2, x)

plot(x, f1, 'r', x, f2, 'b', x, f3, 'g', linewidth=2)
axis([-4, 4, -0.5, 8])
text(1, 7.5, r'$10^x$', fontsize=16)
text(2.2, 7.5, r'$e^x$', fontsize=16)
text(3.2, 7.5, r'$2^x$', fonsize=16)
title('A simple example', fontsize=16)

savefig('power.png', dpi=75)
show()

显示图形中的数学公式

Matplotlib 可以支持一部分 TeX 的排版指令,因此用户在绘制含有数学公式的图形时会感到很方便并且可以得到比较满意的显示效果,所需要的仅仅是一些 TeX 的排版知识。下面的这个例子显示了如何在图形的不同位置上, 如坐标轴标签,图形的标题以及图形中适当的位置处,显示数学公式。相应的 Python 程序如下:

from matplotlib.matlab import *
def f(x, c):
m1 = sin(2*pi*x)
m2 = exp(-c*x)
return multiply(m1, m2)
x = linspace(0, 4, 100)
sigma = 0.5
plot(x, f(x, sigma), 'r', linewidth=2)
xlabel(r'$\rm{time} \ t$', fontsize=16)
ylabel(r'$\rm{Amplitude} \ f(x)$', fontsize=16)
title(r'$f(x) \ \rm{is \ damping \ with} \ x$', fontsize=16)
text(2.0, 0.5, r'$f(x) = \rm{sin}(2 \pi x^2) e^{\sigma x}$', fontsize=20)
savefig('latex.png', dpi=75)
show()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值