气轻PyQt5 42 QChart动画模式(Animation)
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtChart import QSplineSeries, QLineSeries, QChart, QChartView, QValueAxis, QBarCategoryAxis
import numpy as np
from math import ceil, floor
import sys
class PyQt538(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("chart")
self.resize(600, 400) # 设置窗口大小
cityName = ['北京', '天津', '上海', '南京', '杭州', '青岛', '广州', '深圳', '重庆', '成都']
yearData = ['2018', '2017'];
gdpData=np.array([[30319.98, 28014.94],
[18809.64, 18549.19],
[32679.87, 30632.99],
[12820.40, 11715.10],
[13509.15, 12603.36],
[12001.52, 11037.28],
[22859.35, 21503.15],
[24221.98, 22490.06],
[20363.19, 19424.73],
[15342.77, 13889.39]])
MaxGDP = ceil(gdpData.max()/9)*10
MinGDP = floor(gdpData.min()/10)*8
chart = QChart() # 图表组件
chart.setTitle("部分城市GDP")
chart.setAnimationOptions(QChart.SeriesAnimations)
chart.setAnimationDuration(500) # 动画持续时间msecs
chart.setAnimationEasingCurve(QEasingCurve.OutCirc)
chart.legend().show()
spline18 = self.addSpline(gdpData[:,0],'#FFA500','2018');
spline17 = self.addSpline(gdpData[:,1],'#00A5FF','2017');
chart.addSeries(spline18) # 添加Series
chart.addSeries(spline17) # 添加Series
penx = QPen(QColor(0x1E90FF)) # X轴颜色
penx.setWidth(2) # X轴宽度
axis_x = QBarCategoryAxis() # 柱状图坐标
axis_x.append(cityName)
axis_x.setLinePen(penx) # 设置X轴颜色和宽度
axis_x.setRange(cityName[0], cityName[-1])
axis_x.setTitleText("城市")
chart.addAxis(axis_x, Qt.AlignBottom)
spline18.attachAxis(axis_x)
spline17.attachAxis(axis_x)
peny = QPen(QColor(0x8B7500)) # Y轴颜色
peny.setWidth(2) # Y轴宽度
axis_y = QValueAxis()
axis_y.setLabelFormat("%d")
axis_y.setRange(0, MaxGDP)
axis_y.setTitleText("亿元")
axis_y.setLinePen(peny) # 设置Y轴颜色和宽度
axis_y.setRange(MinGDP, MaxGDP)
chart.addAxis(axis_y, Qt.AlignLeft)
spline18.attachAxis(axis_y)
spline17.attachAxis(axis_y)
chartView = QChartView() # 视图组件
chartView.setChart(chart) # 显示chart
self.setCentralWidget(chartView)
self.show()
def addSpline(self,points,color,lineName):
pens = QPen(QColor(color),3) # 曲线颜色
spline = QSplineSeries() # 样条曲线
for i, value in enumerate(points):
spline.append(i, value)
spline.setName(lineName)
spline.setColor(Qt.blue)
spline.setPointsVisible(True) # 数据点可视
spline.setPen(pens) # 设置曲线颜色和宽度
return spline
if __name__ == '__main__':
app = QApplication(sys.argv)
window = PyQt538()
sys.exit(app.exec())