我试图绘制每天几个小时的时间序列,每天之间没有空白时间。如果我使用 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) 我想要一个 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) 我正在寻找一种方法使我的表面绘图项目根据高度改变颜色。以下是我目前的方法:
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) 我正在使用pyqtgraph,我想在图上写一些公式.如何用乳胶合成酶写?matplolib得到了自己的TeX表达式解析器,但我找不到pyqtgraph的解决方案.
如何使用matplotlib或pyqtgraph绘制如下图:

线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绘制我想要的东西?任何建议将不胜感激!
打字
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)中观察到所描述的行为]
我有一组网络点存储为节点和边缘,用于networkx,但是想在pyqtgraph小部件中使用更高级的可视化工具,以便我可以在pyqt5中设计的GUI中使用它.
利用matplotlib可视化nx网络的问题是颜色不显示,重力不能被操纵,等等......
图1

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

两个数字都是相同的数据,唯一的区别是图2是使用Gephi可视化的,允许节点被更多地排斥,使它们可读.
有办法:
我在 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>Ω</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) 我将根据一系列数据制作实时曲线。首先,我建立了一个数量字典,里面有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) 我正在使用pyqtgraph,它使用鼠标滚轮具有开箱即用的缩放行为。然而,对于我的应用程序,我只需要放大 x 或 y 方向。
我希望做到以下几点:
在 pyqtgraph 中解决这个问题的最佳方法是什么?