Buy Me a Coffee? Your support is much appreciated!
PayPal Me: https://www.paypal.me/jiejenn/5
Venmo: @Jie-Jenn
Source Code:
import sys
import math
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont, QColor
# pip install PyQtChart
from PyQt5.QtChart import QChart, QChartView, QStackedBarSeries, QBarSet, QBarCategoryAxis, QValueAxis
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.window_width, self.window_height = 1900, 1200
self.setMinimumSize(self.window_width, self.window_height)
self.layout = QVBoxLayout()
self.setLayout(self.layout)
low_data_points = [-52, -50, -45.3, -37.0, -25.6, -8.0,
-6.0, -11.8, -19.7, -32.8, -43.0, -48.0]
high_data_points = [11.9, 12.8, 18.5, 26.5, 32.0, 34.8,
38.2, 34.8, 29.8, 20.4, 15.1, 11.8]
barSet_low_data_points = QBarSet('Min')
barSet_high_data_points = QBarSet('Max')
barSet_low_data_points.append(low_data_points)
barSet_high_data_points.append(high_data_points)
# add dataset to Stacked Bar Series object
self.series = QStackedBarSeries()
self.series.append(barSet_high_data_points)
self.series.append(barSet_low_data_points)
self.series.setLabelsVisible(True)
# create QChart object to present the chart(s)
self.chart = QChart()
self.chart.addSeries(self.series)
self.chart.setTitle('QStackedBar Chart Example')
self.chart.setTitleFont(QFont('Open Sans', 15, QFont.Bold))
# to create animation effect
self.chart.setAnimationOptions(QChart.SeriesAnimations)
# prepare x-axis labels
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
self.axis_x = QBarCategoryAxis()
self.axis_x.setTitleText('Month')
self.axis_x.append(months)
self.axis_x.setLabelsFont(QFont('Open Sns', 10))
self.chart.addAxis(self.axis_x, Qt.AlignBottom)
# prepare y-axis labels
self.axis_y = QValueAxis()
range_upper = int(math.ceil(max(high_data_points) / 10)) + 40
range_lower = int(math.floor(min(low_data_points) / 10)) - 50
self.axis_y.setTitleText('Tempearture [°C]')
self.axis_y.setLabelsFont(QFont('Open Sans', 10))
self.axis_y.setRange(range_lower, range_upper)
self.axis_y.setLabelFormat('%.1f')
self.axis_y.setTickCount(12)
self.chart.addAxis(self.axis_y, Qt.AlignLeft)
self.series.attachAxis(self.axis_x)
self.series.attachAxis(self.axis_y)
# prepare the legend
self.chart.legend().setVisible(True)
self.chart.legend().setAlignment(Qt.AlignBottom)
self.chart.legend().setFont(QFont('Open Sans', 12))
# chart view object to display the chart
self.chart_view = QChartView(self.chart)
self.layout.addWidget(self.chart_view)
if __name__ == '__main__':
# don't auto scale when drag app to a different monitor.
# QApplication.setAttribute(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
app = QApplication(sys.argv)
app.setStyleSheet('''
QWidget {
font-size: 30px;
}
''')
myApp = MyApp()
myApp.show()
try:
sys.exit(app.exec_())
except SystemExit:
print('Closing Window...')
