python绘制柱状图、将x轴旋转90_Python图表绘制:
matplotlib绘图库⼊门(转)
matplotlib 是Python最著名的绘图库,它提供了⼀整套和matlab相似的命令API,⼗分适合交互式地⾏制图。⽽且也可以⽅便地将它作为绘图控件,嵌⼊GUI应⽤程序中。
它的⽂档相当完备,并且Gallery页⾯中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页⾯中浏览/复制/粘贴⼀下,基本上都能搞定。
在Linux下⽐较著名的数据图⼯具还有gnuplot,这个是免费的,Python有⼀个包可以调⽤gnuplot,但是语法⽐较不习惯,⽽且画图质量不⾼。
⽽ Matplotlib则⽐较强:Matlab的语法、python语⾔、latex的画图质量(还可以使⽤内嵌的latex引擎绘制的数学公式)。
Matplotlib.pyplot快速绘图
快速绘图和⾯向对象⽅式绘图
matplotlib实际上是⼀套⾯向对象的绘图库,它所绘制的图表中的每个绘图元素,例如线条Line2D、⽂字Text、刻度等在内存中都有⼀个对象与之对应。
为了⽅便快速绘图matplotlib通过pyplot模块提供了⼀套和MATLAB类似的绘 图API,将众多绘图对象所构成的复杂结构隐藏在这套API内部。我们只需要调⽤pyplot模块所提供的函数就可以实现快速绘图以及设置图表的各种细 节。pyplot模块虽然⽤法简单,但不适合在较⼤的应⽤程序中使⽤。
为了将⾯向对象的绘图库包装成只使⽤函数的调⽤接⼝,pyplot模块的内部保存了当前图表以 及当前⼦图等信息。当前的图表和⼦图可以使⽤f()和a()获得,分别表⽰"Get Current Figure"和"Get Current Axes"。在pyplot模块中,许多函数都是对当前的Figure 或Axes对象进⾏处理,⽐如说:
plt.plot()实际上会通过a()获得当前的Axes对象ax,然后再调⽤ax.plot()⽅法实现真正的绘图。
可以在Ipython中输⼊类似"plt.plot??"的命令查看pyplot模块的函数是如何对各种绘图对象进⾏包装的。
matplotlib所绘制的图表的每个组成部分都和⼀个对象对应,我们可以通过调⽤这些对象的属性设置⽅法set_*()或者pyplot模块的属性设置函数setp()设置它们的属性值。
因为matplotlib实际上是⼀套⾯向对象的绘图库,因此也可以直接获取对象的属性
绘制⼀幅图需要对许多对象的属性进⾏配置,例如颜⾊、字体、线型等等。我们在绘图时,并没有逐⼀对这些属性进⾏配置,许多都直接采⽤了matplotlib的缺省配置。
matplotlib将这些缺省配置保存在⼀个名为“matplotlibrc”的配置⽂件 中,通过修改配置⽂件,我们可以修改图表的缺省样式。配置⽂件的读⼊可以使⽤rc_params(),它返回⼀个配置字典;在matplotlib模块载 ⼊时会调⽤rc_params(),并把得到的配置字典保存到rcParams变量中;matplotlib将使⽤rcParams字典中的配置进⾏绘 图;⽤户可以直接修改此字典中的配置,所做的改变会反映到此后创建的绘图元素。
matplotlib中subplot绘制多⼦图(快速绘图)
Matplotlib ⾥的常⽤类的包含关系为 Figure -> Axes -> (Line2D, Text, etc.)⼀个Figure对象可以包含多个⼦图(Axes),在matplotlib中⽤Axes对象表⽰⼀个绘图区域,可以理解为⼦图。
可以使⽤subplot()快速绘制包含多个⼦图的图表,它的调⽤形式如下:
subplot(numRows, numCols, plotNum)
subplot将整个绘图区域等分为numRows⾏* numCols列个⼦区域,然后按照从左到右,从上到下的顺序对每个⼦区域进⾏编号,左上的⼦区域的编号为1。如果numRows,numCols和 plotNum这三个数都⼩于10的话,可以把它们缩写为⼀个整数,例如subplot(323)和subplot(3,2,3)是相同的。 subplot在plotNum指定的区域中创建⼀个轴对象。如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。
subplot()返回它所创建的Axes对象,我们可以将它⽤变量保存起来,然后⽤sca()交替让它们成为当前Axes对象,并调⽤plot()在其中绘图。
绘制多图表(快速绘图)
如果需要同时绘制多幅图表,可以给figure()传递⼀个整数参数指定Figure对象的序号,如果序号所指定的Figure对象已经存在,将不创建新的对象,⽽只是让它成为当前的Figure对象。
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()
matplotlib的缺省配置⽂件中所使⽤的字体⽆法正确显⽰中⽂。为了让图表能正确显⽰中⽂,可以有⼏种解决⽅案。
在程序中直接指定字体。
在程序开头修改配置字典rcParams。
修改配置⽂件。
⾯向对象画图
matplotlib API包含有三层,Artist层处理所有的⾼层结构,例如处理图表、⽂字和曲线等的绘制和布局。通常我们只和Artist打交道,⽽不需要关⼼底层的绘制细节。
直接使⽤Artists创建图表的标准流程如下:
创建Figure对象
⽤Figure对象创建⼀个或者多个Axes或者Subplot对象
调⽤Axies等对象的⽅法创建各种简单类型的Artists
importmatplotlib.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.pylab快速绘图
matplotlib还提供了⼀个名为pylab的模块,其中包括了许多NumPy和pyplot模块中常⽤的函数,⽅便⽤户快速进⾏计算和绘图,⼗分适合在IPython交互式环境中使⽤。这⾥使⽤下⾯的⽅式载⼊pylab模块:
>>> import pylab as pl
1 安装numpy和matplotlib
>>> import numpy
>>> numpy.__version__
>>> import matplotlib
>>> matplotlib.__version__
2 两种常⽤图类型:Line and scatter plots(使⽤plot()命令), histogram(使⽤hist()命令)
2.1 折线图&散点图 Line and scatter plots
2.1.1 折线图 Line plots(关联⼀组x和y值的直线)
import numpy as np
import pylab as pl
x = [1, 2, 3, 4, 5]# Make an array of x values
y = [1, 4, 9, 16, 25]# Make an array of y values for each x value
pl.plot(x, y)# use pylab to plot x and y
pl.show()# show the plot on the screen
2.1.2 散点图 Scatter plots
把pl.plot(x, y)改成pl.plot(x, y, 'o')即可,下图的蓝⾊版本2.2 美化 Making things look pretty
2.2.1 线条颜⾊ Changing the line color
红⾊:把pl.plot(x, y, 'o')改成pl.plot(x, y, ’or’)
2.2.2 线条样式 Changing the line style
虚线:plot(x,y, '--')
2.2.3 marker样式 Changing the marker style
蓝⾊星型markers:plot(x,y, ’b*’)
2.2.4 图和轴标题以及轴坐标限度 Plot and axis titles and limits
import numpy as np
import pylab as pl
x = [1, 2, 3, 4, 5]# Make an array of x values
y = [1, 4, 9, 16, 25]# Make an array of y values for each x value
pl.plot(x, y)# use pylab to plot x and y
pl.title(’Plot of y vs. x’)# give plot a title
pl.xlabel(’x axis’)# make axis labels
pl.ylabel(’y axis’)
pl.xlim(0.0, 7.0)# set axis limits
pl.ylim(0.0, 30.)
pl.show()# show the plot on the screen
2.2.5 在⼀个坐标系上绘制多个图 Plotting more than one plot on the same set of axes 做法是很直接的,依次作图即可:
import numpy as np
import pylab as pl
x1 = [1, 2, 3, 4, 5]# Make x, y arrays for each graph
y1 = [1, 4, 9, 16, 25]
x2 = [1, 2, 4, 6, 8]
y2 = [2, 4, 8, 12, 16]
pl.plot(x1, y1, ’r’)# use pylab to plot x and y
pl.plot(x2, y2, ’g’)
pl.title(’Plot of y vs. x’)# give plot a title
pl.xlabel(’x axis’)# make axis labels
pl.ylabel(’y axis’)
pl.xlim(0.0, 9.0)# set axis limits
pl.ylim(0.0, 30.)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论