質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

0回答

828閲覧

スクロールができるFrameの中にFrameよりも大きいCanvasを配置し、そのCanvasに大きさを合わせてグラフをプロットしたい

kagaribisou

総合スコア17

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

1グッド

1クリップ

投稿2020/02/14 06:17

前提・実現したいこと

tkのFrameの中に、matplotlibのFigureCanvasTkAggを継承し、スクロールできるようにしたCanvasを配置しました。
このCanvasの中にCanvasの大きさに合わせたグラフをプロットしたいです。

発生している問題・エラーメッセージ

Canvasの大きさに拡大してグラフをプロットしたいのですが、
Frameの大きさに合わせて描画されてしまいます。

該当のソースコード

Python

1from matplotlib import pyplot as plt 2from matplotlib import ticker 3import os 4import tkinter as tk 5from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk) 6from matplotlib.figure import Figure 7import numpy as np 8import pandas as pd 9 10class MainWindow: 11 def __init__(self): 12 self.root = tk.Tk() 13 14 default_win_size = '800x600' 15 self.root.geometry(default_win_size) 16 17 left_frame_prop = dict(bd=5, relief='groove', bg='white') 18 self.left_frame = tk.Frame(self.root, left_frame_prop) 19 self.left_frame.place(relheight=1.0, relwidth=0.8) 20 21 self.fig = plt.figure() 22 23 self.canvas = ScrollCanvas(self.fig, self.left_frame, 1000, 1000) 24 self.canvas.get_tk_widget().pack(expand=1, fill=tk.BOTH) 25 26 self.fig.set_facecolor('red') 27 28 for n in range(9): 29 self.fig.add_subplot(3, 3, n + 1) 30 31 for n, ax in zip(range(9), self.fig.get_axes()): 32 ax.plot([0.0, 1.0], [1.0, 0.0]) 33 34 self.canvas.get_tk_widget().config(height=1000, width=1000) 35 h = int(self.canvas.get_tk_widget().config()['height'][4]) 36 w = int(self.canvas.get_tk_widget().config()['width'][4]) 37 self.canvas.get_tk_widget().create_rectangle(0, 0, w, h, fill='green') 38 #self.fig.set_size_inches(100, 100) 39 self.fig.canvas.draw() 40 41 tk.mainloop() 42 43class ScrollCanvas(FigureCanvasTkAgg): 44 def __init__(self, fig, master, scroll_width, scroll_height): 45 super().__init__(fig, master=master) 46 47 bar_y = tk.Scrollbar(self.get_tk_widget(), orient=tk.VERTICAL) 48 bar_x = tk.Scrollbar(self.get_tk_widget(), orient=tk.HORIZONTAL) 49 50 bar_y.pack(side=tk.RIGHT, fill=tk.Y) 51 bar_x.pack(side=tk.BOTTOM, fill=tk.X) 52 53 bar_y.config(command=self.get_tk_widget().yview) 54 bar_x.config(command=self.get_tk_widget().xview) 55 56 self.get_tk_widget().config(yscrollcommand=bar_y.set, xscrollcommand=bar_x.set) 57 self.get_tk_widget().config(scrollregion=(0, 0, scroll_width, scroll_height)) 58 59def main(): 60 mainwin = MainWindow() 61 62 63if __name__ == '__main__': 64 main()

試したこと

Canvasの大きさを変える
>緑の部分しか変わらなかった

self.fig.set_size_inches(100, 100)
>変化なし

補足情報(FW/ツールのバージョンなど)

python 3.7.3
matplotlib 3.1.0
イメージ説明

magichan👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問