125-绘制二维图表-图表视图控件和图表

二维图表

如果文件中存在大量的数据,若直接观察,很难发现数据的规律,而且也不方便,可以将数据绘制成图表的形式以方便分析。

PySide6 可以绘制二维图表和三维图表PySide6的PyCharts模块提供绘制二维图表的控件和数据序列,可以绘制折线图样条曲线图散点图、面积图饼图条形图蜡烛图、箱线图和极坐标图。

图表视图控件和图表

图表由数据序列、坐标轴和图例构成,数据序列提供图表曲线上的数据。

要正确绘制出图表,首先需要创建出能容纳和管理图表的控件,图表可以放到 视图控件QGraphicsView上也可以放到专门的图表视图控件 QChartView 上。

图表视图QChartView

图表视图不需要 视图控件QGraphicsView对象即可工作。要在现有的QGraphicsScene中显示图表,应使用QChart或QPolarChart类。

QChartView控件是图表QChart 的容器控件,需要将图表对象放到QChartView 控件中以显示图表。

图表视图控件 QChartView 继承自视图控件 QGraphicsView。

用QChartView类创建图表视图控件的方法如下所示其中parent 是继承自QWidget的对象,chart 是继承自QChart 的实例对象。

from PySide6.QtCharts import QChartView

QChartView(chart: PySide6.QtCharts.QChart.parent: Union[PySide6.QtWidgets.QWidget,NoneType]= None)-> None
QChartView(parent: Union[PySide6.QtWidgets.QWidget,NoneType]= None)-> None

图表视图控件的方法比较少,

  • 用setChart(QChart)方法设置图表;

  • 用chart()方法获取图表QChart;

  • 用setRubberBand(rubberBands:QChartView.RubberBands)方法设置光标

  • 在图表视图控件上拖动时选择框的类型,参数 rubberBands 是 QChartView.RubberBands枚举类型,可取:

    PySide6.QtCharts.QChartView.RubberBand

    (继承enum.Flag)此枚举描述了可以应用于矩形缩放区域的不同类型的橡皮筋效果。

    ConstantDescription
    QChartView.NoRubberBand无选择,未指定缩放区域,因此不会启用缩放。
    QChartView.VerticalRubberBand竖向选择框,橡皮筋被水平锁定到图表的大小,并且可以垂直拉动以指定缩放区域。
    QChartView.HorizontalRubberBand水平选择框,橡皮筋垂直锁定为图表的大小,可以水平拉动以指定缩放区域。
    QChartView.RectangleRubberBand矩形选择框,橡皮筋固定在点击的点上,可以垂直和水平拉动。
    QChartView.ClickThroughRubberBand上述橡皮筋选项中的一个选项,如果图表项接受单击,则可以将左键单击传递给图表项。要选择此选项,请将其与其中一个橡皮筋选择模式进行"或"运算。
  • 用setRubberBandSelectionMode(mode: PySide6.QtCore.Qt.ItemSelectionMode)方法设置选择模式(这是其父类QGraphicsView的方法),参数ItemSelectionMode 可以取:

    PySide6.QtCore.Qt.ItemSelectionMode 此枚举在QGraphicsItem、QGraphicsScene和QGraphicsView中用于指定如何选择项,或如何确定形状和项是否冲突。

    ConstantDescription
    Qt.ContainsItemShape完全包含形状时被选中,输出列表仅包含形状完全包含在选择区域内的项目。与区域轮廓相交的项目不包括在内。
    Qt.IntersectsItemShape与形状交叉时被选中,输出列表既包含形状完全包含在选择区域内的项目,也包含与区域轮廓相交的项目。这是选择橡皮筋的常用模式。
    Qt.ContainsItemBoundingRect完全包含边界形时被选中,输出列表仅包含边界矩形完全包含在选择区域内的项目。与区域轮廓相交的项目不包括在内。
    Qt.IntersectsItemBoundingRect与边界矩形交叉时被选中,输出列表既包含边界矩形完全包含在选择区域内的项目,也包含与区域轮廓相交的项目。这种方法通常用于确定需要重新绘制的区域。
方法描述
chart()-> PySide6.QtCharts.QChart返回指向关联图表的指针。
rubberBand()-> PySide6.QtCharts.QChartView.RubberBand返回图表视图当前正在使用的橡皮筋标志。
setChart(chart: PySide6.QtCharts.QChart)-> None将当前图表设置为图表。新图表的所有权将传递给图表视图,并释放上一个图表的所有权。
为了避免内存泄漏,必须删除以前的图表。
setRubberBand(rubberBands: PySide6.QtCharts.QChartView.RubberBand)-> None将橡皮筋标志设置为rubberBand。所选标志决定缩放的执行方式。

图表QChart

QChart 是图表类,它继承自 QGraphicsWidget。

一个图表一般包含数据序列、坐标轴图表标题和图例。

用QChart 类创建图表的方法如下所示,其中

  • parent 是继承自QGraphicsItem 的实例,
  • type 是 QChart;
  • ChartType 的举类型可以取
    • QChart.ChartTypeUndefined(类型未定义)
    • QChart.ChartTypeCartesian(直角坐标)
    • QChart.ChartTypePolar(极坐标)
from PySide6.QtCharts import QChart

QChart(parent: Union[PySide6.QtWidgets.QGraphicsItem,NoneType]= None,wFlags: PySide6.QtCore.Qt.WindowType = Default(Qt.WindowFlags))-> None
QChart(type: PySide6.QtCharts.QChart.ChartType,parent: PySide6.QtWidgets.QGraphicsItem,wFlags: PySide6.QtCore.Qt.WindowType)-> None 
图表QChart的常用方法

图表的常用方法如表所示,主要是如何设置数据序列和坐标轴,主要方法介绍如下

  • 用addSeries(series;QAbstractSeries)方法添加数据序列,

    • 用removeAl1Series()方法移除所有数据序列,
    • 用removeSeries(series;QAbstractSeries)方法移除指定的数据序列。
  • 分别用以下方法设置数据序列的X轴和Y轴,同时也起到坐标轴与数据序列关联的作用;也可用createDefaultAxes()方法创建默认的坐标轴。

    • setAxisX(axis:QAbstractAxis,series: QAbstractSeries= None)
    • setAxisY(axis:QAbstractAxis,series: QAbstractSeries=None)
    • 用removeAxis(axis:QAbstractAxis)方法移除指定的坐标轴。
  • 用setTheme(theme:QChart.ChartTheme)方法设置主题,主题是图表字体颜色画刷钢笔和坐标轴等的组合方案,参数可取以下值,值分别对应0~7。

    • QChart.ChartThemeLight 浅色主题,这是默认主题。
    • QChart.ChartThemeBlueCerulean 蔚蓝主题。
    • QChart.ChartThemeDark 黑暗主题。
    • QChart.ThemeBrownSand 沙褐色主题。
    • QChart.ChartThemeBlueNcs 自然色系统(NCS)蓝色主题。
    • QChart.ChartThemeHighContrast 高对比度主题。
    • QChart.ChartThemeBluelcy 冰蓝色主题。
    • QChart.ChartThemeQt Qt主题。
  • 用setAnimationOptions(QChart.AnimationOptions)方法可以设置坐标轴和数据序列的动画效果,参数可取:

    • QChart.NoAnimation(没有动画效果)
    • QChart.GridAxisAnimations(坐标轴有动画效果)
    • QChart.SeriesAnimations(数据序列有动画效果)
    • QChart.AllAnimations(全部有动画效果);
    • 用setAnimationDuration(msecs:int)方法设置动画的持续时间,单位是毫秒。
  • 用setTitle(title:str)方法设置图表的标题;

    • 用setTitleFont(font:Union[QFont,str,Sequence[str])方法设置标题的字体
    • 用setTitleBrush(QBrush)方法设置标题的画刷。
QChart 的方法及参数类型说明
addSeries(series: QAbstractSeries)添加数据序列
removeAllSeries()移除所有的数据序列
removeSeries(series:QAbstractSeries)移除指定的数据序列
setAxisX(axis:QAbstractAxis,series:QAbstractSeries = None)设置X轴
axisX(series:QAbstractSeries=None)获取X轴 QAbstractAxis
setAxisY(axis:QAbstractAxis,series:QAbstractSeries= None)设置Y轴
axisY(series:QAbstractSeries=None)获取Y轴QAbstractAxis
addAxis(axis: QAbstractAxis,alignment:Qt.Alignment)添加坐标轴
createDefaultAxes()创建默认的坐标轴
axes(orientation = Qt.Horizontal | Qt.Vertical,series = None)获取坐标轴列表List[QAbstractAxis]
removeAxis(axis:QAbstractAxis)移除指定的坐标轴
scroll(dx:float,dy: float)沿着X和Y方向移动指定距离
setAnimationOptions(QChart.AnimationOptions)设置动画选项
setAnimationDuration(msecs:int)设置动画显示持续时间(毫秒)
setBackgroundBrush(brush:Union[QBrush,Qt.BrushStyle,Qt.GlobalColor,QColor,QGradient,QImage.QPixmap])设置背景画刷
setBackgroundPen(pen:Union[QPen,Qt.PenStyle.QColor])设置背景钢笔
setBackgroundRoundness(diameter: float)设置背景4个角处的圆的直径
setBackgroundVisible(visible:bool=True)设置背景是否可见
isBackgroundVisible()获取背景是否可见
setDropShadowEnabled(enabled: bool=True)设置背景阴影效果
isDropShadowEnabled()获取是否有阴影效果
setMargins(margins:QMargins)设置页边距
setPlotArea(rect:Union[QRectF:QRect])设置绘图区域
setPlotAreaBackgroundBrush(QBrush)设置绘图区域的背景画刷
setPlotAreaBackgroundPen(pen:Union[QPen,QColor])设置绘图区域的背景钢笔
setPlotAreaBackgroundVisible(visible:bool=True)设置绘图区域背景是否可见
isPlotAreaBackgroundVisible()获取绘图区域背景是否可见
setTheme(theme: QChart. ChartTheme)设置主题
theme()获取主题
setTitle(title: str)设置标题
title()获取标题
setTitleBrush(QBrush)设置标题的画刷
setTitleFont(font: Union[QFont,str.Sequence[str]])设置标题的字体
legend()获取图例QLegend
plotArea()获取绘图区域QRectF
zoom(factor:float)按照指定的缩放值进行缩放
zoomIn()按照缩放值2进行缩小
zoomIn(rect: Union[QRectF,QRect])缩放图表使指定区域可见
zoomOut()按照缩放值2进行放大
isZoomed()获取是否进行过缩放
zoomReset()重置缩放
QChart 信号

QChart 只有一个信号 plotAreaChanged(plotArea: QRectF),当绘图范围发生改变时发送信号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值