Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib-用户通过图形输入数字_Python_User Interface_Matplotlib_Charts - Fatal编程技术网

Python Matplotlib-用户通过图形输入数字

Python Matplotlib-用户通过图形输入数字,python,user-interface,matplotlib,charts,Python,User Interface,Matplotlib,Charts,我希望我的图形有一个小的输入窗口,用户可以在其中键入一个数字,绘制的数据将跨越那么多分钟。如果他们输入30,他们将看到一个30分钟的时间窗口,如果他们输入5,matplotlib将拾取该时间窗口,数据将被修剪,并且只显示5分钟的数据 我该怎么做?我注意到有人建议使用TkAgg,有没有办法不用它?如果我确实使用TkAgg,您能给我举一个以交互方式实现这一点的最小示例吗,即拾取用户创建的新条目 多谢各位 编辑:这是流式数据,所以我希望条件是动态形式,例如“给我最后15分钟”,而不是“给我2:10和2

我希望我的图形有一个小的输入窗口,用户可以在其中键入一个数字,绘制的数据将跨越那么多分钟。如果他们输入30,他们将看到一个30分钟的时间窗口,如果他们输入5,matplotlib将拾取该时间窗口,数据将被修剪,并且只显示5分钟的数据

我该怎么做?我注意到有人建议使用TkAgg,有没有办法不用它?如果我确实使用TkAgg,您能给我举一个以交互方式实现这一点的最小示例吗,即拾取用户创建的新条目

多谢各位

编辑:这是流式数据,所以我希望条件是动态形式,例如“给我最后15分钟”,而不是“给我2:10和2:25之间的时间”。 此外,我将自己手动执行数据修剪,gui不必这样做。gui只需要读取一个数字,并将其提供给我


还有一个细节:别担心窗帘后面会发生什么,我知道怎么处理。我只想知道如何在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()