气轻PyQt5 40 QChart多组柱状图(QBarSet)
使用了2018年和2017年的两组数据制作柱状图。
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtChart import QBarSeries, QBarSet, QChart, QChartView, QValueAxis, QBarCategoryAxis
from math import ceil
import numpy as np
import sys
class PyQt540(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
chart = QChart() # 图表组件
pen = QPen(QColor('#8B000'),3) # 曲线颜色
chart.setTitle("部分城市GDP")
barSeries = QBarSeries() # 竖向柱状图
gdp = list(gdpData.transpose())
barDict = dict.fromkeys(yearData)
for i, value in enumerate(yearData):
barDict[value] = QBarSet(value) # 创建柱
barDict[value].append(gdp[i]) # 添加数据
barSeries.append(barDict[value]) # 添加到barSeries
chart.addSeries(barSeries)
axis_x = QBarCategoryAxis() # 柱状图坐标
axis_x.append(cityName)
axis_x.setTitleText("城市")
axis_x.setLinePen(pen) # 设置X轴颜色和宽度
chart.addAxis(axis_x, Qt.AlignBottom)
axis_y = QValueAxis()
axis_y.setLabelFormat("%d")
axis_y.setRange(0, MaxGDP)
axis_y.setTitleText("亿元")
axis_y.setLinePen(pen) # 设置Y轴颜色和宽度
chart.addAxis(axis_y, Qt.AlignLeft)
chartView = QChartView() # 视图组件
chartView.setChart(chart) # 显示chart
chartView.setRenderHint(QPainter.Antialiasing) # 增加抗锯齿
self.setCentralWidget(chartView)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = PyQt540()
sys.exit(app.exec())
执行结果
