QtChart实现曲线图表绘制之极坐标系

简述

QtChart绘制极坐标图表数据和直角坐标没有太大区别,还是这四个步骤:

  1. 实例化图表。直角坐标使用QChart,极坐标是使用QPolarChart;
  2. 实例化坐标轴。依然是使用QValueAxis类;
  3. 实例化画布。可以使用QChartView类或QGraphicsView类;
  4. 实例化曲线。折线使用QLineSeries类,曲线使用QSplineSeries类

一个简单的极坐标图表如下所示:
在这里插入图片描述

代码之路

按上述步骤执行即可,当然还需包含QtChart的使用环境,具体可以参阅上篇绘制直角坐标系的文章[https://blog.csdn.net/lusanshui/article/details/84395651]。
头文件代码

private:
QLineSeries *seriesWD;  //曲线声明
QPolarChart *chartWD; //极坐标图表声明
QValueAxis *angleAxis; //角坐标,相对应于直角坐标系的X轴
QValueAxis* radiaAxis;//极坐标,相对应于直角坐标系的Y轴
QChartView* chartViewWD; //画布声明

源文件相应代码

   //极坐标风向图
   //曲线
   seriesWD = new QLineSeries();
   seriesWD->setName("WD");
   //图表
   chartWD = new QPolarChart();
   chartWD->addSeries(seriesWD);
   chartWD->setTheme(QChart::ChartThemeBlueCerulean);  //设置图表theme
   chartWD->setTitle("Polor WindDirection Chart");
   //坐标轴
   angleAxis = new QValueAxis();
   angleAxis->setTickCount(9);
//    angleAxis->setLabelFormat("%.1f");
   angleAxis->setLabelFormat("%d");
   angleAxis->setShadesVisible(true);
   angleAxis->setShadesBrush(QBrush(QColor(249, 249, 255)));
   chartWD->addAxis(angleAxis, QPolarChart::PolarOrientationAngular);
   radialAxis = new QValueAxis();
   radialAxis->setTickCount(9);
   radialAxis->setLabelFormat("%d");
   chartWD->addAxis(radialAxis, QPolarChart::PolarOrientationRadial);
   seriesWD->attachAxis(radialAxis);
   seriesWD->attachAxis(angleAxis);
   //画布
   chartViewWD = new QChartView();
   chartViewWD->setChart(chartWD);
   chartViewWD->setRenderHint(QPainter::Antialiasing);

   //加入布局
   mainLayout = new QHBoxLayout();
   setLayout(mainLayout);
   mainLayout->addWidget(chartViewWD);

过程非常清楚,当然,还需要设置坐标轴的范围、给绘制的曲线一些点的值,这个就根据具体业务需要,下面例子模拟了一些值。

//赋值
for (int i = 0; i <= 360; i+=30)
{
  seriesWD->append(i, (i / 200.0)*200.0);
}
radialAxis->setRange(0, 200);
angleAxis->setRange(0, 360);

3 结束语

按部就班的完成这四个步骤,系统自动绘制出图像还是挺方便。

  • 9
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
PyQt5.QtChart 是 PyQt5 中的一个模块,它提供了一些强大的组件,可以帮助我们快速实现各种类型的,包括动态曲线图。 下面是一个简单的示例,演示如何使用 PyQt5.QtChart 实现动态曲线图: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout, QWidget from PyQt5.QtChart import QChart, QChartView, QLineSeries from PyQt5.QtCore import Qt, QTimer import random class MainWindow(QMainWindow): def __init__(self): super().__init__() # 创建曲线图和曲线 self.chart = QChart() self.series = QLineSeries() self.chart.addSeries(self.series) # 设置标题和坐标轴标签 self.chart.setTitle("Dynamic Curve") self.chart.setAnimationOptions(QChart.SeriesAnimations) self.chart.createDefaultAxes() self.chart.axes()[0].setTitleText("X") self.chart.axes()[1].setTitleText("Y") # 创建 self.chart_view = QChartView(self.chart) self.chart_view.setRenderHint(QPainter.Antialiasing) # 创建布局并添加 layout = QGridLayout() layout.addWidget(self.chart_view) # 创建窗口并设置布局 central_widget = QWidget() central_widget.setLayout(layout) self.setCentralWidget(central_widget) # 创建定时器并连接到更新函数 self.timer = QTimer(self) self.timer.timeout.connect(self.update_plot) self.timer.start(50) # 初始化计数器和数据列 self.count = 0 self.data = [] def update_plot(self): # 更新计数器和数据列 self.count += 1 self.data.append(random.randint(0, 100)) # 更新曲线数据 self.series.clear() for i in range(len(self.data)): self.series.append(i, self.data[i]) # 设置坐标轴范围 self.chart.axisX().setRange(max(0, self.count-100), self.count) self.chart.axisY().setRange(0, 100) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 在这个例子中,我们创建了一个 QMainWindow 窗口,并在其中添加了一个 QChartView 视,用于显示动态曲线图。我们还创建了一个 QTimer 定时器,并将其连接到 update_plot() 函数,以定期更新曲线图的数据。 在 update_plot() 函数中,我们生成一个随机数,并将其添加到数据列中。然后,我们清除曲线的所有数据,重新将数据添加到曲线中。最后,我们根据数据的数量调整坐标轴的范围。 请注意,我们使用了一个计数器来记录数据的数量,以便我们可以根据需要滚动我们的曲线图。在这个例子中,我们每次只显示最近的 100 个数据点。 运行这个示例程序,你将会看到一个动态曲线图,显示随机生成的数值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值