二维图表
如果文件中存在大量的数据,若直接观察,很难发现数据的规律,而且也不方便,可以将数据绘制成图表的形式以方便分析。
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)此枚举描述了可以应用于矩形缩放区域的不同类型的橡皮筋效果。
Constant Description 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中用于指定如何选择项,或如何确定形状和项是否冲突。
Constant Description 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),当绘图范围发生改变时发送信号。