【问题标题】:How do I reuse a plot layout in iPython notebook>?如何在 iPython notebook> 中重用绘图布局?
【发布时间】:2013-07-30 21:45:03
【问题描述】:

下面的代码给了我下面的图像。

flowRates=[2,5,10,20,50]
flowRateTol=0.2

#sets the limits for the plot
xRange=(0,700)
yRange=(0,70)

ax=axes()
ax.set_xlabel('Time (s)')
#ax.set_ylabel('Reaction Force (lbf)')
ax.legend(loc=0)

#set up the second axis
ax.twinx()
ax.set_ylabel('10s Average Flow Rate')

ax.set_xlim(xRange)
ax.set_ylim(yRange)

#shade the acceptable tolerance bands
for flowRate in flowRates:
    rectX=[0,xRange[1],xRange[1],0]
    rectY=[ flowRate*(1-flowRateTol),
            flowRate*(1-flowRateTol),
            flowRate*(1+flowRateTol),
            flowRate*(1+flowRateTol)]
    ax.fill(rectX,rectY,'b', alpha=0.2, edgecolor='r')

但是,我想在下一个 iPython 单元中做的是在图表上实际绘制数据。我用来执行此操作的代码(不成功)只是调用了ax.plot(),但我无法获得一个图表来显示我的数据。

有什么想法吗?我的目标是有一个这样的工作流程(我将介绍):

  1. 看看我是如何导入数据的!
  2. 这就是我设置图表的方式! (显示基础图)
  3. 这就是我绘制所有数据的方式! (显示带有数据的基础图)
  4. 这就是我过滤数据的方式! (做一些花哨的过滤)
  5. 这就是过滤后的数据的样子! (在同一基础图上显示新数据)

【问题讨论】:

  • 您需要 plt.draw()ax.figure.canvas.draw() 来重新渲染轴。您应该将第二个轴捕获为ax2 = ax.twinx()

标签: python matplotlib ipython ipython-notebook


【解决方案1】:

我建议将不同的想法打包成函数。例如

  1. 这是我导入数据的方式:

    def Import_Data(file_name,...): # 导入数据的东西 返回数据

  2. 这就是我绘制数据的方式: def 绘图(数据..)

仅绘制基本图似乎是一种特殊情况,您可能会这样做一次,但如果您真的希望能够显示这一点,并尽量减少重复代码的数量,只需允许 data=None 忽略错误而不绘制任何内容.

像这样拆分代码的好处在于,只需对输入和输出进行担心,只需对一个函数进行更改就很容易。例如,要过滤,您可以向plot 函数添加过滤器参数,或者创建以相同方式绘制的新过滤数据!

【讨论】:

  • 感觉就像我遇到了结构问题,而不是编程问题。您的解决方案效果很好。谢谢。
猜你喜欢
  • 2014-02-17
  • 2013-01-01
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 2014-03-12
  • 2012-05-26
相关资源
最近更新 更多