pyqtgraph 导出 SVG messy/shifting

pyqtgraph exporting SVG messy/shifting

我有这个代码来生成一个数字:

代码:

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import numpy as np
import pandas as pd
import pyqtgraph.exporters


pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')

df = pd.DataFrame(np.random.randint(
    0, 10, size=(1000, 11)), columns=list('ABCDEFGHIJK'))

win = pg.GraphicsWindow(title="Basic plotting examples")
# win.resize(900, 600)
win.setWindowTitle('pyqtgraph example: Plotting')

# Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)

ndays = 5
ngenos = df.shape[1]
nrows = 3
ncols = 4
p = ['p%s' % s for s in range(ngenos)]
bg = ['bg%s' % s for s in range(ngenos * ndays)]
font = QtGui.QFont()
font.setPixelSize(5)

for i in range(nrows):
    for j in range(ncols):
        if (i * ncols + j) < ngenos:
            p[i * ncols + j] = win.addPlot(title=df.dtypes.index[i * ncols + j])
            for k in range(ndays):
                bg[(i * ncols + j) + k] = pg.BarGraphItem(x=range(200), y0=(10 * k), height=df.iloc[: 200*(k+1), (i * ncols + j)], width=0.3)
                p[i * ncols + j].addItem(bg[(i * ncols + j) + k])
            # p[i * ncols + j].showGrid(x=None, y=True)
            p[i * ncols + j].setRange(xRange=(0, 200), yRange=(0, 60))
            p[i * ncols + j].getAxis('bottom').tickFont = font
            p[i * ncols + j].getAxis('left').tickFont = font

    win.nextRow()


QtGui.QApplication.processEvents()
ex = pg.exporters.SVGExporter(win.scene())
ex.export('test2.svg')
ex = pg.exporters.ImageExporter(win.scene())
ex.export('test2.png')

pg.cleanup

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

png 文件看起来不错,但分辨率很低。在SVG文件中,似乎所有的轴都发生了偏移。

png文件:

SVG 文件:

我怎样才能正确导出 SVG?谢谢!

我检查了一下,结果和你一样。

这是 PyQtGraph 中已报告的错误:see issue #434

SVG 导出中似乎还有其他一些长期悬而未决的问题(问题 105 and 176),因此我不会指望快速修复。

或许你可以自己尝试一下。 SVGExporter.py 中进行了一些后处​​理以解决 Qt 的 SVG 生成器的一些问题,我的直觉是错误就在那里。