2016-09-12 5 views
2

私は、PythonでnetworkXとMatplotlibを使って簡単なグラフビジュアライザを開発しています。私はまた、いくつかのボタンをテキストでプロットしています。全体としてデザインは反応的です。つまり、ウィンドウのサイズを変更すると、グラフとボタンの縮尺が変わることを意味します。しかし、テキストサイズは同じままで、十分にサイズを変更しないとビジュアライザー全体が非常に悪く見えます。どのようにしてテキストを敏感にすることもできますか?MatplotlibのPythonでの対応テキスト

ありがとうございます!

答えて

2

matplotlib.text.Textのフォントサイズは、text.set_fontsize()を使用して更新します。 "resize_event"を使用して、新しいフォントサイズを設定する関数を呼び出すことができます。プロット内のすべてのテキストでこれを行うには、最初のFigureの高さを格納し、フォントサイズを変更し、新しいFigureの高さを最初のもので割った値をサイズ変更した後にfontsizeを更新するクラスを定義すると便利です。

また、テキストのサイズを変更しないで最低限の読み込み可能なフォントサイズを定義することもできます。

フル例:

import matplotlib.pyplot as plt 
import numpy as np 

class TextResizer(): 
    def __init__(self, texts, fig=None, minimal=4): 
     if not fig: fig = plt.gcf() 
     self.fig=fig 
     self.texts = texts 
     self.fontsizes = [t.get_fontsize() for t in self.texts] 
     _, self.windowheight = fig.get_size_inches()*fig.dpi 
     self.minimal= minimal 

    def __call__(self, event=None): 
     scale = event.height/self.windowheight 
     for i in range(len(self.texts)): 
      newsize = np.max([int(self.fontsizes[i]*scale), self.minimal]) 
      self.texts[i].set_fontsize(newsize) 

fontsize=11 
text = plt.text(0.7, 0.6, "Some text", fontsize=fontsize, 
       bbox={'facecolor':'skyblue', 'alpha':0.5, 'pad':10}) 

cid = plt.gcf().canvas.mpl_connect("resize_event", TextResizer([text])) 

plt.show() 
+0

ありがとう!これは素晴らしい。質問に対する奨励金の動機を教えてくれるように、私はプロットエリアのパーセンテージに似た良いテキストサイズのデフォルト値をハードコードされたものよりも引き出す​​ことを試みていました。私はこれのようなものがデフォルトとして存在するのだろうかと思います! –

+0

デフォルトのフォントサイズは10で、デフォルトのFigureサイズは4.8インチです。 Figureのサイズを2倍にした場合は、20のフォントサイズをとってください。実際にはFigureのサイズを変更するのではなく、dpiを変更したいのですか? – ImportanceOfBeingErnest

関連する問題