如果我正在制作一个基本的填充图,就像 pyqtgraph 的示例一样。如何编辑填充区域的透明度?
import pyqtgraph as pg
win = pg.GraphicsWindow(title="Basic plotting examples")
p7 = win.addPlot(title="Filled plot, axis disabled")
y = np.sin(np.linspace(0, 10, 1000)) + np.random.normal(size=1000, scale=0.1)
p7.plot(y, fillLevel=-0.3, brush=(50,50,200,100))
Run Code Online (Sandbox Code Playgroud)
您可以使用 mkBrush 制作自定义画笔:
br = pg.mkBrush(color='r')
Run Code Online (Sandbox Code Playgroud)
但我找不到任何透明度选项。
我正在尝试使用 PyQt5 和 pyqtgraph 拥有一个用户界面。我制作了两个复选框,每当我选择它们时,我想绘制代码中可用的两个数据集之一,每当我取消选择按钮时,我希望它清除相应的曲线。有两个带有文本的复选框A1,A2每个复选框都绘制一组数据。
我有两个问题:
1-如果我选择,A1它会绘制与 关联的数据,A1只要我不选择A2,通过取消选择,A1我可以清除与 关联的数据A1。但是,如果我选中A1复选框,然后再选中A2复选框,则取消选择A1不会清除关联的绘图。在这种情况下,如果我选择绘制随机数据,而不是绘制确定性曲线(例如 )sin,我会发现通过选择任一按钮都会添加新数据,但无法将其删除。
2- 真实的应用程序有 96 个按钮,每个按钮都应与一个数据集相关联。我认为我编写代码的方式效率很低,因为我需要为一个按钮和数据集复制相同的代码 96 次。有没有办法将我下面介绍的玩具代码概括为任意数量的复选框?或者,为每个按钮使用/复制几乎相同的代码可能是执行此操作的常用且正确的方法?
代码是:
from PyQt5 import QtWidgets, uic, QtGui
import matplotlib.pyplot as plt
from matplotlib.widgets import SpanSelector
import numpy as np
import sys
import string
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui, QtCore
app = QtWidgets.QApplication(sys.argv)
x = np.linspace(0, 3.14, 100)
y1 = …Run Code Online (Sandbox Code Playgroud) 我想在python中实现一个快速滚动时间跟踪工具.时间跟踪数据已经全部存储在numpy数组中并且很大(> 1e6个样本).我需要一个快速视觉检查的工具.
我已经尝试过使用Matplotlib + PySide,但更新速度还不够快.
你能在pygraphqt/chaco/quiqwt等其他工具包中重现Matplotlib + Pyside演示吗?我不知道他们中的任何一个,我愿意学习在这个应用程序中表现更好的那个.
为了在我的工作流程中有用,所选框架应允许从交互式ipython会话运行绘图,并且应该是快速且可扩展的(最终我需要在同一窗口上同步滚动多个图).原则上pyqtgraph,guiqwt或chaco都是好的候选人.但让我们判断一个真实的例子.
谢谢.
通过PyQtGraph具有简单的图形布局,其中图的x轴链接在一起,并且网格也显示在两个图中:
from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
app = QtGui.QApplication([])
view = pg.GraphicsView()
l = pg.GraphicsLayout()
view.setCentralItem(l)
view.show()
view.resize(800,600)
p0 = l.addPlot(0, 0)
p0.showGrid(x = True, y = True, alpha = 0.3)
#p0.hideAxis('bottom')
p1 = l.addPlot(1, 0)
p1.showGrid(x = True, y = True, alpha = 0.3)
p1.setXLink(p0)
l.layout.setSpacing(0.)
l.setContentsMargins(0., 0., 0., 0.)
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
Run Code Online (Sandbox Code Playgroud)

如果我在第一个绘图中隐藏了x轴(取消注释p0.hideAxis('bottom')代码中的线),则该轴将消失,但网格也将消失:

我怎么能强迫它呆在那里?由于两个x轴都链接在一起,所以我希望这是可能的(上部图中的网格可以从下部图中的x轴获取)。
我正在尝试用pyqtgraph绘制时间序列。我已经看过 这个,这个和这个。但是我不确定如何正确使用它。
我的情节是情节小部件,我以这种方式使用它:
graph.plot(aerosol_data, pen=pg.mkPen(color=colors[count], width=1, style=QtCore.Qt.SolidLine), axisItems={'bottom': TimeAxisItem(orientation='bottom')})
Run Code Online (Sandbox Code Playgroud)
TimeAxisItem的定义如下:
class TimeAxisItem(pg.AxisItem):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def tickStrings(self, values, scale, spacing):
# PySide's QTime() initialiser fails miserably and dismisses args/kwargs
return [useful_values_dict['useful_data']['data']['ISO_dates']]
Run Code Online (Sandbox Code Playgroud)
其中ISO_dates是ISO格式的日期和时间列表
我也尝试过这个:
graph.plotItem.plot(aerosol_data, pen=pg.mkPen(color=colors[count], width=1, style=QtCore.Qt.SolidLine), axisItems={'bottom': TimeAxisItem(orientation='bottom')})
Run Code Online (Sandbox Code Playgroud)
但没有效果(轴字符串是Stil数字)。
然后,我尝试通过以下方式使用DateTimeAxis.py:
date_axis = pg.DateAxisItem('bottom', pen=None, linkView=None, parent=None, maxTickLength=-1, showValues=True)
date_axis.tickStrings(useful_values_dict['useful_data']['data']['timestamp_dates'],1, 1)
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误:
File "C:\Python34\lib\site-packages\pyqtgraph\graphicsItems\DateAxisItem.py", line 161, in tickStrings
format_strings.append(x.strftime(tick_spec.format))
AttributeError: 'NoneType' object has no attribute 'format'
Run Code Online (Sandbox Code Playgroud) 我有一个PyQt4应用程序项目,我想在Windows上变成.exe.我cd到主脚本并运行pyinstaller SPCanalyse.py.当我尝试运行.exe时,我得到:
C:\Users\user\Documents\BMDanalyse\BMDanalyse\BMDanalyse>C:\Users\user\Documents
\BMDanalyse\BMDanalyse\BMDanalyse\dist\SPCanalyse\SPCanalyse.exe
Traceback (most recent call last):
File "<string>", line 12, in <module>
ImportError: cannot import name NavigationToolbar2QTAgg
SPCanalyse returned -1
Run Code Online (Sandbox Code Playgroud)
读到这个我确实尝试添加matplotlib.backends.backend_qt4agg import NavigationToolbar2QT到顶部SPCanalyse.py但无济于事.虽然我很惊讶我仍然有错误,因为看起来他们修复了它.
我有matplotlib版本1.5.1,我确实发现在这个版本中删除了NavigationToolbar2QTAgg,我肯定与我得到错误的原因有关.所以,如果它被删除,为什么我的代码会尝试导入它?如何防止此尝试导入?
请注意,我在Ubuntu上运行我的应用程序时没有问题.
运行pyinstaller时的Cmd输出:
D:\Home\Downloads\BMDanalyse\BMDanalyse>pyinstaller SPCanalyse.py
49 INFO: PyInstaller: 3.1.1
49 INFO: Python: 2.7.11
49 INFO: Platform: Windows-7-6.1.7601-SP1
49 INFO: wrote D:\Home\Downloads\BMDanalyse\BMDanalyse\SPCanalyse.spec
49 INFO: UPX is not available.
49 INFO: Extending PYTHONPATH with paths
['D:\\Home\\Downloads\\BMDanalyse',
'D:\\Home\\Downloads\\BMDanalyse\\BMDanalyse']
59 INFO: checking Analysis
89 …Run Code Online (Sandbox Code Playgroud) 在PyQtGraph,GLScatterPlotItem中,我希望点在点重叠时不要将颜色混合在一起.我想看到最接近的一点,而不是背后的那一点.
我已经要求颜色不透明(alpha = 1.0),但是当绘图中的点重叠时,颜色只会变成洋红色,即使该区域中的所有点都是非常相似的颜色.
这是一个例子:
plt = gl.GLScatterPlotItem(pos = coords,color = colors,size = 5,pxMode = True)其中颜色是一种"热图",范围从红色到蓝色.
我得到的情节是这样的:
你可以看到有一些红色,但到处都是点重叠,颜色变得奇怪.
另一方面,如果我做size = 1的简单修改,那么颜色很好,但点很小,很难看到:
这两次数据完全相同.您可以开始在点和高度处看到左边和后面的一点洋红色,但除此之外,颜色是正确的.
如何防止对我的阴谋进行识别?
谢谢你!
这对于http://www.pyqtgraph.org/上的pyqtgraph安装描述意味着什么:"只需将pyqtgraph文件夹置于某个可导入的位置即可."
所以我为Ubuntu下载了.deb文件,现在应该放在哪里?
我试图将.deb文件移动到/urs/lib/python2.7但仍然从python中获取:"ImportError:没有名为pyqtgraph的模块"
如果我提取.deb文件然后移动到从提取中获取的文件夹的相同位置,则相同.
如果我从python打印sys.path,我会得到这个:
/usr/lib/python2.7
/usr/lib/python2.7/plat-i386-linux-gnu
/usr/lib/python2.7/lib-tk
/usr/lib/python2.7/lib-old
/usr/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages/PILcompat
/usr/lib/python2.7/dist-packages/gtk-2.0
/usr/lib/pymodules/python2.7
/usr/lib/python2.7/dist-packages/ubuntu-sso-client
Run Code Online (Sandbox Code Playgroud)
我该怎么办?谢谢!
我想创建一个实时的点图GUI。我正在使用Scanse Sweep LiDAR,在此LiDAR的每次扫描中(工作在1-10Hz之间),我收到大约1000个点(x,y),描述了周围的LiDAR。这是2D LiDAR。
我到处都看过了,尝试了无数的pyqtgraph代码片段,但是它崩溃了,速度很慢,或者根本无法工作。
是否有直接创建绘图仪窗口的方法,并且在每次进行新的扫描/数据传送时,将这些点推到绘图仪窗口?
感谢任何帮助
这有点长,第一部分只是问题的描述,第二部分是我的“修复”是否正确的问题。
我从python编程开始。我创建了一个与Arduino通信的程序,该程序读取了我们熔炼实验室的熔炉温度。然后将温度用于PID算法中,并将输出设置为Arduino。通信是通过pyserial完成的。到目前为止,所有工作都可以进行,包括实时绘制温度信号,PID变量等。该脚本包括一个主循环和3个线程(串行通信,从串行端口读取的数据移位器,QWidget的设定温度以及PID算法的输出。此值用于创建一个数组,以在pyqtgraph中显示。第三个线程将数据从datashifter移至QWidget。
使用我的Linux笔记本时,一切正常,GUI永不停止更新。相反,当使用任何Windows主机时,我有一些pyqtgraphs停止刷新的问题。行为很奇怪,因为我使用相同的numpy数组(只是不同的列)或多或少地同时设置了所有数据-有些图刷新的时间更长(小时),有些图刷新的时间更早(分钟)。在或多或少地搜索了互联网漏洞之后;-)我认为我发现了问题:它是将数据从线程传递到GUI的过程。一些虚拟代码来解释发生了什么:
DataUpdaterToGUI(QThread):
#sets the QWidget from main loop
def setGUI(self, gui):
self.gui = gui
def run()
while True:
with lock(): # RLock() Instance
copyArray = self.dataArray[:] # copy the array from the shifter
self.gui.plot1.copyArray(dataArray[:, 0], copyArray[:, 1])
self.gui.plot2.copyArray(dataArray[:, 0], copyArray[:, 2])
# self.gui.update()
# QApplication.instance().processEvents()
Run Code Online (Sandbox Code Playgroud)
调用self.gui.update()或processEvents()都不会对结果产生任何影响:在一段时间后(在Windows上),绘图停止重绘。
现在,我有一个非常简单的示例,只想确保我是否正确使用了线程填充。它工作正常,但我有一些问题:
class Main(QWidget):
def __init__(self):
super().__init__()
self.layout = QGridLayout(self)
self.graph = pg.PlotWidget()
self.graph.setYRange(0,1000)
self.plot = self.graph.plot()
self.layout.addWidget(self.graph,0,0)
self.show()
def make_connection(self, data_object):
data_object.signal.connect(self.grab_data)
@pyqtSlot(object)
def grab_data(self, data):
print(data)
self.plot.setData(data)
class …Run Code Online (Sandbox Code Playgroud)