Python Matplotlib-用户通过图形输入数字
我希望我的图形有一个小的输入窗口,用户可以在其中键入一个数字,绘制的数据将跨越那么多分钟。如果他们输入30,他们将看到一个30分钟的时间窗口,如果他们输入5,matplotlib将拾取该时间窗口,数据将被修剪,并且只显示5分钟的数据 我该怎么做?我注意到有人建议使用TkAgg,有没有办法不用它?如果我确实使用TkAgg,您能给我举一个以交互方式实现这一点的最小示例吗,即拾取用户创建的新条目 多谢各位 编辑:这是流式数据,所以我希望条件是动态形式,例如“给我最后15分钟”,而不是“给我2:10和2:25之间的时间”。 此外,我将自己手动执行数据修剪,gui不必这样做。gui只需要读取一个数字,并将其提供给我Python Matplotlib-用户通过图形输入数字,python,user-interface,matplotlib,charts,Python,User Interface,Matplotlib,Charts,我希望我的图形有一个小的输入窗口,用户可以在其中键入一个数字,绘制的数据将跨越那么多分钟。如果他们输入30,他们将看到一个30分钟的时间窗口,如果他们输入5,matplotlib将拾取该时间窗口,数据将被修剪,并且只显示5分钟的数据 我该怎么做?我注意到有人建议使用TkAgg,有没有办法不用它?如果我确实使用TkAgg,您能给我举一个以交互方式实现这一点的最小示例吗,即拾取用户创建的新条目 多谢各位 编辑:这是流式数据,所以我希望条件是动态形式,例如“给我最后15分钟”,而不是“给我2:10和2
还有一个细节:别担心窗帘后面会发生什么,我知道怎么处理。我只想知道如何在matplotlib中从图形的文本框中读取数字。我认为,如果不使用第三方GUI程序,您就无法使用文本框来做任何事情。下面的示例显示了如何使用滑块仅使用matplotlib本身来更改绘图的x限制 该示例使用一个控件来控制xlimits。您可以找到使用许多小部件的另一个示例 下面是一些显示滑块在不同位置的曲线图: 默认(起始)位置 将滑块设置为随机值 将滑块设置为最大值
它必须是一个文本框,还是一个滑块也能工作?任何,以较容易的为准,但我确实认为文本框会更简单,消耗更少的资源?在任何情况下,无论哪种情况简单,都可以看到两者的示例?Matplotlib将很快引入TextBox小部件(可能在版本2.1(?)中)。查看中的用法。这很有用,但不是我想要的,这就是为什么我没有立即接受它。这是流式数据,因此我希望x轴间隔的形式为“给我最后30分钟”,而不是“给我凌晨3:20到3:50之间的时间”。您可以详细介绍一下第三方工具吗?也许是TkAgg?还有,我在一个紧凑的图形上有很多图表。我怎么做才能使我只有一个适用于所有图形的全局滑块?好吧,听起来你需要更复杂的东西。在这种情况下,最好是使用Tkinter、wxPython或PyQT等工具编写自己的自定义GUI。您可以在这些GUI中嵌入matplotlib图(Tkinter的两个示例是和)。不幸的是,我没有任何这样做的经验,因此无法提供帮助。我建议你用更多的细节更新你的问题,这样人们就可以做出一个有效的例子。我会自己处理后端(整理数据)。我只想简单地读取一个数字,分钟数,我自己会做的所有其他事情,并将经过修剪的格式化数据传递给matplotlib。在这种情况下,最好是编写一个简单的GUI,通过文本框接受参数(分钟)。假设您已使用
line,=ax.plot(x,y)
绘制了数据,然后您可以执行line。设置\u data
以更新line
中包含的数据。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
# Create some random data
x = np.linspace(0,100,1000)
y = np.sin(x) * np.cos(x)
left, bottom, width, height = 0.15, 0.02, 0.7, 0.10
fig, ax = plt.subplots()
plt.subplots_adjust(left=left, bottom=0.25) # Make space for the slider
ax.plot(x,y)
# Set the starting x limits
xlims = [0, 1]
ax.set_xlim(*xlims)
# Create a plt.axes object to hold the slider
slider_ax = plt.axes([left, bottom, width, height])
# Add a slider to the plt.axes object
slider = Slider(slider_ax, 'x-limits', valmin=0.0, valmax=100.0, valinit=xlims[1])
# Define a function to run whenever the slider changes its value.
def update(val):
xlims[1] = val
ax.set_xlim(*xlims)
fig.canvas.draw_idle()
# Register the function update to run when the slider changes value
slider.on_changed(update)
plt.show()