matplotlib-绘制精美的图标 第一节 快速绘图(II)

matplotlib-绘制精美的图标 第一节 快速绘图(II)

配置属性

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

例子

  
  
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. plt.figure(figsize=( 4, 3))
  4. x = np.arange( 0, 5, 0.1)
  5. line = plt.plot(x, 0.05*x*x)[ 0]
  6. #调用Line2D对象的Set_*()方法来设置属性值,修改曲线的透明度
  7. line.set_alpha( 0.5)
  8. #同时绘制sin cos 两条曲线
  9. lines = plt.plot(x, np.sin(x), x, np.cos(x))
  10. #调用setp()可以同时配置多个对象属性,这里同时设置两条曲线的颜色和线宽
  11. plt.setp(lines, color= "r", linewidth= 4.0)
  12. plt.legend()
  13. plt.show()

与代码部分set_*()  对应的是get_*()或者是通过plt.getp()来获取对象的属性值:


  
  
  1. line.get_linewidth()
  2. plt .getp( lines [0], " color")

该部分就不再过多赘述。


绘制多子图


一个Figure对象可以包含多个子图(Axes),在matplotlib中用Axes对象表示一个绘图区域,称之为子图。在前面的例子中,Figure对象只包括一个子图。可以使用subplot()快速绘制包含多个子图的图表,调用形式如下:

subplot(numRows, numCols, plotNum)

图表整个绘图区域被等分成numRows行和numCols列,然后从左到右,从上到下的顺序对每个区域进行编号,左上区域的编号为1.plotNum参数指定所创建Axes对象的区域。如果numRows, numCols, plotNum三个参数都小于 10 ,则可把它们缩写成一个整数。例如subplot(323)和subplot(3,2,3)的含义相同。如果新创建的子图和之前创建的子图区域有重叠的部分,之前的子图将被删除。


看下面代码


 
 
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. plt.figure(figsize=( 8, 6))
  4. for idx, color in enumerate( "rgbyck"):
  5. plt.subplot( 321+idx, axisbg=color)
  6. plt.legend()
  7. plt.show()

效果如图



图中将整个绘图区域等分按照numRows, numCols设定的多个子图,如果希望某个子图占据整行或整列,可以按照如下方法调用subplot()


  
  
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. plt.figure(figsize=( 8, 6))
  4. plt.subplot( 221)
  5. plt.subplot( 222)
  6. plt.subplot( 212)
  7. plt.legend()
  8. plt.show()

效果如图

subplot()返回它所创建的Axes对象,我们可以将这些对象保存起来,然后用sca()交替让它们成为当前Axes对象,并使用plot()在其中绘图。如果需要同时绘制多幅图表,可以给figure()传递一个整数参数来指定Figure对象的序号。如果序号指定的Figure对象已经存在,将不创建新的对象,而只是让它成为当前Figure对象。


  
  
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. plt.figure( 1)
  4. plt.figure( 2)
  5. ax1 = plt.subplot( 121)
  6. ax2 = plt.subplot( 122)
  7. x = np.linspace( 0, 3, 100)
  8. for i in range( 5):
  9. plt.figure( 1)
  10. plt.plot(x, np.exp(i*x/ 3))
  11. plt.sca(ax1)
  12. plt.plot(x, np.sin(i*x))
  13. plt.sca(ax2)
  14. plt.plot(x, np.cos(i+x))
  15. plt.legend()
  16. plt.show()



首先通过figure()创建了两个图表,它们的序号分别为1和2。然后在图表2中创建了左右并排的两个子图,并用变量ax1,ax2保存。
在循环中,先调用figure(1)让图表1成为当前图表,并在其中绘图。然后调用sca(ax1)和sca(ax2)分别让子图ax1和ax2成为当前子图,并在其中绘图。当它们成为子图时,包含它们的图表2也自动成为当前图表,因此不需要调用figure(2)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值