【问题标题】:Creating a scrollable multiplot with python's pylab使用 python 的 pylab 创建可滚动的多图
【发布时间】:2021-11-09 01:49:21
【问题描述】:

我有大量的绘图,并希望使用 python 将它们绘制在同一个图中。 我目前正在使用 pylab 进行绘图,但是由于太多,它们被绘制在另一个之上。 有没有办法使图形可滚动,使图形足够大并且使用滚动条仍然可见?

我可以为此使用 PyQT,但我可能缺少 pylab 的图形对象的一个​​功能......

【问题讨论】:

  • 您的曲线是否已经相互偏移?如果没有,您可以尝试在每条曲线上添加一个偏移量 (plot(x,y+offset)) 以将它们堆叠起来,最终得到一个又高又窄的图形。图形窗口 gui 有一个缩放和平移工具,可以结合偏移量做你想做的事情。
  • 我希望能够以适当的比例和位置查看图表,以便进行比较和分析。
  • 您能更详细地解释一下您希望滚动如何工作吗?如果数据已经重叠,并且您不想移动它,我看不出滚动窗口会有什么帮助。
  • 我有大约 100 个图,我希望能够将这些图放在同一个 窗口 中并在图之间滚动。每个图都有不同的比例尺,因此转移数据将无济于事
  • 啊!抱歉,我误读了您的问题。

标签: python matplotlib


【解决方案1】:

这符合您想要的精神,即使不是字母。我认为您想要一个带有多个 axes 的窗口,然后能够滚动轴(但仍然平均一次只能看到一个),该解决方案有一个轴和一个滑块,可以选择哪个轴要绘制的数据集。

import numpy
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
# fake data
xdata = numpy.random.rand(100,100) 
ydata = numpy.random.rand(100,100) 
# set up figure
fig = plt.figure()
ax = fig.add_subplot(111)
ax.autoscale(True)
plt.subplots_adjust(left=0.25, bottom=0.25)

# plot first data set
frame = 0
ln, = ax.plot(xdata[frame],ydata[frame])

# make the slider
axframe = plt.axes([0.25, 0.1, 0.65, 0.03])
sframe = Slider(axframe, 'Frame', 0, 99, valinit=0,valfmt='%d')

# call back function
def update(val):
    frame = int(round(numpy.floor(sframe.val)))
    ln.set_xdata(xdata[frame])
    ln.set_ydata((frame+1)* ydata[frame])
    ax.set_title(frame)
    ax.relim()
    ax.autoscale_view()
    plt.draw()

# connect callback to slider   
sframe.on_changed(update)
plt.show()

这是改编自 question 中的代码。您可以使用按钮小部件 (doc) 添加下一步/后退按钮。

【讨论】:

  • 不错!您可能打算使用“plt.axes”和“plt.show”而不是 pylab。
  • 我希望能够一次查看多个图表,但它对我来说仍然是一个足够好的解决方案。
  • 是的,很抱歉有错别字。如果您想一次查看多个图表,可以尝试使用多个轴都绑定到同一个滑块?
  • 我最终还是使用了 PyQt(虽然这并不容易)。我使用了here 中的代码,但我以后肯定会尝试使用您建议的滑块。它让应用看起来好多了!
  • @tcaswell,这种方法是否适用于包含 fill_between() 和 vlines() 的帧,还是仅适用于 plot() ?
猜你喜欢
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
  • 2014-02-24
  • 2011-09-10
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 2011-02-12
相关资源
最近更新 更多