- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个应用程序,该应用程序定期(大约每秒一次)从硬件设备收集一些数据,并使用 matplotlib 将其显示在图表中。用户将定期单击图表,当发生这种情况时,我需要知道单击的 x 和 y 坐标(在图表的坐标系中测量)。 p>
这很容易做到:如果 canvas
是一个 FigureCanvas
实例,你可以说
canvas.mpl_connect('button_release_event', mouse_up_handler)
并定义
def mouse_up_handler(event):
print('The user clicked at ({}, {})'.format(event.xdata, event.ydata))
显示图形坐标系中的点击坐标。但有时,用户会在图表更新时单击鼠标右键,然后 event.xdata
和 .ydata
为 None
。现在我只是放弃这些点击,但显然当应用程序忽略他们的点击时,这对用户来说非常令人沮丧。
我附上了完整的示例程序,以便您可以看到我如何用新图表替换当前图表。 (如果您运行它并反复单击图表,您会发现报告的 x 坐标有时为 None
。)我可以以一种永远不会发生的方式替换图形的数据吗?给出 None
坐标?我只想一次显示一组数据。
from __future__ import print_function
from math import exp
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg \
as FigureCanvas
from matplotlib.figure import Figure
from random import normalvariate
from threading import Timer
from time import sleep
import wx
class GraphView(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.figure = Figure()
canvas = FigureCanvas(self, -1, self.figure)
canvas.mpl_connect('button_release_event', self.mouse_up_handler)
self.axes = None
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(canvas, 1, wx.GROW)
self.SetSizer(sizer)
self.generate_new_data()
def generate_new_data(self):
x_values = range(16384)
y_values = [exp(normalvariate(0, 10)) for _ in range(16384)]
if self.axes is not None:
self.figure.delaxes(self.axes)
sleep(0.4) # simulate some additional work being done with the data
self.axes = self.figure.add_subplot(1, 1, 1)
self.axes.set_yscale('log')
self.axes.autoscale(enable=True)
self.axes.set_xlim(x_values[0], x_values[-1])
self.axes.plot(x_values, y_values, antialiased=False)
self.figure.canvas.draw()
Timer(1.0, self.generate_new_data).start()
def mouse_up_handler(self, event):
print('Click at x = {}'.format(event.xdata))
class GraphWindow(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
graph_view = GraphView(self)
if __name__ == '__main__':
app = wx.App(False)
GraphWindow(None).Show()
app.MainLoop()
最佳答案
类似于:
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.figure = Figure()
canvas = FigureCanvas(self, -1, self.figure)
canvas.mpl_connect('button_release_event', self.mouse_up_handler)
# make axes
self.ax = self.figure.add_subplot(1, 1, 1)
# set up details
self.ax.set_yscale('log')
self.ax.autoscale(enable=True)
self.ax.set_xlim(x_values[0], x_values[-1])
# make the line
self.ln, = self.ax.plot([], []) # add what ever parameters you want
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(canvas, 1, wx.GROW)
self.SetSizer(sizer)
self.generate_new_data()
def generate_new_data(self):
x_values = range(16384)
y_values = [exp(normalvariate(0, 10)) for _ in range(16384)]
sleep(0.4) # simulate some additional work being done with the data
# update your existing line
self.ln.set_data(x_values, y_values, antialiased=False)
self.figure.canvas.draw()
Timer(1.0, self.generate_new_data).start()
重复使用坐标区和Line2D
对象。
关于python - 如何以防止 xdata 为 None 的方式更新 matplotlib 图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20806141/
我的文本文件中有一些温度数据,我想用“盒装”图来表示它,以直方图的形式显示每天的温度。 23 10 2012 12.3 28 10 2012 14.1 30 11 2012 30.4 ... 我正在尝
我有一个简单的 hello world 程序,在使用 /headers 标志 dumpbin 后,我得到以下输出: FILE HEADER VALUES 8664 machin
在XC888微 Controller 上编程,我想在外部存储器xdata中保存一些数据的缓冲区。 我是这样做的(只是一个例子,我去掉了不必要的代码): 标题.h extern ubyte xdata
我曾尝试寻找这个问题的答案,但找不到明确的原因。 我正在尝试优化一些 8051 C 代码以减少代码空间。我做了以下更改.. xdata unsigned char a, b; 到 data unsig
我需要了解 Xdata 协议(protocol)是什么。我在互联网上搜索但找不到任何有帮助的东西。我们是一个 REU 团队,试图在仅采用 Xdata 协议(protocol)的传感器的接口(inter
我正在收集数据并实时绘制数据。数据由 Action 捕捉系统产生。我有一个 DynamicDataset 类,它只是一个 2 列矩阵的包装器(尽管它比这更细微),并带有一个用于添加新数据的事件通知程序
我知道必须有一种方法可以从 Autocad 绘图中提取自定义 Xdata。 有人可以指出我在哪里搜索的正确方向吗? 我正在寻找一种方法或 AutoLISP 来收集/提取自定义添加的 Xdata 从一堆
如何告诉 matplotlib 在绘制 matplotlib.lines.Line2D 时不对作为输入给出的 xdata 进行排序? 我想创建自定义 xticks,将其创建为字符串,例如: impor
我正在编写一个应用程序,该应用程序定期(大约每秒一次)从硬件设备收集一些数据,并使用 matplotlib 将其显示在图表中。用户将定期单击图表,当发生这种情况时,我需要知道单击的 x 和 y 坐标(
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我正在尝试将一些 MatLab 代码转换为 Python3,但遇到一行问题,MatLab 中的这一行是 imshow(sqrt(I),[0,100],'InitialMagnification','f
我是一名优秀的程序员,十分优秀!