标签: pyqtgraph

如何在 python pyqtgraph PlotWidget 中设置刻度标签

我试图绘制每天几个小时的时间序列,每天之间没有空白时间。如果我使用 pg.GraphicsWindow,它工作正常。刻度标签是 9:00 10:00 ..17:00。如果我使用 pg.PlotWidget 或 pg.PlotWindow、Alt2 和 Alt3,则它不起作用,但显示的是 normla 0.1 0.2 ..。代码运行并调用 TimeAxisItem 类,但 x 轴刻度标签不会更改。我有一个更大的程序,带有 Qt.QMainWindow() 和 QtGui.QGridLayout(),它不接受 pg.GraphicsWindow()。我错过了什么??如何在 PlotWidget 中设置刻度标签?

# -*- coding: utf-8 -*-
''' Setting x-axis labels for time series 
'''

import datetime as dt
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg

class TimeAxisItem(pg.AxisItem):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        tr=np.arange('2016-06-10 09:00', '2016-06-10 18:00', dtype='datetime64[h]')        
        tnorm=(tr-tr[0])/(tr[-1]-tr[0])  #Map time to 0.0-1.0
        ttick=list()
        for i,t in enumerate(tr):
            tstr=np.datetime64(t).astype(dt.datetime)
            ttick.append(  (tnorm[i], …
Run Code Online (Sandbox Code Playgroud)

widget pyqt4 python-3.x pyqtgraph

7
推荐指数
1
解决办法
4494
查看次数

pyqtgraph:在缩放时保持 TextItem 的恒定位置

我想要一个 TextItem,它在缩放 y 轴的同时在图形上保持恒定位置,本质上与图例相同的功能仅作为 TextItem,我可以根据需要更改文本。我无法弄清楚如何做到这一点。欢迎任何建议。

这个例子说明了这个问题。在左侧图上,缩放 y 轴会导致文本移动,而在右侧图上,图例在您缩放时保持在恒定位置。我希望 textItem 的位置像图例位置一样被定义为相对于图形窗口的恒定位置。或者,如果有人知道如何更改图例的格式并更新同样有效的文本,但从我对文档的阅读来看,这是不可能的。

import pyqtgraph as pg 
from PyQt4 import QtGui 
import numpy as np 
import sys 
def main(): 
    app = QtGui.QApplication(sys.argv) 
    widg = QtGui.QWidget() 
    widg.move(100, 100) 
    pg.setConfigOption('background', 'w')
    pg.setConfigOption('foreground', 'k') 

    pgWidg = pg.GraphicsLayoutWidget()   
    pgWidg.resize(750, 250)  

    graph1 = pgWidg.addPlot(row=1, col=1) 
    graph2 = pgWidg.addPlot(row=1, col=2)
    curve1 = graph1.plot(y=np.sin(np.linspace(1, 21, 1000)), pen='k') 
    curve2 = graph2.plot(y=np.sin(np.linspace(1, 21, 1000)), pen='k') 

    graph1.addItem(curve1) 
    graph2.addItem(curve2) 
    graph1.setMouseEnabled(x=False, y=True)
    graph2.setMouseEnabled(x=False, y=True)

    graph1Text = pg.TextItem(text = 'A1', color=(0, 0, 0))
    graph1.addItem(graph1Text)
    graph1Text.setPos(150, 1) …
Run Code Online (Sandbox Code Playgroud)

python pyqt pyqt4 pyqtgraph

7
推荐指数
1
解决办法
1582
查看次数

Pyqtgraph & 根据曲面图的高度更改颜色

我正在寻找一种方法使我的表面绘图项目根据高度改变颜色。以下是我目前的方法:

def __init__(self, s):

    self.traces = dict()
    self.app = QtGui.QApplication(sys.argv)
    self.w = gl.GLViewWidget()
    self.w.opts['distance'] = 2000
    self.w.setWindowTitle('pyqtgraph example: GLLinePlotItem')
    self.w.setGeometry(0, 0, 600, 600)
    self.w.show()
    self.socket = s

    self.timer = QtCore.QTimer()
    self.timer.setInterval(1) # in milliseconds
    self.timer.start()
    self.timer.timeout.connect(self.onNewData)

    # create the background grids
    #gx is the y grid
    #gz is the x gid
    gx = gl.GLGridItem()
    gx.rotate(90, 0, 1, 0)
    gx.translate(0, 0, 0)
    self.w.addItem(gx)
    gz = gl.GLGridItem()
    gz.translate(200, 0, -500)
    self.w.addItem(gz)
    gx.scale(100, 10, 100)
    gz.scale(20, 10, 100)


    self.y = np.linspace(0, 100, 10) …
Run Code Online (Sandbox Code Playgroud)

python opengl pyqtgraph

7
推荐指数
1
解决办法
3390
查看次数

如何在pyqtgraph中写\ latex字符?

我正在使用pyqtgraph,我想在图上写一些公式.如何用乳胶合成酶写?matplolib得到了自己的TeX表达式解析器,但我找不到pyqtgraph的解决方案.

latex pyqtgraph

6
推荐指数
1
解决办法
726
查看次数

如何在matplotlib中绘制"双向宽度线"

如何使用matplotlib或pyqtgraph绘制如下图: 两个dirrections宽度线

线AB是双向街道,绿色部分表示从A点到B点的方向,红色部分表示B到A,每个部分的宽度表示交通量.宽度以磅为单位测量,不会在不同的缩放级别或dpi设置下更改.

这只是一个例子,事实上我有很多街道.这种情节在许多交通软件中很常见.我尝试使用matplotlib的patheffect,但结果令人沮丧:

from matplotlib import pyplot as plt
import matplotlib.patheffects as path_effects

x=[0,1,2,3]
y=[1,0,0,-1]
ab_width=20
ba_width=30

fig, axes= plt.subplots(1,1)
center_line, = axes.plot(x,y,color='k',linewidth=2)

center_line.set_path_effects(
[path_effects.SimpleLineShadow(offset=(0, -ab_width/2),shadow_color='g', alpha=1, linewidth=ab_width),
path_effects.SimpleLineShadow(offset=(0, ba_width/2), shadow_color='r', alpha=1, linewidth=ba_width),
path_effects.SimpleLineShadow(offset=(0, -ab_width), shadow_color='k', alpha=1, linewidth=2),
path_effects.SimpleLineShadow(offset=(0, ba_width), shadow_color='k', alpha=1, linewidth=2),
path_effects.Normal()])

axes.set_xlim(-1,4)
axes.set_ylim(-1.5,1.5)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想到的一个想法是将线的每个部分作为独立线,并在更改缩放级别时重新计算它的位置,但它太复杂和缓慢.

如果有任何简单的方法使用matplotlib或pyqtgraph绘制我想要的东西?任何建议将不胜感激!

python data-visualization matplotlib pyqtgraph

6
推荐指数
2
解决办法
591
查看次数

如何让基本的交互式 pyqtgraph 绘图在 IPython REPL 或 Jupyter 控制台中工作?

打字

import pyqtgraph as pg
pg.plot([1,2,3,2,3])
Run Code Online (Sandbox Code Playgroud)

进入标准 Python REPL 将打开一个包含数据图的窗口。在 IPython REPL 或 Jupyter 控制台中输入完全相同的代码,不会打开这样的窗口。

[可以通过键入 来显示该窗口pg.QtGui.QApplication.exec_(),但随后 REPL 会被阻止。

或者,当尝试退出 REPL 并需要确认时,会出现该窗口。

这两点都非常令人不满意。]

如何使用 IPython REPL 进行基本的交互式 pyqtgraph 绘图?

[在 IPython 5.1.0 和 Jupyter 5.0.0 以及 Python 3.5 和 3.6 以及 PyQt4 和 PyQt5(无 PySide)中观察到所描述的行为]

ipython pyqtgraph

6
推荐指数
1
解决办法
5568
查看次数

pyqtgraph中可视化的节点网络?

我有一组网络点存储为节点和边缘,用于networkx,但是想在pyqtgraph小部件中使用更高级的可视化工具,以便我可以在pyqt5中设计的GUI中使用它.

利用matplotlib可视化nx网络的问题是颜色不显示,重力不能被操纵,等等......

图1

最佳情况是,如果cytoscape或Gephi有后端允许集成到这些类型的GUI中,因为在nx中构建网络之后,我能够很好地利用这些内容进行可视化.

图2

两个数字都是相同的数据,唯一的区别是图2是使用Gephi可视化的,允许节点被更多地排斥,使它们可读.

有办法:

  1. 当不手动指示节点放置时,调整networkx中的排斥力?
  2. 在pyqtGraph小部件中可视化网络?(最好互动)

networkx cytoscape pyqtgraph pyqt5

6
推荐指数
0
解决办法
333
查看次数

pyqtgraphplotwidget在错误区域绘制多个Y轴图

我在 QT5 gui 中有一个通过 PlotWidget 连接的嵌入式小部件。我正在尝试绘制 2 个实时数据流:电压 (self.p1) 和电流 (self.p2)。左轴为电压,右轴为电流。到目前为止,我已经将每个数据流与其相关轴关联起来。然而我的问题是当前绘图(self.p2)不在显示的正确区域中。这个特定的图出现在小部件的左上角,它出现在 LHD 轴之前。最好看图才能看出问题。

查看我

我知道问题在于 setup 函数 & self.p2 (当前)被放置在错误的位置,但我的搜索没有产生答案。有人可以帮忙吗?

用于生成图表的代码在启动时调用一次:

def pg_plot_setup(self): # not working still on left axis
    self.p1 = self.graphicsView.plotItem    

# x axis    
    self.p1.setLabel('bottom', 'Time', units='s', color='g', **{'font-size':'12pt'})
    self.p1.getAxis('bottom').setPen(pg.mkPen(color='g', width=3))

# Y1 axis   
    self.p1.setLabel('left', 'Voltage', units='V', color='r', **{'font-size':'12pt'})
    self.p1.getAxis('left').setPen(pg.mkPen(color='r', width=3))

    self.p2 = pg.ViewBox()  
    self.p1.showAxis('right')
    self.p1.scene().addItem(self.p2)
    self.p1.getAxis('right').linkToView(self.p2)
    self.p2.setXLink(self.p1)

# Y2 axis
    self.p1.setLabel('right', 'Current', units="A", color='c', **{'font-size':'12pt'})  #<font>&Omega;</font>
    self.p1.getAxis('right').setPen(pg.mkPen(color='c', width=3))
Run Code Online (Sandbox Code Playgroud)

用于更新显示的代码通过 QTimer 调用:

def update_graph_plot(self):
    start = time.time() …
Run Code Online (Sandbox Code Playgroud)

python plot axis pyqtgraph

6
推荐指数
1
解决办法
4119
查看次数

如何使用pyqtgraph TimeAxisItem动态刷新X轴时间

我将根据一系列数据制作实时曲线。首先,我建立了一个数量字典,里面有3组数据。当前程序可以动态绘制曲线。X轴还可以显示时间,时间也是实时更新的。但是,X 轴上不同点的时间总是相同的值。

UNIX_EPOCH_naive = datetime.datetime(1970, 1, 1, 0, 0) #offset-naive datetime
UNIX_EPOCH_offset_aware = datetime.datetime(1970, 1, 1, 0, 0, tzinfo = pytz.utc) #offset-aware datetime
UNIX_EPOCH = UNIX_EPOCH_naive

TS_MULT_us = 1e6

def now_timestamp(ts_mult=TS_MULT_us, epoch=UNIX_EPOCH):
    return(int((datetime.datetime.utcnow() - epoch).total_seconds()*ts_mult))

def int2dt(ts, ts_mult=TS_MULT_us):
    tz = pytz.timezone('Asia/Shanghai')
    user_ts = int(time.time())
    d1 = datetime.datetime.fromtimestamp(float(user_ts))
    d1x = tz.localize(d1)
    return(d1x)

def dt2int(dt, ts_mult=TS_MULT_us, epoch=UNIX_EPOCH):
    delta = dt - epoch
    return(int(delta.total_seconds()*ts_mult))

def td2int(td, ts_mult=TS_MULT_us):
    return(int(td.total_seconds()*ts_mult))

def int2td(ts, ts_mult=TS_MULT_us):
    return(datetime.timedelta(seconds=float(ts)/ts_mult))

class TimeAxisItem(pg.AxisItem):
    def __init__(self, *args, **kwargs):
        super(TimeAxisItem, self).__init__(*args, **kwargs)
    def tickStrings(self, …
Run Code Online (Sandbox Code Playgroud)

python pyqt pyqtgraph pyqt5

6
推荐指数
1
解决办法
2802
查看次数

使用鼠标在 pyqtgraph 中仅在 x 或 y 方向缩放

我正在使用pyqtgraph,它使用鼠标滚轮具有开箱即用的缩放行为。然而,对于我的应用程序,我只需要放大 x 或 y 方向。

我希望做到以下几点:

  • 检测鼠标点击开始位置:x1,y1
  • 沿 x 或 y 方向拖动鼠标,然后释放鼠标。
  • 检测鼠标点击释放位置:x2,y2
  • 计算 dx = x2-x1 和 dy = y2-y1
  • 如果 dx > dy,则仅将绘图的 x 限制更新为 [x1, x2]。
  • 如果 dy > dx,则仅将绘图的 y 限制更新为 [y1, y2]。

在 pyqtgraph 中解决这个问题的最佳方法是什么?

python pyqtgraph

6
推荐指数
1
解决办法
3639
查看次数