东莞做网站哪家好,惠州网站建设是什么,学校网站资源库建设和资源上传,wordpress仿站教程百度云http://blog.csdn.net/pipisorry/article/details/37742423
matplotlib介绍 matplotlib 是python最著名的绘图库#xff0c;它提供了一整套和matlab相似的命令API#xff0c;十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件#xff0c;嵌入GUI应用程序中。它的…http://blog.csdn.net/pipisorry/article/details/37742423
matplotlib介绍 matplotlib 是python最著名的绘图库它提供了一整套和matlab相似的命令API十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件嵌入GUI应用程序中。它的文档相当完备并且Gallery页面 中有上百幅缩略图打开之后都有源程序。因此如果你需要绘制某种类型的图只需要在这个页面中浏览/复制/粘贴一下基本上都能搞定。 在Linux下比较著名的数据图工具还有gnuplot这个是免费的Python有一个包可以调用gnuplot但是语法比较不习惯而且画图质量不高。而Matplotlib则比较强Matlab的语法、python语言、latex的画图质量还可以使用内嵌的latex引擎绘制的数学公式。 可以在Ipython中输入类似plt.plot??的命令查看pyplot模块的函数是如何对各种绘图对象进行包装的。
面向对象方式绘图
matplotlib实际上是一套面向对象的绘图库它所绘制的图表中的每个绘图元素例如线条Line2D、文字Text、刻度等在内存中都有一个对象与之对应。 为了方便快速绘图matplotlib通过pyplot模块提供了一套和MATLAB类似的绘图API将众多绘图对象所构成的复杂结构隐藏在这套API内部。我们只需要调用pyplot模块所提供的函数就可以实现快速绘图以及设置图表的各种细节。pyplot模块虽然用法简单
但不适合在较大的应用程序中使用
。 获取当前图和轴线
为了将面向对象的绘图库包装成只使用函数的调用接口pyplot模块的内部保存了当前图表以及当前子图等信息。当前的图表和子图可以使用
plt.gcf()和plt.gca()
获得分别表示Get Current Figure和Get Current Axes。在pyplot模块中许多函数都是对当前的Figure或Axes对象进行处理比如说
plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax然后再调用ax.plot()方法实现真正的绘图。 如用下面的代码先获得axes对象再用ax来操作 ax plt.gca()
ax plt.axes()地如设置xy轴的tickers就要用ax.yaxis来操作 ax.yaxis.set_minor_locator(yminorLocator) 安装numpy和matplotlib
pip install numpy
pip install matplotlib matplotlib安装出错
ImportError: libBLT.2.4.so.8.6: cannot open shared object file: No such file or directory, please install the python3-tk package [import matplotlib.pyplot as plt fails with error about python-tk]
检测是否安装成功 import numpy numpy.__version__ import matplotlib matplotlib.__version__
不同绘图语言比较
工科生说Matlab完爆其他数学系的说Mathematica高贵冷艳统计系的说R语言作图领域天下无敌 计算机系的说Python低调奢华有内涵[如何在论文中画出漂亮的插图] matplotlib.pyplot模块 - 快速绘图
matplotlib的pyplot子库提供了和matlab类似的绘图API方便用户快速绘制2D图表。
1.调用figure创建一个绘图对象并且使它成为当前的绘图对象。可选
plt.figure(figsize(8,4))也可以不创建绘图对象直接调用接下来的plot函数直接绘图matplotlib会为我们自动创建一个绘图对象如果需要同时绘制多幅图表的话可以是给figure传递一个整数参数指定图标的序号如果所指定序号的绘图对象已经存在的话将不创建新的对象而只是让它成为当前绘图对象。figsize参数指定绘图对象的宽度和高度单位为英寸dpi参数指定绘图对象的分辨率即每英寸多少个像素缺省值为80。因此本例中所创建的图表窗口的宽度为8*80 640像素。但是用show()出来的工具栏中的保存按钮保存下来的png图像的大小是800*400像素。这是因为保存图表用的函数savefig使用不同的DPI配置savefig函数也有一个dpi参数如果不设置的话将使用matplotlib配置文件中的配置此配置可以通过如下语句进行查看matplotlib.rcParams[savefig.dpi]100
2.通过调用plot函数在当前的绘图对象中进行绘图 plt.plot(years, price, b*)#,label$cos(x^2)$) plt.plot(years, price, r)Note:1. 第一句将x,y数组传递给plot2.通过第三个参数b--指定曲线的颜色和线型这个参数称为格式化参数它能够通过一些易记的符号快速指定曲线的样式。其中b表示蓝色--表示线型为虚线。3. 用关键字参数指定各种属性label : 给所绘制的曲线一个名字此名字在图示/图例(legend)中显示。只要在字符串前后添加$符号matplotlib就会使用其内嵌的latex引擎绘制的数学公式。color : 指定曲线的颜色linewidth : 指定曲线的宽度具体参见【附录 - matplotlib中的作图参数】
3.设置绘图对象的各个属性 plt.xlabel(years(2000)) #设置X轴的文字 plt.ylabel(housing average price(*2000 yuan)) plt.ylim(0, 15) #设置Y轴的范围 plt.title(line_regression gradient decrease) #设置图表的标题 plt.legend() #显示图示
设置xlabel和ylabel显示的大小 import matplotlib
matplotlib.rc(xtick, labelsize18)
matplotlib.rc(ytick, labelsize18) 给一些特殊点做注释 我们希望在 的位置给两条函数曲线加上一个注释。首先我们在对应的函数图像位置上画一个点然后向横轴引一条垂线以虚线标记最后写上标签。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...t 2*np.pi/3
plot([t,t],[0,np.cos(t)], color blue, linewidth2.5, linestyle--)
scatter([t,],[np.cos(t),], 50, color blue)annotate(r$\sin(\frac{2\pi}{3})\frac{\sqrt{3}}{2}$,xy(t, np.sin(t)), xycoordsdata,xytext(10, 30), textcoordsoffset points, fontsize16,arrowpropsdict(arrowstyle-, connectionstylearc3,rad.2))plot([t,t],[0,np.sin(t)], color red, linewidth2.5, linestyle--)
scatter([t,],[np.sin(t),], 50, color red)annotate(r$\cos(\frac{2\pi}{3})-\frac{1}{2}$,xy(t, np.cos(t)), xycoordsdata,xytext(-90, -50), textcoordsoffset points, fontsize16,arrowpropsdict(arrowstyle-, connectionstylearc3,rad.2))
...精益求精
坐标轴上的记号标签被曲线挡住了作为强迫症患者雾这是不能忍的。我们可以把它们放大然后添加一个白色的半透明底色。这样可以保证标签和曲线同时可见。
1
2
3
4
5
...
for label in ax.get_xticklabels() ax.get_yticklabels():label.set_fontsize(16)label.set_bbox(dict(facecolorwhite, edgecolorNone, alpha0.65 ))
...[
Matplotlib 教程
*] plt.text(0.5,0.8,subplot words,colorblue,hacenter,transformax.trans Axes)
plt.figtext(0.1,0.92,figure words,colorgreen)
plt.annotate(buttom,xy(0,0),xytext(0.2,0.2),arrowpropsdict(facecolorblue, shrink0.05)) [matplotlib绘图图标注释2 ]
4.最后调用plt.show()显示出我们创建的所有绘图对象。
Matplotlib 里的常用类的包含关系为 Figure - Axes - (Line2D, Text, etc.)一个Figure对象可以包含多个子图(Axes)在matplotlib中用Axes对象表示一个绘图区域可以理解为子图。
matplotlib绘图显示同时继续跑下面的代码
方式1blockFalse参数或者plt.show(0) from matplotlib.pyplot import plot, draw, show
def p():plot([1, 2, 3])show(blockFalse)
p()
print(continue computation)
input()
但是在外部应该加一个input()输入enter结束图形显示否则鼠标点击是关闭不了图形的。 方式2draw() from matplotlib.pyplot import plot, draw, show
def p():plot([1, 2, 3])draw()
p()
print(continue computation)
# at the end call show to ensure window wont close.
show()
唯一的缺点就是show()函数放在了绘图函数外了。 方式3使用多线程 from multiprocessing import Process
from matplotlib import pyplot as plt
def p(args):plt.plot([1, 2, 3])plt.show()
p Process(targetp, args([1, 2, 3],))
p.start()print(continue computation)p.join()唯一的缺点就是要写多线程的代码但是至少plot模块都在一个函数中。
Note: target应为函数名而不应该是函数调用否则还是会绘图阻止程序向下运行。 [Is there a way to detach matplotlib plots so that the computation can continue?]
清空plt绘制的内容
plt.cla()
plt.close(0)# 关闭图 0
plt.close(all) 关闭所有图
图形保存和输出设置
可以调用plt.savefig()将当前的Figure对象保存成图像文件图像格式由图像文件的扩展名决定。下面的程序将当前的图表保存为“test.png”并且通过dpi参数指定图像的分辨率为 120因此输出图像的宽度为“8X120 960”个像素。plt.savefig(test.png,dpi120)也可以通过show()出来的图形界面手动保存和设置matplotlib中绘制完成图形之后通过show()展示出来我们还可以通过图形界面中的工具栏对其进行设置和保存matplotlib修改图片大小图形界面下方工具栏可以设置图形上下左右的边距如果想在跑程序外部查看图片可以这样
plt.savefig(/tmp/1.png)
subprocess.run(xdg-open /tmp/1.png, shellTrue)
有个问题就是绘制的图中横纵坐标下面的3.156e1代表什么意思也不是坐标值的单位那是什么呢。。。 5. 绘制多子图可以使用subplot()快速绘制包含多个子图的图表它的调用形式如下subplot(numRows, numCols, plotNum) matplotlib.pyplot.subplots(nrows1, ncols1, sharexFalse, shareyFalse, squeezeTrue, subplot_kwNone, gridspec_kwNone, **fig_kw) subplot将整个绘图区域等分为numRows行* numCols列个子区域然后按照从左到右从上到下的顺序对每个子区域进行编号左上的子区域的编号为1。如果numRowsnumCols和plotNum这三个数都小于10的话可以把它们缩写为一个整数例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的区域中创建一个轴对象。如果新创建的轴和之前创建的轴重叠的话之前的轴将被删除。 通过axisbg参数给每个轴设置不同的背景颜色。 subplot()返回它所创建的Axes对象我们可以将它用变量保存起来然后用sca()交替让它们成为当前Axes对象并调用plot()在其中绘图。 调节轴之间的间距和轴与边框之间的距离 当绘图对象中有多个轴的时候可以通过工具栏中的Configure Subplots按钮交互式地调节轴之间的间距和轴与边框之间的距离。 如果希望在程序中调节的话可以调用subplots_adjust函数它有left, right, bottom, top, wspace, hspace等几个关键字参数这些参数的值都是0到1之间的小数它们是以绘图区域的宽高为1进行正规化之后的坐标或者长度。 [matplotlib.pyplot.subplots_adjust] [matplotlib.pyplot.subplots] 6.绘制多图表 如果需要同时绘制多幅图表可以给figure()传递一个整数参数指定Figure对象的序号如果序号所指定的Figure对象已经存在将不创建新的对象而只是让它成为当前的Figure对象。 [python] view plain copy import numpy as np import matplotlib.pyplot as plt plt.figure(1) # 创建图表1 plt.figure(2) # 创建图表2 ax1 plt.subplot(211) # 在图表2中创建子图1 ax2 plt.subplot(212) # 在图表2中创建子图2 x np.linspace(0, 3, 100) for i in xrange(5): plt.figure(1) #选择图表1 plt.plot(x, np.exp(i*x/3)) plt.sca(ax1) #选择图表2的子图1 plt.plot(x, np.sin(i*x)) plt.sca(ax2) # 选择图表2的子图2 plt.plot(x, np.cos(i*x)) plt.show() 7. 在图表中显示中文 matplotlib的缺省配置文件中所使用的字体无法正确显示中文。为了让图表能正确显示中文可以有几种解决方案。 在程序中直接指定字体。在程序开头修改配置字典rcParams。修改配置文件。 比较简便的方式是中文字符串用unicode格式例如u测试中文显示代码文件编码使用utf-8 加上 # coding utf-8 一行。 [matplotlib输出图象的中文显示问题] 8. 面向对象画图 matplotlib API包含有三层Artist层处理所有的高层结构例如处理图表、文字和曲线等的绘制和布局。通常我们只和Artist打交道而不需要关心底层的绘制细节。 直接使用Artists创建图表的标准流程如下 创建Figure对象用Figure对象创建一个或者多个Axes或者Subplot对象调用Axies等对象的方法创建各种简单类型的Artists [python] view plain copy import matplotlib.pyplot as plt X1 range(0, 50) Y1 [num**2 for num in X1] # y x^2 X2 [0, 1] Y2 [0, 1] # y x Fig plt.figure(figsize(8,4)) # Create a figure instance Ax Fig.add_subplot(111) # Create a axes instance in the figure Ax.plot(X1, Y1, X2, Y2) # Create a Line2D instance in the axes Fig.show() Fig.savefig(test.pdf) [ matplotlib-绘制精美的图表 ] [什么是 Matplotlib 面向对象绘图] [ Python图表绘制matplotlib绘图库入门 ] 皮皮blog Matplotlib中的作图参数 a set of tables that show main properties and styles在IPython中输入 plt.plot? 可以查看格式化字符串的详细配置。 线属性Line properties PropertyDescriptionAppearancealpha (or a)alpha transparency on 0-1 scaleantialiasedTrue or False - use antialised renderingcolor (or c)matplotlib color arglinestyle (or ls)see Line properties linewidth (or lw)float, the line width in pointssolid_capstyleCap style for solid linessolid_joinstyleJoin style for solid linesdash_capstyleCap style for dashesdash_joinstyleJoin style for dashesmarkersee Markers markeredgewidth (mew)line width around the marker symbolmarkeredgecolor (mec)edge color if a marker is usedmarkerfacecolor (mfc)face color if a marker is usedmarkersize (ms)size of the marker in points 颜色color 简写为 c 蓝色 b (blue) 绿色 g (green) 红色 r (red) 蓝绿色(墨绿色) c (cyan) 红紫色(洋红) m (magenta) 黄色 y (yellow) 黑色 k (black) 白色 w (white) 灰度表示 e.g. 0.75 ([0,1]内任意浮点数) RGB表示法 e.g. #2F4F4F 或 (0.18, 0.31, 0.31) 任意合法的html中的颜色表示 e.g. red, darkslategray 遍历使用颜色colors plt.cm.Spectral(np.linspace(0, 1, len(unique_labels)))[ Colormaps] 线型Line styles简写为 ls 实线 -虚线 --虚点线 -.点线 :点 .Note: 后面的都是设置点型感觉有多余的设计。 SymbolDescriptionAppearance-solid line--dashed line-.dash-dot line:dotted line.points,pixelsocircle^triangle upvtriangle downtriangle lefttriangle rightssquareplusxcrossDdiamonddthin diamond1tripod down2tripod up3tripod left4tripod righthhexagonHrotated hexagonppentagon|vertical line_horizontal line 点型Markers标记 标记大小markersize 简写为 ms markersize 实数标记边缘宽度markeredgewidth 简写为 mew markeredgewidth实数标记边缘颜色markeredgecolor 简写为 mec markeredgecolor颜色选项中的任意值标记表面颜色markerfacecolor 简写为 mfc markerfacecolor颜色选项中的任意值。 marker填充色透明度alpha alpha [0,1]之间的浮点数线宽linewidth linewidth 实数 设置marker显示的个数marker数目太多时可以使用: markevery. You could decide on the x locations where you want the marks, use e.g. numpy.searchsorted to find which data points the locations fall between, and then interpolate between the neighboring points to find the y coordinates. [Plot with fewer markers than data points (or a better way to plot CDFs?)] Note: 可以通过设置mfcnone, mecr使plot绘制空心园。 markers标记 SymbolDescriptionAppearance0tick left1tick right2tick up3tick down4caret left5caret right6caret up7caret downocircleDdiamondhhexagon 1Hhexagon 2_horizontal line1tripod down2tripod up3tripod left4tripod right8octagonppentagon^triangle upvtriangle downtriangle lefttriangle rightdthin diamond,pixelplus.pointssquare*star|vertical linexcrossr$\sqrt{2}$any latex expression [Quick references] [matplotlib中的作图参数] 坐标轴设定 Axis容器包括坐标轴的刻度线、刻度标签、坐标网格以及坐标轴标题等内容。刻度包括主刻度和副刻度分别通过get_major_ticks()和get_minor_ticks()方法获得。每个刻度线都是一 个XTick或YTick对象它包括实际的刻度线和刻度标签。Axis 对象提供了 get_ticklabels()和get_ticklines()方法,可以直接获得刻度标签和刻度线。 plt.plot([1,2,3],[4,5,6])plt.show() axis plt.gca().xaxis axis.get_ticklocs()#获得axis对象的刻度位置列表array([ 1. , 1.5, 2. , 2.5, 3. ]) axis.get_ticklabels() # 获得刻度标签列表a list of 5 Text major ticklabel objects [x.get_text() for x in axis.get_ticklabels()]# 获得刻度的文本字符串[u1.0, u1.5, u2.0, u2.5, u3.0‘] 获得X轴上表示主刻度线的列表可看到X轴上共有10条刻度线: axis.get_ticklines()a list of 10 Line2D ticklines objects由于没有副刻度线因此副刻度线列表的长度为0 axis.get_ticklines(minorTrue) # 获得副刻度线列表a list of 0 Line2D ticklines objects使用pyplot模块中的xticks()能够完成X轴上刻度标签的配置plt.xticks(fontsize16, colorred, rotation45) MatPlotLib中设置坐标轴主刻度标签和次刻度标签显示 {配置刻度线位置Locator类-控制刻度标签显示Formatter类} 用于计算副刻度位置的对象默认为 NullLocator,它不产生任何刻度线。而计算主刻度位置的对象为AutoLocator,它会根据当前的缩放等配置自动计算刻度的位置。matplotlib提供了多种配置刻度线位置的Locator类以及控制刻度标签显示的Formatter 类。 与刻度定位和文本格式化相关的类都在matplotlib.ticker模块中定义载入了两个类MultipleLocaton, FuncFormatter可以以指定值的整数倍为刻度放置主、副刻度线。使用指定的函数计算刻度文本它会将刻度值和刻度的序号作为参数传递给计算刻度文本的函数。 对于次刻度显示,如果要使用默认设置只要matplotlib.pyplot.minorticks_on() 设置刻度示例 示例1 from matplotlib import ticker, pyplot as plt... ... ax plt.gca() ax.yaxis.set_minor_locator(ticker.MultipleLocator( .5)) # 将此y轴次刻度标签设置为0.5的倍数 ax.yaxis.set_minor_formatter(ticker.FormatStrFormatter( %1.1f)) # 设置y轴次标签文本格式 ax.yaxis.set_major_formatter(ticker.FormatStrFormatter( %1.1f)) # 设置y轴主标签文本的格式 ax.xaxis.grid( True, which major) # x坐标轴的网格使用主刻度ax.yaxis.grid( True, which minor) # y坐标轴的网格使用次刻度 上面的示例中实际主刻度标签和副刻度标签文本是重叠的如果格式不一样就会显示不好这样可能需要下面的FuncFormatter。 示例2 下面的程序设置X轴的主刻度为π/4,副刻度为π/20,并且主刻度上的标签用数学符号显示π。from matplotlib.ticker import MultipleLocator, FuncFormatterax.xaxis.set_major_locator( MultipleLocator(np.pi/4) ) ax.xaxis.set_minor_locator( MultipleLocator(np.pi/20) )ax.xaxis.set_major_formatter( FuncFormatter( pi_formatter ) ) def pi_formatter(x, pos): m np.round(x / (np.pi/4)) n 4 while m!0 and m%20: m, n m//2, n//2 if m 0: return 0 if m 1 and n 1: return $\pi$ if n 1: return r$%d \pi$ % m if m 1: return r$\frac{\pi}{%d}$ % n return r$\frac{%d \pi}{%d}$ % (m,n) ps: 选择是否显示刻度值x轴上1为下2为上y轴上1为左2为右for tick in ax.xaxis.get_major_ticks(): tick.label1On True tick.label2On Falsefor tick in ax.yaxis.get_major_ticks(): tick.label1On False tick.label2On False 选择如何显示刻度ax.xaxis.set_ticks_position(‘none’)ax.yaxis.set_ticks_position(‘right’) 完全自定义坐标轴刻度及刻度值ax.set_xticks([-250, -200, -150, -100, -50, 0, 50, 100, 150, 200])ax.set_xticklabels([‘-250’, ”, ‘-150’, ”, ‘-50′, ”, ’50’, ”, ‘150’, ”])ax.set_yticks([-40, -20, 0, 20, 40, 60, 80])ax.set_yticklabels([”, ”, ”, ”, ”, ”, ”]) 分别设置x轴和y轴上刻度值的字体大小for tick in ax.xaxis.get_major_ticks(): tick.label1.set_fontsize(18)for tick in ax.yaxis.get_major_ticks(): tick.label1.set_fontsize(18) 这也可以设置刻度值字体大小matplotlib.rc(‘xtick’, labelsize20)matplotlib.rc(‘ytick’, labelsize20) 皮皮blog 配置属性 matplotlib所绘制的图的每个组成部分都对应有一个对象我们可以通过调用这些对象的属性设置方法set_*或者pyplot的属性设置函数setp设置其属性值。 设置对象的属性 例如plot函数返回一个 matplotlib.lines.Line2D 对象的列表下面的例子显示如何设置Line2D对象的属性 import numpy as npimport matplotlib.pyplot as pltx 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, colorr, linewidth2.0)这段例子中通过调用Line2D对象line的set_antialiased方法关闭对象的反锯齿效果。或者通过调用plt.setp函数配置多个Line2D对象的颜色和线宽属性。 获取对象的属性值 同样我们可以通过调用Line2D对象的get_*方法或者plt.getp函数获取对象的属性值 line.get_linewidth()
1.0plt.getp(lines[0], color) # 返回color属性
rplt.getp(lines[1]) # 输出全部属性
alpha 1.0
animated False
antialiased or aa True
axes Axes(0.125,0.1;0.775x0.8)
... ...Note:getp函数只能对一个对象进行操作它有两种用法 指定属性名返回对象的指定属性的值不指定属性名打印出对象的所有属性和其值 获取当前的绘图对象plt.gcf() matplotlib的整个图表为一个Figure对象此对象在调用plt.figure函数时返回我们也可以通过plt.gcf函数获取当前的绘图对象 f plt.gcf()plt.getp(f)
alpha 1.0
animated False
...Figure对象axes属性plt.gca() Figure对象有一个axes属性其值为AxesSubplot对象的列表每个AxesSubplot对象代表图表中的一个子图前面所绘制的图表只包含一个子图当前子图也可以通过plt.gca获得 plt.getp(f, axes)
[matplotlib.axes.AxesSubplot object at 0x05CDD170]plt.gca()
matplotlib.axes.AxesSubplot object at 0x05CDD170获取对象的各种属性plt.getp 用plt.getp可以发现AxesSubplot对象有很多属性例如它的lines属性为此子图所包括的 Line2D 对象列表 alllines plt.getp(plt.gca(), lines)alllines
a list of 3 Line2D objectsalllines[0] line # 其中的第一条曲线就是最开始绘制的那条曲线
True通过这种方法我们可以很容易地查看对象的属性和它们之间的包含关系找到需要配置的属性。 配置文件 绘制一幅图需要对许多对象的属性进行配置例如颜色、字体、线型等等。我们在绘图时并没有逐一对这些属性进行配置许多都直接采用了matplotlib的缺省配置。 matplotlib将这些缺省配置保存在一个名为“matplotlibrc”的配置文件中通过修改配置文件我们可以修改图表的缺省样式。 在matplotlib中可以使用多个“matplotlibrc”配置文件它们的搜索顺序如下顺序靠前的配置文件将会被优先采用。 当前路径程序的当前路径。用户配置路径通常在用户文件夹的“.matplotlib”目录下可以通过环境变量MATPLOTLIBRC修改它的位置。系统配置路径保存在matplotlib的安装目录下的mpl-data中。 通过下面的语句可以获取用户配置路径 import matplotlibmatplotlib.get_configdir()
C:\\Documents and Settings\\用户名\\.matplotlib通过下面的语句可以获得目前使用的配置文件的路径 import matplotlibmatplotlib.matplotlib_fname()
C:\\Python26\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc由于在当前路径和用户配置路径中都没有找到配置文件因此最后使用的是系统配置路径下的配置文件。如果读者将matplotlibrc复制一份到脚本的当前目录(例如c:\zhang\doc)下 import osos.getcwd()
C:\\zhang\\doc复制配置文件之后再查看配置文件的路径就会发现它变为了当前目录下的配置文件 matplotlib.matplotlib_fname()
C:\\zhang\\doc\\matplotlibrc如果读者使用文本编辑器打开此配置文件就会发现它实际上是一个字典。为了对众多的配置进行区分字典的键根据配置的种类用“.”分为多段。 配置文件的读入可以使用rc_params()它返回一个配置字典 matplotlib.rc_params()
{agg.path.chunksize: 0,axes.axisbelow: False,axes.edgecolor: k,axes.facecolor: w,... ...在matplotlib模块载入时会调用rc_params()并把得到的配置字典保存到rcParams变量中 matplotlib.rcParams
{agg.path.chunksize: 0,
axes.axisbelow: False,
... ...matplotlib将使用rcParams字典中的配置进行绘图。用户可以直接修改此字典中的配置所做的改变会反映到此后创建的绘图元素。例如下面的代码所绘制的折线将带有圆形的点标识符 matplotlib.rcParams[lines.marker] oplt.plot([1,2,3,2])plt.show()为了方便对配置字典进行设置可以使用rc()。下面的例子同时配置点标识符、线宽和颜色 matplotlib.rc(lines, markerx, linewidth2, colorred)如果希望恢复到缺省的配置(matplotlib载入时从配置文件读入的配置)可以调用rcdefaults()。 matplotlib.rcdefaults()如果手工修改了配置文件希望重新从配置文件载入最新的配置可以调用 matplotlib.rcParams.update( matplotlib.rc_params() )通过pyplot模块也可以使用rcParams、rc和rcdefaults。 皮皮blog 图像载入和显示 imread()和imshow()提供了简单的图像载入和显示功能. plt.imread() 从图像文件读入数据得到一个表示图像的NumPy数组。它的第一个参数是文件名或文件对象format参数指定图像类型如果省略就由文件的扩展名决定图像类型。 对于灰度图像它返回一个形状为(MN)的数组对于彩色图像返冋形状为(MNC)的数组。 其中,M为图像的高度,N为图像的宽度,C为3或4,表示图像的通道数。 程序从“lena.jpg” 中读入图像数据 img plt.imread(“lena.jpg) img.shape (393, 512, 3) img.dtype dtype(’uint8’) plt.imshow Display an image on the axes. matplotlib.pyplot.imshow(X, cmapNone, normNone, aspectNone, interpolationNone, alphaNone, vminNone, vmaxNone, originNone, extentNone, shapeNone, filternorm1, filterrad4.0, imlimNone, resampleNone, urlNone, holdNone, dataNone, **kwargs)X : array_like, shape (n, m) or (n, m, 3) or (n, m, 4)vmin, vmax : scalar, optional, default: None vmin and vmax are used in conjunction with norm to normalize luminance data. Note if you pass a norm instance, your settings for vmin and vmax will be ignored. plt.imshow(img〉#注意图像是上下颠倒的 #plt.imshow(img[::-1]) #反转图像数组的第0轴不好理解 plt.imshow(img, origin”lower”) # 让图表的原点在左下角 得到的数组img是一个形状为(393,512,3)的单字节无符号整数数组。这是因为通常使用的图像都是采用单字节分别保存每个像素的红、绿、蓝三个通道的分量。 注意从JPG图像中读入的数据是上下颠倒的为了正常显示图像可以将数组的第0轴反转或者设置imshow()的origin参数为“lower”,从而让所显示图表的原点在左下角。 如果三维数组的元素类型为浮点数 那么元素的取值范围为0.0到1.0,与颜色值0到255 对应超出这个范围可能会出现颜色异常的像素。 img img[: :-1] plt.imshow(img*1.0) #取值范围为0.0到255.0的浮点数组不能正确显示颜色 plt.imshow(img/255.0) #取值范围为0.0到1.0的浮点数组能正确显示颜色 plt.imshow(np.clip(img/200.0, 0, 1) # 使用 clip()限制取值范围整个图像变亮 如果imshow()的参数是二维数组 就使用颜色映射表决定每个像素的颜色。下面显示图像 中的红色通道 plt.imshow(img[:,:,0]) 显示效果比较吓人因为默认的图像映射将最小值映射为蓝色、将最大值映射为红色. 可以使用colorbar()将颜色映射表在图表中显示出来 plt.colorbar() 通过 imshow()的cmap参数 可以修改显示图像时所采用的颜色映射表。颜色映射表是一个 ColorMap对象matplotlib中已经预先定义好了很多颜色映射表可通过下面的语句找到这 些颜色映射表的名字 import matplotlib.cm as cm cm._cmapnames [‘Spectral’,’copper’, ‘RdYlGn, ‘Set2’,’ sumner’, ’spring’,’gist_ncar’…] 下面使用名为copper的颜色映射表显示图像的红色通道很有老照片的味道 plt.imshow(img[:,:,0],cmapcm.copper) 还可以 使用imshow()显示任意的二维数据 例如下面的程序使用图像直观地显示了二元函数: import numpy as np import matplotlib.pyplot as plt import matplotlib.cm as cm y, x np.ogrid[-2:2:200j, -2:2:200j] z x * np.exp( - x**2 - y**2) extent [np.min(x), np.max(x), np.min(y), np.max(y)] plt.figure(figsize(10,3)) plt.subplot(121) plt.imshow(z, extentextent, originlower) plt.colorbar() plt.subplot(122) plt.imshow(z, extentextent, cmapcm.gray, originlower) plt.colorbar() plt.show() imshow()的extent参数 图表的X、Y轴的刻度标签所指定的范围. [ matplotlib.pyplot.imshow] 皮皮blog matplotlib绘图实例 matplotlib绘图进阶 from:http://blog.csdn.net/pipisorry/article/details/37742423 ref: matplotlib.pyplot python matplotlib中所有模块查询Python Module Index matplotlib所有类和类中的函数查询Index 绘图命令集合 Plotting commands summary Gallerys : http://matplotlib.org/1.4.3/gallery.html Matplotlib教程(点击对应的图可见源码复制可直接使用) Matplotlib tutorial 关于各个部件和属性Figures, Subplots, Axes and Ticks 用Python做科学计算-基础篇——使用pyplot模块绘图 matplotlib的一些常用命令和技巧 Matplotlib for Python Developers Matplotlib Tutorial(译)