2022-10-04

PySide6: Seaborn の FacetGrid のプロットの表示

PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。配布ライセンスは LGPL で公開されています。最新のバージョンは Qt6 に対応した PySide6(記事執筆時点で 6.3.2)です。

Seaborn は matplotlib をベースにした Python のデータ可視化ライブラリです。

Seaborn の FacetGrid を PySide6 のウィジェットに表示しようとしたのですが、単独のプロットと勝手が違って少しハマってしまったので、備忘録としてサンプルを作りました。

下記の OS 環境で動作確認をしました。

Fedora Linux 37 preview x86_64
python3.10 python3.10-3.10.7-1.fc37.x86_64
PySide6 6.3.2
matplotlib 3.6.0
seaborn 0.12.0
qt_seaborn_facetgrid.py
#!/usr/bin/env python
# coding: utf-8
from PySide6.QtCore import Qt
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
)
import sys
from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qtagg import NavigationToolbar2QT as NavigationToolbar
import seaborn as sns
import warnings
warnings.simplefilter('ignore', FutureWarning)
class MyFacetGrid(FigureCanvas):
def __init__(self):
tips = sns.load_dataset('tips')
g = sns.FacetGrid(tips, col='time')
g.map_dataframe(sns.scatterplot, x='total_bill', y='tip', hue='sex')
g.refline(y=tips['tip'].mean())
g.add_legend()
super().__init__(g.fig)
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('FacetGrid example')
self.init_ui()
def init_ui(self):
# chart
canvas: FigureCanvas = MyFacetGrid()
self.setCentralWidget(canvas)
# navigation for plot
navtoolbar = NavigationToolbar(canvas, self)
self.addToolBar(Qt.BottomToolBarArea, navtoolbar)
def main():
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec())
if __name__ == '__main__':
main()
qt_seaborn_facetgrid.py の実行例

参考サイト

  1. seaborn.FacetGrid — seaborn 0.12.0 documentation
  2. Embedding in Qt — Matplotlib 3.6.0 documentation

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



0 件のコメント: