いくつかのサブスロット(sublot2grid
)を含むマットplotlibページ(plt.show
)にスクロールバー(水平または垂直)を配置する方法があるかどうかを知りたいと思います。現時点では、私が見つける唯一の解決策は、サブプロットを非常に小さくすることです。それはあまりエレガントではありません。Matplotlib上のスクロールバー
2
A
答えて
6
matplotlibの図を示すウィンドウにはスクロールバーを追加するオプションがありません。それは自動的に図形サイズに自動的にサイズ変更されます。逆に、サイズを変更すると、Figureのサイズも変更されます。
オプションはになります。この機能を持つカスタムウィンドウを作成します。その目的のために、PyQtを使うことができます。次の例では、plt.show()
を呼び出すのではなく、カスタムクラスを呼び出してFigureとして引数として描画します。図形のサイズは数字fig
の手前に設定する必要があり、そのカスタムクラスはそれを変更しません。代わりに、スクロールバーを使ってFigureをキャンバスに配置します。Figureは元のサイズを保持し、Qtウィンドウ内でスクロールできます。あなたはクラス内の詳細を処理する必要はありませんが、スクリプトの最後には呼び出しのみを処理する必要はありません。
この例は、PyQt4です(下のPyQt5の例を参照)。ここで
import matplotlib.pyplot as plt
from PyQt4 import QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
class ScrollableWindow(QtGui.QMainWindow):
def __init__(self, fig):
self.qapp = QtGui.QApplication([])
QtGui.QMainWindow.__init__(self)
self.widget = QtGui.QWidget()
self.setCentralWidget(self.widget)
self.widget.setLayout(QtGui.QVBoxLayout())
self.widget.layout().setContentsMargins(0,0,0,0)
self.widget.layout().setSpacing(0)
self.fig = fig
self.canvas = FigureCanvas(self.fig)
self.canvas.draw()
self.scroll = QtGui.QScrollArea(self.widget)
self.scroll.setWidget(self.canvas)
self.nav = NavigationToolbar(self.canvas, self.widget)
self.widget.layout().addWidget(self.nav)
self.widget.layout().addWidget(self.scroll)
self.show()
exit(self.qapp.exec_())
# create a figure and some subplots
fig, axes = plt.subplots(ncols=4, nrows=5, figsize=(16,16))
for ax in axes.flatten():
ax.plot([2,3,5,1])
# pass the figure to the custom window
a = ScrollableWindow(fig)
PyQt5ためのバージョンです。
import matplotlib
# Make sure that we are using QT5
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
from PyQt5 import QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
class ScrollableWindow(QtWidgets.QMainWindow):
def __init__(self, fig):
self.qapp = QtWidgets.QApplication([])
QtWidgets.QMainWindow.__init__(self)
self.widget = QtWidgets.QWidget()
self.setCentralWidget(self.widget)
self.widget.setLayout(QtWidgets.QVBoxLayout())
self.widget.layout().setContentsMargins(0,0,0,0)
self.widget.layout().setSpacing(0)
self.fig = fig
self.canvas = FigureCanvas(self.fig)
self.canvas.draw()
self.scroll = QtWidgets.QScrollArea(self.widget)
self.scroll.setWidget(self.canvas)
self.nav = NavigationToolbar(self.canvas, self.widget)
self.widget.layout().addWidget(self.nav)
self.widget.layout().addWidget(self.scroll)
self.show()
exit(self.qapp.exec_())
# create a figure and some subplots
fig, axes = plt.subplots(ncols=4, nrows=5, figsize=(16,16))
for ax in axes.flatten():
ax.plot([2,3,5,1])
# pass the figure to the custom window
a = ScrollableWindow(fig)
関連する問題
- 1. Matplotlib。スクロールバーは存在しませんか?
- 2. matplotlibスクロールバーに左ボタンを追加する
- 3. スクロールバーが上がる
- 4. ページ上のスクロールバーのスタイル
- 5. 上記のコードでmatplotlibの
- 6. superimpose matplotlibイメージ上の震動
- 7. matplotlibバーグラフ上の円形ドット
- 8. スクロールバー上にPyGtk描画マーク
- 9. 横のRecyclerViewの上部のスクロールバー
- 10. Matplotlib積み上げ棒グラフ
- 11. 位置matplotlibテキスト右上
- 12. グリッドの上下スクロールバーを表示
- 13. 軸の上にツールチップを表示し、スクロールバー
- 14. スクロールバー内部と上部にある
- 15. スクロールバーがdivを上書きする
- 16. グラフ上に図形をプロットするMatplotlib
- 17. macOS上でnon-blocking matplotlib(IPythonの%matplotlibなど)をビルドする方法
- 18. jScrollPaneスクロールバーのスクロールバーの問題
- 19. matplotlibの:matplotlibのスクラッチ
- 20. matplotlibの矢印で軸上の点と別の軸上の点を結ぶ
- 21. Mac OS X上のAptana Studio 3.1.1 Lion 10.7.3 - 垂直スクロールバーのフラストレーション
- 22. パネル上のスクロールバーの移動量が変更されました
- 23. スクロールバーを使ったパネル上のカーソル位置の取得
- 24. Swift:ナビゲーションバーのスクロールバーがステータスバーの上にスクロールしますか?
- 25. 各ページのスクロールバーからiFrameコンテナ部門の上部へ
- 26. Chromeデバッガ、水平スクロールバーによるホバー上の変数値のブロック
- 27. Qtカスタムスタイル:スクロールバーの画面上の矢印ボタン?
- 28. VSCodeスクロールバーをクリックしたときのページの下/上へ
- 29. matplotlibのではmatplotlibの
- 30. matplotlibの上限y-limと上限y-limの最小値を設定する
感謝がたくさんだ、これは私が「バックTkinterのに行くんどのようなバックTkinterのインタフェース、アプリケーションがクラッシュし、 –
を探していますものですインターフェイス "とはどういう意味ですか? –
へ行くためにQtのウィンドウを閉じたときに、私は、問題を抱えている^^ – ImportanceOfBeingErnest