pylab.show()没有显⽰图形图像(python的matplotlib画图
包)
no display name and no $DISPLAY environment variable
============================
@Neil's answer is one (perfectly valid!) way of doing it, but you can also , and then continue as normal.
<
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10))
fig.savefig('temp.png')
You don't have to use the Agg backend, as well. The can all be used without an X-server. However, only the Agg backend will be built by default (I think?), so there's a good chance that the other backends may not be enabled on your particular install.
Alternately, you can just set the backend parameter in your to automatically have matplotlib.pyplot use the given renderer.
REF:
============================
import pylab
pylab.ion()
x = pylab.arange( 0, 10, 0.1)
y = pylab.sin(x)
pylab.plot(x,y, 'ro-')
pylab.show()
pylab.savefig('temp.png')
============================
1. # plotting with the pylab module from matplotlib
2. # free from: matplotlib.sourceforge/
3. # used windows istaller matplotlib-0.90.0.
4. # tested with Python25 EU 4/21/2007
5.
6. import math
7. import pylab # matplotlib
8.
9. # create the x list data
10. # arange() is just like range() but allows float numbers
11. x_list = pylab.arange(0.0, 5.0, 0.01)
12.
13. # calculate the y list data
14. y_list = []
15. for x in x_list:
16. y = s(2*math.pi*x) * p(-x)
17. y_list.append(y)
18.
19. pylab.xlabel("x")
20. pylab.ylabel("cos(2pi * x) * exp(-x)")
21.
22. # draw the plot with a blue line 'b' (is default)
23. # using x,y data from the x_list and y_list
24. # (these lists can be brought in from other programs)
25. #
26. # other drawing styles -->
27. # 'r' red line, 'g' green line, 'y' yellow line
28. # 'ro' red dots as markers, 'r.' smaller red dots, 'r+' red pluses
29. # 'r--' red dashed line, 'g^' green triangles, 'bs' blue squares
30. # 'rp' red pentagons, 'r1', 'r2', 'r3', 'r4' well, check out the markers
31. #
32. pylab.plot(x_list, y_list, 'b')
33.
34. # save the plot as a PNG image file (optional)
35. pylab.savefig('Fig1.png')
36.
37. # show the pylab plot window
38. # you can zoom the graph, drag the graph, change the margins, save the graph
39. pylab.show()
==========================
matplotlib compiled fine, but nothing shows up when I use it
The first thing to try is a and see if that helps. If not, the best way to test your install is by running a script, rather than working interactively from a python shell or an integrated development environment such as IDLE which add additional complexities. Open up a UNIX shell or a DOS command prompt and cd into a directory containing a minimal example in a file. Something like simple_plot.py for example:
from pylab import *
plot([1,2,3])
show()
and run it with:
python simple_plot.py --verbose-helpful
This will give you additional information about which backends matplotlib is loading, version information, and more. At this point you might want to make sure you understand matplotlib’s process, governed by the matplotlibrc configuration file which contains instructions within and the concept of the matplotlib backend.
=================
5 matplotlib-绘制精美的图表
是python最著名的绘图库,它提供了⼀整套和matlab相似的命令API,⼗分适合交互式地进⾏制图。⽽且也可以⽅便地将它作为绘图控件,嵌⼊GUI应⽤程序中。
它的⽂档相当完备,并且中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页⾯中浏览/复制/粘贴⼀下,基本上都能搞定。
本章节作为matplotlib的⼊门介绍,将较为深⼊地挖掘⼏个例⼦,从中理解和学习matplotlib绘图的⼀些基本概念。
5.1 快速绘图
matplotlib的pyplot⼦库提供了和matlab类似的绘图API,⽅便⽤户快速绘制2D图表。让我们先来看⼀个简单的例⼦:
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000)
y = np.sin(x)
z = np.cos(x**2)
plt.figure(figsize=(8,4))
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,z,"b--",label="$cos(x^2)$")
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("PyPlot First Example")
plt.ylim(-1.2,1.2)
plt.legend()
plt.show()
图5.1 调⽤pyplot库快速将数据绘制成曲线图
matplotlib中的快速绘图的函数库可以通过如下语句载⼊:
import matplotlib.pyplot as plt
pylab模块
matplotlib还提供了名为pylab的模块,其中包括了许多numpy和pyplot中常⽤的函数,⽅便⽤户快速进⾏计算和绘图,可以⽤于IPython中的快速交互式使⽤。
接下来调⽤figure创建⼀个绘图对象,并且使它成为当前的绘图对象。
plt.figure(figsize=(8,4))
也可以不创建绘图对象直接调⽤接下来的plot函数直接绘图,matplotlib会为我们⾃动创建⼀个绘图对象。如果需要同时绘制多幅图表的话,可以是给figure传递⼀个整数参数指定图标的序号,如果所指定序号的绘图对象已经存在的话,将不创建新的对象,⽽只是让它成为当前绘图对象。
通过figsize参数可以指定绘图对象的宽度和⾼度,单位为英⼨;dpi参数指定绘图对象的分辨率,即每英⼨多少个像素,缺省值为80。因此本例中所创建的图表窗⼝的宽度为8*80 = 640像素。
但是⽤⼯具栏中的保存按钮保存下来的png图像的⼤⼩是800*400像素。这是因为保存图表⽤的函数savefig使⽤不同的DPI配置,savefig函数也有⼀个dpi参数,如果不设置的话,将使⽤matplotlib配置⽂件中的配置,此配置可以通过如下语句进⾏查看,关于配置⽂件将在后⾯的章节进⾏介绍:
>>> import matplotlib
>>> Params["savefig.dpi"]
100
下⾯的两⾏程序通过调⽤plot函数在当前的绘图对象中进⾏绘图:
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,z,"b--",label="$cos(x^2)$")
plot函数的调⽤⽅式很灵活,第⼀句将x,y数组传递给plot之后,⽤关键字参数指定各种属性:
label : 给所绘制的曲线⼀个名字,此名字在图⽰(legend)中显⽰。只要在字符串前后添加"$"符号,matplotlib就会使⽤其内嵌的latex引擎绘制的数学公式。
color : 指定曲线的颜⾊
linewidth : 指定曲线的宽度
第⼆句直接通过第三个参数"b--"指定曲线的颜⾊和线型,这个参数称为格式化参数,它能够通过⼀些易记的符号快速指定曲线的样式。其中b表⽰蓝⾊,"--"表⽰线型为虚线。在IPython中输⼊ "plt.plot?" 可以查看格式化字符串的详细配置。
接下来通过⼀系列函数设置绘图对象的各个属性:
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("PyPlot First Example")
plt.ylim(-1.2,1.2)
plt.legend()
xlabel : 设置X轴的⽂字
ylabel : 设置Y轴的⽂字
title : 设置图表的标题
ylim : 设置Y轴的范围
legend : 显⽰图⽰
最后调⽤plt.show()显⽰出我们创建的所有绘图对象。
5.1.1 配置属性
matplotlib所绘制的图的每个组成部分都对应有⼀个对象,我们可以通过调⽤这些对象的属性设置⽅法set_*或者pyplot的属性设置函数setp设置其属性值。例如plot函数返回⼀个 matplotlib.lines.Line2D 对象的列表,下⾯的例⼦显⽰如何设置Line2D对象的属性:
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> x = np.arange(0, 5, 0.1)
>>> line, = plt.plot(x, x*x) # plot返回⼀个列表,通过line,获取其第⼀个元素
>>> # 调⽤Line2D对象的set_*⽅法设置属性值
>>> line.set_antialiased(False)
>>> # 同时绘制sin和cos两条曲线,lines是⼀个有两个Line2D对象的列表
>>> lines = plt.plot(x, np.sin(x), x, np.cos(x)) #
>>> # 调⽤setp函数同时配置多个Line2D对象的多个属性值
>>> plt.setp(lines, color="r", linewidth=2.0)
这段例⼦中,通过调⽤Line2D对象line的set_antialiased⽅法,关闭对象的反锯齿效果。或者通过调⽤plt.setp函数配置多个Line2D对象的颜
⾊和线宽属性。
同样我们可以通过调⽤Line2D对象的get_*⽅法,或者p函数获取对象的属性值:
>>> _linewidth()
1.0
>>> p(lines[0], "color") # 返回color属性
'r'
>>> p(lines[1]) # 输出全部属性
alpha = 1.0
animated = False
antialiased or aa = True
axes = Axes(0.125,0.1;0.775x0.8)
... ...
注意getp函数只能对⼀个对象进⾏操作,它有两种⽤法:
指定属性名:返回对象的指定属性的值
不指定属性名:打印出对象的所有属性和其值
matplotlib的整个图表为⼀个Figure对象,此对象在调⽤plt.figure函数时返回,我们也可以通过f函数获取当前的绘图对象:
>>> f = f()
>>> p(f)
alpha = 1.0
animated = False
...
Figure对象有⼀个axes属性,其值为AxesSubplot对象的列表,每个AxesSubplot对象代表图表中的⼀个⼦图,前⾯所绘制的图表只包含⼀个⼦图,当前⼦图也可以通过a获得:
>>> p(f, "axes")
[<matplotlib.axes.AxesSubplot object at 0x05CDD170>]
>>> a()
<matplotlib.axes.AxesSubplot object at 0x05CDD170>
⽤p可以发现AxesSubplot对象有很多属性,例如它的lines属性为此⼦图所包括的 Line2D 对象列表:
>>> alllines = a(), "lines")
>>> alllines
<a list of 3 Line2D objects>
>>> alllines[0] == line # 其中的第⼀条曲线就是最开始绘制的那条曲线
True
通过这种⽅法我们可以很容易地查看对象的属性和它们之间的包含关系,到需要配置的属性。
5.2 绘制多轴图
⼀个绘图对象(figure)可以包含多个轴(axis),在Matplotlib中⽤轴表⽰⼀个绘图区域,可以将其理解为⼦图。上⾯的第⼀个例⼦中,绘图对象只包括⼀个轴,因此只显⽰了⼀个轴(⼦图)。我们可以使⽤subplot函数快速绘制有多个轴的图表。subplot函数的调⽤形式如下:
subplot(numRows, numCols, plotNum)
subplot将整个绘图区域等分为numRows⾏ * numCols列个⼦区域,然后按照从左到右,从上到下的顺序对每个⼦区域进⾏编号,左上的⼦区域的编号为1。如果numRows,numCols和plotNum这三个数都⼩于10的话,可以把它们缩写为⼀个整数,例如subplot(323)和
subplot(3,2,3)是相同的。subplot在plotNum指定的区域中创建⼀个轴对象。如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。
下⾯的程序创建3⾏2列共6个轴,通过axisbg参数给每个轴设置不同的背景颜⾊。
for idx, color in enumerate("rgbyck"):
plt.subplot(320+idx+1, axisbg=color)
plt.show()
_images/pyplot_subplot01.png
图5.2 ⽤subplot函数将Figure分为六个⼦图区域
如果希望某个轴占据整个⾏或者列的话,可以如下调⽤subplot:
plt.subplot(221) # 第⼀⾏的左图
plt.subplot(222) # 第⼀⾏的右图
plt.subplot(212) # 第⼆整⾏
plt.show()
_images/pyplot_subplot02.png
图5.3 将Figure分为三个⼦图区域
当绘图对象中有多个轴的时候,可以通过⼯具栏中的Configure Subplots按钮,交互式地调节轴之间的间距和轴与边框之间的距离。如果希
望在程序中调节的话,可以调⽤subplots_adjust函数,它有left, right, bottom, top, wspace, hspace等⼏个关键字参数,这些参数的值都是0到1之间的⼩数,它们是以绘图区域的宽⾼为1进⾏正规化之后的坐标或者长度。
5.3 配置⽂件
⼀幅图有许多需要配置的属性,例如颜⾊、字体、线型等等。我们在绘图时,并没有⼀⼀对这些属性进⾏配置,许多都直接采⽤了Matplotlib的缺省配置。Matplotlib将缺省配置保存在⼀个⽂件中,通过更改这个⽂件,我们可以修改这些属性的缺省值。
Matplotlib 使⽤配置⽂件 matplotlibrc 时的搜索顺序如下:
当前路径 : 程序的当前路径
⽤户配置路径 : 通常为 HOME/.matplotlib/,可以通过环境变量MATPLOTLIBRC修改
系统配置路径 : 保存在 matplotlib的安装⽬录下的 mpl-data 下
通过下⾯的语句可以获取⽤户配置路径:
>>> import matplotlib
>>> _configdir()
'C:\\Documents and Settings\\zhang\\.matplotlib'
通过下⾯的语句可以获得⽬前使⽤的配置⽂件的路径:
>>> import matplotlib
>>> matplotlib.matplotlib_fname()
'C:\\Python26\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc'
由于在当前路径和⽤户配置路径中都没有到位置⽂件,因此最后使⽤的是系统配置路径下的配置⽂件。如果你将matplotlibrc复制⼀份到脚本的当前⽬录下:
>>> import os
>>> os.getcwd()
'C:\\zhang\\doc'
复制配置⽂件之后再运⾏:
>>> matplotlib.matplotlib_fname()
'C:\\zhang\\doc\\matplotlibrc'
如果你⽤⽂本编辑器打开此配置⽂件的话,你会发现它实际上是定义了⼀个字典。为了对众多的配置进⾏区分,关键字可以⽤点分开。
配置⽂件的读⼊可以使⽤ rc_params 函数,它返回⼀个配置字典:
>>> _params()
{'agg.path.chunksize': 0,
'axes.axisbelow': False,
'axes.edgecolor': 'k',
'axes.facecolor': 'w',
... ...
在matplotlib模块载⼊的时候会调⽤rc_params,并把得到的配置字典保存到rcParams变量中:
>>> Params
{'agg.path.chunksize': 0,
'axes.axisbelow': False,
... ...
matplotlib将使⽤rcParams中的配置进⾏绘图。⽤户可以直接修改此字典中的配置,所做的改变会反映到此后所绘制的图中。例如下⾯的脚本所绘制的线将带有圆形的点标识符:
>>> Params["lines.marker"] = "o"
>>> import pylab
>>> pylab.plot([1,2,3])
>>> pylab.show()
为了⽅便配置,可以使⽤rc函数,下⾯的例⼦同时配置点标识符、线宽和颜⾊:
>>> ("lines", marker="x", linewidth=2, color="red")
如果希望恢复到缺省的配置(matplotlib载⼊时从配置⽂件读⼊的配置)的话,可以调⽤ rcdefaults 函数。
>>> defaults()
如果⼿⼯修改了配置⽂件,希望重新从配置⽂件载⼊最新的配置的话,可以调⽤:
matplotlib中subplot>>> Params.update( _params() )
5.4 Artist对象
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论