pyqt5绘制极坐标能量图

极坐标能量图
原文见博客:微宝网

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import QTimer,QPointF, QPoint, Qt
from PyQt5.QtChart import QChart, QChartView, QPolarChart, QLineSeries, QAreaSeries
from PyQt5.QtGui import QLinearGradient, QColor,QRadialGradient, QBrush, QPen
import numpy as np


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        timer = QTimer(self)
        timer.timeout.connect(self.update_data1)
        timer.start(50)  # 每50毫秒执行一次
        self.no = 0

        self.setWindowTitle("极坐标曲线图")
        self.setGeometry(200, 200, 800, 600)

        self.chart = QPolarChart()
        self.lineSeries = QLineSeries()
        self.areaSeries = QAreaSeries()

        self.data = []
        self.ant_demo()
        for angle in range(361):
            # radius = angle  # 这里可以根据你的需求计算半径值
            self.data.append(QPointF(angle, self.f1[angle]))
            self.lineSeries.append(angle, self.f1[angle]*1.2)

        self.areaSeries.setUpperSeries(self.lineSeries)

        # self.chart.addSeries(self.lineSeries)
        self.chart.addSeries(self.areaSeries)
        self.chart.createDefaultAxes()

        chartView = QChartView(self.chart, self)
        chartView.setGeometry(10, 10, 780, 580)

        self.style_set()

    def style_set(self):
        # 极坐标轴
        # 创建黑色的画笔
        pen = QPen(Qt.black)
        pen.setWidth(1)  # 设置线宽

        # 设置坐标轴的画笔
        self.chart.axisX().setLinePen(pen)
        self.chart.axisY().setLinePen(pen)

        # 设置刻度线的画笔
        self.chart.axisX().setGridLinePen(pen)
        self.chart.axisY().setGridLinePen(pen)

        # 设置刻度标签的颜色
        self.chart.axisX().setLabelsColor(Qt.white)
        self.chart.axisY().setLabelsColor(Qt.white)

        # 创建背景画刷 深蓝色
        background_brush = QBrush(QColor(0, 40, 80))
        self.chart.setBackgroundBrush(background_brush)

        # 创建边框画笔
        border_pen = QPen(Qt.NoPen)  # 设置边框画笔为空笔
        # 设置边框画笔
        self.areaSeries.setPen(border_pen)

        # 渐变填充
        # gradient = QLinearGradient(0, 150, 0, 300)
        gradient = QRadialGradient(QPoint(220, 220), 200)

        gradient.setColorAt(0.1, QColor(0, 0, 255))  # 蓝色
        gradient.setColorAt(0.3, QColor(255, 255, 0))  # 黄色
        gradient.setColorAt(0.8, QColor(255, 0, 0))  # 红色
        self.areaSeries.setBrush(gradient)  # 设置渐变填充效果


    def update_data1(self):

        for i in range(4):
            self.no += 1
            if self.no > 360:
                self.no = 0
            # self.data[self.no] = QPointF(self.no, 100 * (1 + np.sin(self.no / 180 * np.pi)) )
            # if self.no > 180:
            #     index = self.no - 180
            # else:
            #     index = 180 + self.no
            index = self.no
            self.data[self.no] = QPointF(self.no, self.f1[index] + 0.1 * np.random.random() )

        self.lineSeries.replace(self.data)

    def ant_demo(self):
        sita = np.arange(-np.pi / 2, np.pi / 2, 0.0087)
        lamda = 0.3
        n1 = 14
        d = lamda / 4
        beta = 2 * np.pi * d * np.sin(sita) / lamda
        z11 = (n1 / 2) * beta
        z21 = (1 / 2) * beta
        self.f1 = np.sin(z11) / (n1 * np.sin(z21))

if __name__ == "__main__":
    app = QApplication(sys.argv)
    mainWindow = MainWindow()

    mainWindow.show()
    sys.exit(app.exec_())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值