现在假设已经可以绘制一张简单的、静态的折线图:
如果不知道怎么达到这个状态的话,可以参考:
pyqtgraph项目实战(二):使用pyqtgraph绘制折线图(同一坐标轴包含多条折线)
实际上,我们暂时可以只需要一条中间的绿色线作为演示,只需把红色和蓝色曲线去掉即可得到:
我们希望它在40-60的区间内变成红色。
方法展示
实际上,pyqtgraph根本没有直接提供这样的接口。但是有时希望自己的曲线图更加好看、更有重点,或者无情甲方提出要求,就一定要达到曲线颜色不一样的效果,这该怎么处理呢?
有一个解决方案就是,用另外一条不同颜色的曲线覆盖在原来曲线的上面。
也就是这样:
这样一来就达到了预期的效果。
源码展示
p = self.widget.addPlot(title="Basic array plotting")
p.setYRange(3, 10)
p.addLegend()
data = np.random.normal(size=110) + 5
c1 = p.plot(data, pen=(0, 255, 0), name="Green curve")
c2 = p.plot(x=range(20),
y=data[40:60],
pen=(255, 0, 0),
name="red curve")
c2.setPos(40, 0)
源码并不复杂。这里面有几个小点说一下:
添加标签:addLegend
p.addLegend()
这行代码的效果是展示曲线的属性name
,作为图例出现在左上角。也就是箭头所指的这个。
可以用它的一些属性来修改字体、位置等参数。具体可以参考手册:addLegend
对曲线进行命名,也是为了方便对不同的曲线进行单独操作。比如c2.setPos(40, 0)
就是为了对齐两条曲线。
如果不想用setPos对其曲线,也可以直接将c2的x赋值为40到60,例如:
c2 = p.plot(x=np.array(range(20)) + 40,
y=data[40:60],
pen=(255, 0, 0),
name="red curve")
效果也是一样的。
源码文件
https://gitee.com/xixo549845545/pyqtgraph_my_cookbook
本节文件在ch6中