PyQtGraphでは調べた限り円グラフをサポートしていないようです。棒グラフもサポートしていないと思ったのですが、あった!
PyQtGraphをつかった棒グラフ
地味過ぎる棒グラフです。その分ソースは簡単です。
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui
#縦棒グラフ
window = pg.plot()
x = [1, 2, 3, 4, 5]
y = [5, 5, 7, 10, 3]
bargraph = pg.BarGraphItem(x=x, height=y, width=0.6, brush='#00f')
bargraph.setOpts(pen='#ffffff')
window.addItem(bargraph)
QtGui.QApplication.instance().exec_()
横棒グラフもできます。
ややはり地味です。ソースです。
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui
#横棒グラフ
window = pg.plot()
x1 = [5, 5, 7, 10, 3]
y = [1, 2, 3, 4, 5]
bargraph = pg.BarGraphItem(x0=0, y=y, height=0.6, width=x1, brush='#00f')
bargraph.setOpts(pen='#ffffff')
window.addItem(bargraph)
QtGui.QApplication.instance().exec_()
縦棒グラフと横棒グラフの相違点をです。
横; bargraph = pg.BarGraphItem(x0=0, y=y, height=0.6, width=x1,
brush='#00f') 縦: bargraph = pg.BarGraphItem(x=x, height=y, width=0.6,
brush='#00f') 棒グラフを表示させるにはMatplotLibを使ったほうがいいかもしれません。
PyQt5を使った棒グラフ
ここちらのほうが表現力が豊かです。ソースです。
import sys, random
from PyQt5.QtWidgets import (QApplication, QMainWindow)
from PyQt5.QtChart import QChart, QChartView, QValueAxis, QBarCategoryAxis, QBarSet, QBarSeries
from PyQt5.Qt import Qt
from PyQt5.QtGui import QPainter
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.resize(600, 480)
eng = QBarSet('英語')
math = QBarSet('数学')
jpn = QBarSet('国語')
eng.append([1,10, 20])
math.append([45,55,75])
jpn.append([78,88,98])
series = QBarSeries()
series.append(eng)
series.append(math)
series.append(jpn)
chart = QChart()
chart.addSeries(series)
chart.setTitle('成績')
chart.setAnimationOptions(QChart.SeriesAnimations)
names = ('山田', 'コジマ', 'ノジマ')
axisX = QBarCategoryAxis()
axisX.append(names)
axisY = QValueAxis()
axisY.setRange(0, 100)
chart.addAxis(axisX, Qt.AlignBottom)
chart.addAxis(axisY, Qt.AlignLeft)
chart.legend().setVisible(True)
chart.legend().setAlignment(Qt.AlignBottom)
chartView = QChartView(chart)
self.setCentralWidget(chartView)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
横棒グラフもできます。
ソースです。
import sys, random
from PyQt5.QtWidgets import (QApplication, QMainWindow)
from PyQt5.QtChart import QChart, QChartView, QValueAxis, QBarCategoryAxis, QBarSet, QHorizontalBarSeries
from PyQt5.Qt import Qt
from PyQt5.QtGui import QPainter
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.resize(800, 600)
eng = QBarSet('英語')
math = QBarSet('数学')
jpn = QBarSet('国語')
eng.append([1,10, 20])
math.append([45,55,75])
jpn.append([78,88,98])
series = QHorizontalBarSeries()#横棒グラフ
series.append(eng)
series.append(math)
series.append(jpn)
chart = QChart()
chart.addSeries(series)
chart.setTitle('Bar Chart Demo')
chart.setAnimationOptions(QChart.SeriesAnimations)
names = ('山田', 'コジマ', 'ノジマ')
axisX = QBarCategoryAxis()
axisX.append(names)
axisY = QValueAxis()
axisY.setRange(0, 15)
# chart.addAxis(axisX, Qt.AlignBottom)
# chart.addAxis(axisY, Qt.AlignLeft)
chart.addAxis(axisX, Qt.AlignLeft)
chart.addAxis(axisY,Qt.AlignTop)
chart.legend().setVisible(True)
# chart.legend().setAlignment(Qt.AlignBottom)
chart.legend().setAlignment(Qt.AlignTop)
chartView = QChartView(chart)
self.setCentralWidget(chartView)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
違いは、
縦:series = QBarSeries()
横:series = QHorizontalBarSeries()#横棒グラフ QHorizontalBarSeriesは探すのに時間がかかりました。
これとコメントで変更し部分で横棒グラフになります。
|