安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

使用PyQtGraph自定义绘图

3月3日 飞仙轩投稿
  Python的主要优势之一是探索性数据科学和可视化生态体系。一般的工具链为Pandas、numpy、sklearn进行数据分析和使用matplotlib进行绘图。
  但是如果需要自己自定义一个个性化的图形界面工具,则可能不是很合适。为了实现这种需求,可以使用PyQt构建GUI应用程序,但是可以使用上面的生态系工具构建自定义的复杂的数据驱动应用程序和交互式仪表板。
  对于简单且高度交互的绘图,本文介绍一个PythonGUI的绘图PyQtGraph。
  概述
  PyQtGraph建立在QtQGraphicsScene的原生库,可提供更好更高性能绘图能力,特别是对于实时数据,可以提供交互性和使用Qt图形小部件轻松自定义绘图的能力。
  PyQtGraphzh主要特点有:
  各种线图和散点图;
  数据平移缩放鼠标;
  实时数据更新和显示,交互数据的快速绘制;
  图像显示与互动的查找表和水平控制;
  支持完全的类型(常见类型和Qt类型,比如RGB,RGBA,或亮度,QColor)
  2D交互视图绘制;
  交互式视窗旋转缩放鼠标;
  视频流的显示和实时交互;
  网格的等值面渲染;
  三维图形系统;
  三维表面图和散点图;
  实验数据切片的多维图像任意角度的函数(比如,对MRI数据处理);
  更容易编程的基本的3D场景图;
  对感兴趣的控制区选择和数据显示;
  交互标记垂直水平的地块的位置和区域;
  从图像中选择任意区域的部件和自动切片数据匹配;安装
  为了使用PyQtGraph做图,必须先安装该模块。PyQtGraph依赖Pyhon3。7和PyQt,所以需要先安装这些库。
  在Pyhon3。7环境下,可以用:pipinstallqtpipinstallpyqt
  然后pipinstallpyqtgraph
  为了方便可以使用anaconda环境,这样只需安装condainstallqtcondainstallpyqt
  然后condainstallpyqtgraphPyQtGraph小部件
  在PyQtGraph中,所有图都是使用PlotWidget小部件。小部件提供了canvas,可以在其上添加和配置任何类型的绘图。在hood下,绘图小部件使用本机QtQGraphicsScene。例如,我们创建一个PlotWidget至于任何其他小部件的例子:
  fromPyQt6importQtWidgetsfrompyqtgraphimportPlotWidget,plotimportpyqtgraphaspgimportsysimportosclassMainWindow(QtWidgets。QMainWindow):definit(self,args,kwargs):super(MainWindow,self)。init(args,kwargs)self。graphWidgetpg。PlotWidget()self。setCentralWidget(self。graphWidget)x〔1,2,3,4,5,6,7,8〕y〔3567。44,3462。95,3309。75,3167。13,3508。70,3284。83,3313。58,3268。02〕self。graphWidget。plot(x,y)defmain():appQtWidgets。QApplication(sys。argv)mainMainWindow()main。show()sys。exit(app。exec())ifnamemain:main()
  PyQtGraph的默认绘图样式非常简单黑色背景和细(几乎不可见)白线。在下一节中,我们将看看PyQtGraph中有哪些可用选项来改善绘图的外观和可用性。造型图
  PyQtGraph继承了Qt的QGraphicsScene渲染图表,可以实现使用所有标准Qt线条和形状样式选项。PyQtGraph提供了一个API用于使用这些来绘制绘图和管理绘图画布。
  下面我们将介绍创建和自定义绘图所需的最常见的样式功能。背景色
  可以通过调用。setBackground来改变背景颜色。PlotWidget实例(在self。graphWidget)。下面的代码将通过传入字符串w将背景设置为白色。self。graphWidget。setBackground(w)
  可以随时设置(和更新)绘图的背景颜色。fromPyQt5importQtWidgetsfrompyqtgraphimportPlotWidget,plotimportpyqtgraphaspgimportsysimportosclassMainWindow(QtWidgets。QMainWindow):definit(self,args,kwargs):super(MainWindow,self)。init(args,kwargs)self。graphWidgetpg。PlotWidget()self。setCentralWidget(self。graphWidget)x〔1,2,3,4,5,6,7,8〕y〔3567。44,3462。95,3309。75,3167。13,3508。70,3284。83,3313。58,3268。02〕self。graphWidget。setTitle(Chongchong,colorb,size30pt)self。graphWidget。plot(x,y)defmain():appQtWidgets。QApplication(sys。argv)mainMainWindow()main。show()sys。exit(app。exec())ifnamemain:main()
  有许多使用单个字母的简单颜色表示,这是基于matplotlib。主意这种表示中表示黑色的是k。
  除了这些单字母代码之外,还可以使用十六进制的RGB和RGBA设置更复杂的颜色,
  比如672922self。graphWidget。setBackground(bbccaa)
  RGB和RGBA值可以分别作为3元组或4元组传入,使用值0255。self。graphWidget。setBackground((100,50,255))RGBeach0255self。graphWidget。setBackground((100,50,255,25))
  最后,还可以使用Qt的颜色表示法QColor:fromPyQt5importQtGuiself。graphWidget。setBackground(QtGui。QColor(100,50,254,25))
  如果使用特定的QColor应用程序中其他位置的对象,或将绘图背景设置为默认的GUI背景颜色。colorself。palette()。color(QtGui。QPalette。Window)self。graphWidget。setBackground(color)线条颜色、宽度和样式
  PyQtGraph中的线条也是使用标准Qt绘制的QPen类型,可以像在任何其他操作中一样完全控制线条绘制QGraphicsScene绘画。要使用笔绘制一条线,只需创建一个新的QPen实例并将其传递给plot方法。
  下面的代码创建一个QPen对象,传入一个3元组int指定GB值(全红色)的值。也可以通过传递r或Qcolor。然后通过pen参数将其它传入plot。penpg。mkPen(color(255,0,0))self。graphWidget。plot(hour,temperature,penpen)
  效果如下:
  线条颜色
  通过改变QPen可以改变线条的外观,包括以像素为单位的线条宽度和使用标准Qt线条样式的样式(虚线、点线等)。比如创建一条15像素宽的红色虚线,代码为:penpg。mkPen(color(255,0,0),width15,styleQtCore。Qt。DashLine)
  结果如下:
  标准Qt线条样式都可以使用,包括Qt。SolidLine,Qt。DashLine,Qt。DotLine,Qt。DashDotLine和Qt。DashDotDotLine,起对样样式官方图如下
  线标记
  对于许多绘图,在绘图上添加标记或代替线条放置标记可能会有所帮助。要在绘图上绘制标记,请在调用时传递符号以用作标记。plot。self。graphWidget。plot(hour,temperature,symbol)
  此外symbol你也可以传入symbolSize,symbolBrush和ymbolPen参数。传递的值作为symbolBrush可以是任何颜色或QBrush样式,symbolPen中可以中使用颜色参数或QPen实例。画笔
  画用于绘制形状的轮廓,用于填充。
  下面的代码将在粗红线上给出一个大小为30的蓝色十字标记。penpg。mkPen(color(255,0,0),width15,styleQtCore。Qt。DashLine)self。graphWidget。plot(hour,temperature,penpen,symbol,symbolSize30,symbolBrush(b))
  也支持传入任何QPainterPath对象,然后完全自定义的标记形状。画板标题
  画板标题对于为给定图表上显示的内容提供上下文非常重要。在PyQtGraph中,可以使用PlotWidget对象的setTitle()方法,设定标题字符串。self。graphWidget。setTitle(Chongchong)
  可以通过传递其他参数将文本样式(包括颜色、字体大小和粗细)应用于标题(以及PyQtGraph中的任何其他标签)。
  比如设置标题蓝色,字体大小为30px。self。graphWidget。setTitle(Chongchong,colorb,size30pt)
  也支持使用HTML标记语法来设置标题的样式,比如:self。graphWidget。setTitle(spanstylecolor:fontsize:30ptChongchongspan)
  轴标识
  与标题类似,可以使用setLabel()方法来创建我们的轴标识。这需要两个参数,position和text。position参数可以设置left,right,top,bottom的值,用来支指出放置文本的轴的位置。参数text是要显示标题的文本。
  可以将其他样式参数传递给该方法。但与标题略有不同,必须是有效的CSS名称值对。例如,大小为fontsize。因为名字fontsize有连字符,不能直接作为参数传递,必须使用dictionary方法。styles{color:r,fontsize:20px}self。graphWidget。setLabel(left,上证指数,styles)self。graphWidget。setLabel(bottom,月,styles)
  也支持HTML样式的语法,比如self。graphWidget。setLabel(left,spanstylecolor:fontsize:20px上证指数span)self。graphWidget。setLabel(bottom,spanstylecolor:fontsize:20px月span)
  图例
  除了轴和绘图标题之外,通常会要显示一个图例来标识给定线所代表的内容。比如添加了多条线时,可以通过调用来为绘图添加图例。可以通过PlotWidget对象的。addLegent。但是需要在调用时为每一行提供一个名称。plot()。比如,以下代码在绘制的线分配了一个名称2022年。plot()。此名称将用于标识图例中的行。self。graphWidget。plot(x,y,name2022年,penpen,symbol,symbolSize30,symbolBrush(b))self。graphWidget。addLegend()
  图例默认显示在左上角。可以通过将2元组传递给offset创建图例时的参数。背景网格
  添加背景网格可以让绘图更易于阅读,尤其是在尝试将相对x和y值相互比较时。可以通过调用PlotWidget的。showGrid为打开背景网格,可以独立切换x和y网格。self。graphWidget。showGrid(xTrue,yTrue)
  设置轴限制
  有时候会有限制绘图上可见的数据范围或将轴锁定在一致的范围内。在PyQtGraph中,这可以使用。setXRange()和。setYRange()方法来强制绘图仅显示轴上指定范围内的数据。self。graphWidget。setXRange(2,5,padding0)self。graphWidget。setYRange(3300,3500,padding0)
  一个可选的填充参数导致范围设置为大于指定的分数(默认情况下在0。02和0。1之间,取决于ViewBox的大小)。如果要完全删除此填充,请传递0。
  绘制多条线
  一个图中绘制多条线是很常见的。在PyQtGraph中,只需在PlotWidget中多次调用。plot()即可。下面的例子,我绘制两条相似的数据线,每条线使用相同的线型、粗细等,但改变线的颜色。为了方便,定义一个plot函数,接受x和y要绘制的参数、线的名称(用于图例)和颜色。将颜色用于线条和标记颜色。defplot(self,x,y,plotname,color):penpg。mkPen(colorcolor)self。graphWidget。plot(x,y,nameplotname,penpen,symbol,symbolSize30,symbolBrush(color))self。plot(x,y1,2021,r)self。plot(x,y,2022,b)
  其结果如下图:
  清除画板
  有事可能希望定期清除和刷新绘图可以通过。clear()调用来实现。self。graphWidget。clear()
  将会从图中删除线条,但保持所有其他属性相同。更新画板
  虽然简单地清除画板并重新绘制所有元素,这样一来Qt必须销毁并重新创建QGraphicsScene对象和所有元素。对于小型或简单的绘图,这没什么问题,但对一个比较复杂耗时的图,可能更好的方法是跟新局部数据,而不是从头来一遍。PyQtGraph获取新数据并更新绘制的线,而不会影响画板的其他部分。
  要更新画线,需要对线条对象的引用。首次使用创建行时返回此引用。plot可以简单地将它存储在一个变量中。请注意,这是对线不是对画板的引用。mylinerefgraphWidget。plot(x,y)
  有了引用变量,只需其。setData关更新数据。fromPyQt5importQtWidgets,QtCorefrompyqtgraphimportPlotWidget,plotimportpyqtgraphaspgimportsysimportosfromrandomimportrandintclassMainWindow(QtWidgets。QMainWindow):definit(self,args,kwargs):super(MainWindow,self)。init(args,kwargs)self。graphWidgetpg。PlotWidget()self。setCentralWidget(self。graphWidget)self。xlist(range(100))self。y〔randint(0,100)forinrange(100)〕self。graphWidget。setBackground(w)penpg。mkPen(color(255,0,0))self。datalineself。graphWidget。plot(self。x,self。y,penpen)appQtWidgets。QApplication(sys。argv)wMainWindow()w。show()sys。exit(app。exec())
  每50毫秒更新一次数据,尽管PyQtGraph绘制数据的速度比这快得多,但很难观察!为此,可以定义了一个Qt计时器,并将其设置为调用自定义方法updateplotdata更改数据,这样就会生成滚动的动态图:self。timerQtCore。QTimer()self。timer。setInterval(50)self。timer。timeout。connect(self。updateplotdata)self。timer。start()defupdateplotdata(self):self。xself。x〔1:〕self。x。append(self。x〔1〕1)self。yself。y〔1:〕self。y。append(randint(0,100))self。dataline。setData(self。x,self。y)总结
  本文我们介绍了,使用PyQtGraph绘制简单的图并自定义线条、标记和标签。实际上PyQtGraph是一个强大的绘图工具,作为一个入门介绍,想更深入一步的研究和使用可以参考PyQtGraph官方更详细的文档和实例程序。
投诉 评论 转载

motoX30Pro预告黄金三角段定位超写实影像大师今天,摩托罗拉手机宣布了即将发布的新品motoX30Pro。此次预热的是motoX30Pro的影像,定位为超写实影像大师,海报主体为35mm、50mm和85mm三个焦段。……闷声发大财!泰山队悄无声息就完成一笔重量级签约,让球迷欣喜日前,根据足球经纪人周凯旋透露孙准浩即将回归泰山队,这给球迷就吃下了定心丸。因为前段时间孙准浩一直传闻要去英超球队南安普顿,南安普顿对这位韩国后腰非常欣赏,希望他能挑起大梁。所……美国的优势变大了吗?中美GDP差距拉大,实则中国的含金量更高今年上半年美国GDP总量达到了12。27万亿美元,而中国则大概是8。68万亿美元,而且美国的增量是比较大的,我国的则少了一点,可见中美之间的GDP差距是拉大了,难道说美国的优势……天主教徒的朝圣地之一,阿西西圣方济各大教堂(意)欧洲经典教堂(东南欧10)入选理由:基督教方济各会的母堂,天主教徒的朝圣地之一,世界文化遗产。圣方济各大教堂(BasilicaDiSanFrancesco,也称圣方……欧锦赛施罗德26分德国胜波兰获第三欧锦赛德国队8269轻取波兰登上领奖台,获得第三名。约翰内斯沃格特曼和奥贝斯特连中三分,之后施罗德三分、突破上篮,德国首节1914领先。第二节德国队长达5分钟不得分,被波……3月来了,想出去走走的心已经按捺不住了周国平曾在《车窗外》说:光阴蹉跎,世界喧嚣,如果哪一天我只是埋头于人生中的种种事务,不再有兴致看车窗外沿途的风光,倾听内心的音乐,那样便辜负了人生这一趟美好的旅行。所以,……亲爱的小孩中妈妈的难看到了,但家庭教育你看到了吗?今天刚刷完《亲爱的小孩》大结局,比起完美的结局,我更喜欢这样开放式的结局,给到观众更多的深思和反省。现实远比电视剧残酷的多得多。不是所有经受苦难的人都有运气遇到像老……9球2助攻,国足归化球星拿中超第1冠!下届世界杯必是李霄鹏王北京时间1月4日,在今天山东鲁能顺利的捧起了冠军奖杯,颁奖典礼上有一位球员的举动引发了球迷们的热议,而且颇为催人泪下。不少球迷注意到山东队的葡萄牙裔球员德尔加多,他在赛后……梦幻西游1化生4天机第四天大家好,今天是4天机练号的第四天,昨天自己打了组蝴蝶,今天把炼兽点吃了升级到50级,刷个新手副本看看。耗时49分钟,提升了一些,给了3个10w储备,3个经验。刷个杨……小暑将至,记得吃2肉,食2菜,品2茶,忌2事,顺应时节,健康小暑将至,记得吃2肉,食2菜,品2茶,忌2事,顺应时节健康过酷夏24节气的小暑即将来到,它也是夏天的第五个节气,小暑大暑,上蒸下煮,炎夏正式登场,三伏天也要来了。因……使用PyQtGraph自定义绘图Python的主要优势之一是探索性数据科学和可视化生态体系。一般的工具链为Pandas、numpy、sklearn进行数据分析和使用matplotlib进行绘图。但是如果……基奈河旁较量红点鲑钓鱼大对决立秋时节环游世界今年给大家最大的感觉想必就是一个字热!前些日子网上最火的话题就是都立秋了怎么还这么热,被科普了才知道,其实立秋之后应该再等一阵子才能凉快。这样的天气对于喜欢宅在家的人来说……
布克24分保罗16助攻,太阳大胜黄蜂紧咬勇士汤普森回归在即他真慌了!首发被剥夺,他用全场最高分为自己证明专家说肿瘤患者误食这些,中药效果大打折扣换季攻略养成这5个护肤习惯,你也可以皮肤不敏感,拥有好皮肤海天味业下跌71后,再次跳空下跌,股票价格创新低一起带领大家领略瑞士少女峰国羽男单独苗退赛!何冰娇弃权引争议,为让陈雨菲保留体力冲冠?钟南山院士分享的早餐中有黑米粥,黑米有什么好处?5类人不宜吃布莱克尼42分!肯帝亚克强敌获两连胜九江市妇幼保健院助薄型子宫内膜患者一次试管成功受孕下月迎来一波新机潮,三款顶尖旗舰手机即将发布,有你喜欢的吗?拼多多价格普遍便宜,从业者道出实情,你知道原因吗?徐娘半老中徐娘指的是谁徐娘半老是什么意思2014年中国互联网10大装逼词汇五年级语文下册《童年的发现》的教学设计仓库个人工作总结未来规划精选多篇黎明,会在什么时候。。。。。图银狐犬能长多大教你区分它和其他品种对于接吻有什么技巧呢?混合性皮肤的日常护理夏天怎么选孩子用的水杯夏天如何选孩子用的水杯上世纪二十年代末,王占元预言中国前途不撞南墙不回头的南墙指的是什么(不撞南墙不回头的南墙)并列结构的议论文高考满分

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利