【问题标题】:Ipython notebook horizontal zoomIpython笔记本水平缩放
【发布时间】:2016-03-18 13:42:09
【问题描述】:

我在 ipython 笔记本中有子图。我可以使用mpld3 模块放大内联。但是,现在我只能放大一个矩形。由于我的应用程序的性质,我需要水平缩放。

有没有办法在 matplotlib 中水平缩放(使用光标)?更好的是,我可以通过代码将缩放设置为水平而不需要任何键盘操作吗?在 Matlab 中,我可以通过设置来做到这一点:

figure(1); h=zoom; set(h,'Motion','horizontal','Enable','on');

这是一个 Python 中的最小示例:

%matplotlib inline
import matplotlib.pyplot as plt
import mpld3
import numpy as np
mpld3.enable_notebook()
x = np.arange(100)
y = np.sin(x)
z = np.cos(x)

ax1 = plt.subplot(2,1,1)
ax1.plot(x,y)
ax2 = plt.subplot(2,1,2, sharex=ax1)
ax2.plot(x,z)

【问题讨论】:

  • 如果你可以用一个矩形进行缩放,你不能设置它的高度来匹配你的绘图的垂直限制吗?
  • @Dan,你是说我的光标?这非常困难,你很容易搞砸。如果您有时间序列,水平缩放是有意义的。
  • 我以为你的意思是通过代码进行矩形缩放
  • @Dan,不,我想用鼠标放大时间序列的不同部分。所以我将使用我的光标来调查信号,但我想水平而不是矩形。

标签: python matlab matplotlib jupyter-notebook mpld3


【解决方案1】:

我的建议是使用Plotly,它非常适合在 Jupyter 中创建交互式绘图。

您可以获取有关如何使用它绘制时间序列的更多信息HERE 和子图信息HERE。这是我用你的数据做的,希望它能达到你想要的效果!

%matplotlib inline
import plotly
from plotly import tools
import numpy as np
plotly.offline.init_notebook_mode() # run at the start of every notebook

x = np.arange(100)
y = np.sin(x)
z = np.cos(x)

trace1 = go.Scatter(x=x, y=y)
trace2 = go.Scatter(x=x, y=z)

fig = tools.make_subplots(rows=2, cols=1)

fig.append_trace(trace1, 1, 1)
fig.append_trace(trace2, 2, 1)

fig['layout'].update(height=600, width=600)
plotly.offline.iplot(fig)

【讨论】:

  • 嗨辛西娅,看起来不错。唯一缺少的是链接轴,但我想这是可以做到的。快速提问:我正在攻读时间序列模型统计推断的博士学位,直到现在我还在使用 Matlab。我正在痛苦地尝试完成从 matlab 到 python 的过渡。您对 matplotlib/mpld3 与 plotly 有何看法?一个比另一个更可取(尤其是在 AI 和 ML 的背景下)?
  • 你好@YBE,实际上我自己对 Plotly 还很陌生,所以我还不能说清楚,但在使用 Jupyter 笔记本时它似乎是一个很棒的工具。我确实认为人们对 matplotlib 有更多的经验,这使它成为一个有据可查/探索的工具。到目前为止,我认为 Plotly 是一种更出色的方法,适合特殊需求,但也许当我更习惯它时我会改变主意......!
猜你喜欢
  • 2018-09-03
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多