python_matplotlib_pyplot

  • matplotlib 面向对象的调用接口进行绘图比较烦琐,因此matplotlib还提供了快速绘图的pyplot模块,方便我们快速绘制 二维图表。
  • 为了将matplotlib绘制的图表嵌入Notebook中,需要执行下面的命令:
%matplotlib inline
  • 使用inline模式在Notebook中绘制的图表会自动关闭,为了在Notebook的多个单元格内操作同一幅图表,需要运行下面命令:
%config InlineBackend.close_figures = False

1. pyplot绘图实例如下:

  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)) 
      #调用figure()创連一个Figure对象,成为当前Figure对象,如果不调用,则在plot()时自动生成figure对象。
      #figsize参数指定Figure对象的宽度和高度,单位为英寸。
      #dpi参数指定Figurc对象的分辨率,即每英寸所表示的像素数,这里使用默认值80。

  plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
  plt.plot(x,z, "b--",label="$cos(x^2)$"
      #plot()在当前的Axes(子图)对象上绘图,如果当前的Figure对象中没有Axes对象,将会为之创建一个几乎充满整个图表的Axes对象,作为当前的axes对象。
      #label:给曲线指定一个标签,此标签将在图示中可见。如果标签字符用$包裹,则可显示为数学公式。
      #color:指定曲线的颜色,颜色可以用"red","#000000",(1.0,0.0,0.0)三种方式表示。
      #linewidth: 指定曲线的宽度,可以不是整数,也可以使缩写形式的参数名lw。
      #可以使用简写表示颜色和线型,"b--",其中’b’表示蓝色,--表示线型为虚线。

  # 下面是Axes对象的各个属性设置:

  plt.xlabel("Time(s)") 
  pit.ylabel("MVolt") 
      # xlabel、ylabel 分别设置X 、Y 轴的标题文字。

  plt.title("PyPlot First Example") 
      # title: 子图的标题。

  plt.ylim(-1.2,1.2) 
      # xlim、ylim: 分别设 X 、Y 轴的显示范園。

  pit.legend()
      # legend:显示图例,即图中表示每条曲线的标签(label)和样式的矩形域。

  plt.savefig()
      # plt.show() 展示图
      # plt.savefig()将当前的Figure对象保存成图像文件,图像格式由图像文件的扩展名决定。

  # -------------------------------------------
 # savefig()的第一个参数可以是文件名,也可以是接口对象。如下:此时需要使用fmt参数指定图像格式。

  import io
  buf = io.BytesIO()          # 创逑一个用来保存图像内容的BytesIO对象 
  plt.savefig(buf, fmt="png") # 将图像以png格式保存到 buf 中

2. 面向对象进行绘图。

  • matplotlib 真正优秀的地方就是面向对象,包括pyplot模块在进行封装的时候也是在内部获取到当前的fig 和 axes 对象后进行的绘图。具体是通过 gcf()获得Figure对象,gca()获得子图的Axes对象。
fig = plt.gcf() 
axes = plt.gca() 

3. 配置属性

3.1 matplotlib所绘制图表的每个组成部分都和一个对象对应,可以通过调用这些对象的属性设 置方法set_*()或者 pyplot模块的属性设置函数setp()来设置它们的属性值。

方式1:set_*()

plt.figure(figsize=(4j 3)) 
x = np.arange(0^ 5., 0.1)
line = plt.plot(x, 0.05*x*x)[0] # plot 返回一个列表 
line.set_alpha(0.5) # 调用 Line2D 对象的set_*()方法来设置厲性值

方式2 : plt.setp()

lines = plt.plot(x,np.sin(x),x, np.cos(x))
pit.setp(lines,color="r",linewidth=4.0)
3.2 通过调用Line2D对象的get_*() 或者通过plt.getp()来获取对象的属性值:
print line.get_linewidth()
print plt.getp(lines[0], "color")    # 返回color属性
  • 注意getp()和 setp()不同,它只能对一个对象进行操作: 如果指定属性名称,返冋对象的某个值。 不指定属性名:输出对象的所有属性和值。
f = plt.gcf()
plt.getp(f)
  • Figure对象的axes属性是一个列表,它保存图表中的所有子图对象。相同的方式可以获取axes对象的lines属性等。
plt.getp(f,"axes")
plt.getp(f, "axes")[0] is plt.gca()
alllines = plt.getp(plt.gca(), "lines")

4. 绘制多子图

  • 一个Figure对象可以包含多个子图(Axes) ,可以使用subplot()快速绘 制包含多个子图的图表,它的调用形式如下:
subplot(numRows, numCols, plotNum)
  • 图表的整个绘图区域被等分为numRows行 和 numCols列,然后按照从左到右、从上到下的顺序对每个区域进行编号,左上区域的编号为1。
  • 三个参数都小于10,则可以把它们缩写成 个整数,例如 subplot(323)和 subplot(3,2,3)的含义相同。
pit.subplot(221 ) # 第一行的左图 
plt.subplot(222) # 第一行的右图 
pit.subplot(212) # 第二整行
  • 同时绘制多张图。
plt.figure(l)              # 创建图表 1
plt.figure(2)              # 创建图表 2
axl = plt.subplot(121)     # 在图表2 中创建子图1
ax2 = plt.subplot(122)     # 在图表 2 中创建了图 2
x = np.linspace(0,3,100)
for i in xrange(5):
    plt.figure(l)          # 选择图表 1 
    pit.plot(x, np.exp(i*x/3)) 
    plt.sca(axl)           # 选择图表2 的子图1 此处也可以ax1.plot()方式进行。
    pit.plot(x, np.sin(i*x)) 
    plt.sca(ax2)           # 选择图表2 的子图2 
    pit.plot(x,np.cos(i*x))
matplotlib_multplot.png
  • 批量定义 axes
fig,axes = plt.subplots(2, 3)
[a, b, c], [dj e, f] = axes 
  • 4.2. 另外一种布局方式:subplot2grid
fig = plt.figure(figsize=(6, 6)) 
axl = plt.subplot2grid((3,3),(0,0),colspan=2)
ax2 = plt .subplot2grid((3,3),(0,2 ),rowspan=2)
ax3 = plt.subplot2grid((3,3), (1,0),rowspan=2)
ax4 = plt.subplot2grid((3,3), (2,1),colspan=2)
ax5 = plt.subplot2grid((3,3), (1,1))
subplot2grid.png

5. 配置文件

  • 关于绘制一幅图中颜色、字体、线型等属性,matplotlib将这些默认配置保存在matplotlibrc的配置文件中,通过修改配置文件,可以修改图表的默认样式。同时存在多个配置文件时,遵从优先原则。
  • 获取配置文件路径
from os import path
path .abspath(matplotlib.get_configdir()) 
#-------------------
path.abspath(matplotlib.matplotlib_fname())
  • matplotlib 模块载入时,rc_params()函数读入了配置文件,保存在rcParams变量中。
print(matplotlib.rcParams) 
#---------
agg.path.chunksize : 0 
animation.avconv_args: [ ] 
animation.avconv_path: avconv 
animation.bitrate: -1
  • 可以通过rcParams变量进行属性设置。缩写为 rc()
matplotlib .rcParams["lines.marker"] = "o"
matplotlib.rc("lines", marker="x", linewidth=2, color="red")
matplotlib .rcdefaults()  # 恢复道默认设定。
  • 可以调节样式,或者说风格。
from matplotlib import style 
print style.available                    # 可选样式
style.use("ggplot")                      # 选择ggplot样式。

6. 显示中文。

6.1 获取支持的字体文件
from matplotlib.font_manager import fontManager 
fontManagen.ttflist[:3]
[<Font 'cmssl0' (cmssl0.ttf) normal normal 400 normal>,
<Font 'cmbl0' (cmbl0.ttf) normal normal 400 normal>,
<Font 'cmexl0' (cmexl0.ttf) normal normal 400 normal>]
# -------------------
print fontManager.ttflist[0].name 
print fontManager.ttflist[0].fname
6.2 设置字体
  1. 程序中直接指定
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc'、 size=14)
plt.xlabel(u"时间",fontproperties=font) 
  1. 在程序开头修改配置字典rcParams。
pit.rcParams["font.family"] = "SimHei" 
pit.plot([1,2,3]) 
plt.xlabel(0.5 ,0.5, u "中文字体")
  1. 改配置文件。 (不建议)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容