web-dev-qa-db-ja.com

matplotlibでグラフにサブタイトルを付ける

グラフに18ptの大きなフォントでタイトルを付け、次に10ptの小さなフォントでその下にサブタイトルを付けたいと思います。 matplotlibでこれを行うにはどうすればよいですか? title()関数は、単一のfontsize属性を持つ単一の文字列のみを受け取るようです。これを行う方法が必要ですが、どのように?

45
priestc

組み込みのものはないと思いますが、軸の上にさらにスペースを残して figtext を使用することで、それを行うことができます。

axes([.1,.1,.8,.7])
figtext(.5,.9,'Foo Bar', fontsize=18, ha='center')
figtext(.5,.85,'Lorem ipsum dolor sit amet, consectetur adipiscing elit',fontsize=10,ha='center')

hahorizontalalignment の略です。

13

私がしているのは、サブタイトルにtitle()関数を、メインタイトルにsuptitle()関数を使用することです(これらは異なるフォントサイズの引数を取ることができます)。お役に立てば幸いです!

60
Floris van Vugt

これは、複数のフォントサイズに関連する柔軟性を提供しませんが、改行文字をpyplot.title()文字列に追加することは簡単な解決策です。

plt.title('Really Important Plot\nThis is why it is important')
21
Jason

これは、Floris van Vugtの答え(2010年12月20日)を実装するpandasコード例です。

>私がしているのは、サブタイトルにtitle()関数を、メインタイトルにsuptitle()関数を使用することです(これらは異なるフォントサイズの引数を取ることができます)。お役に立てば幸いです!

import pandas as pd
import matplotlib.pyplot as plt

d = {'series a' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
      'series b' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)

title_string = "This is the title"
subtitle_string = "This is the subtitle"

plt.figure()
df.plot(kind='bar')
plt.suptitle(title_string, y=1.05, fontsize=18)
plt.title(subtitle_string, fontsize=10)

注:stackoverflowを初めて使用するため、その答えにコメントできませんでした。

17
Tim Misner

TeXを使用してください!これは動作します:

title(r"""\Huge{Big title !} \newline \tiny{Small subtitle !}""")

編集:TeX処理を有効にするには、matplotlibパラメーターに「usetex = True」行を追加する必要があります。

fig_size = [12.,7.5]
params = {'axes.labelsize': 8,
      'text.fontsize':   6,
      'legend.fontsize': 7,
      'xtick.labelsize': 6,
      'ytick.labelsize': 6,
      'text.usetex': True,       # <-- There 
      'figure.figsize': fig_size,
      }
rcParams.update(params)

また、コンピューター上で動作するTeXディストリビューションも必要だと思います。詳細はすべてこのページに記載されています。

http://matplotlib.org/users/usetex.html

7
pierre

私のために働いた解決策は次のとおりです。

  • 実際のタイトルにはsuptitle()を使用します
  • 字幕にtitle()を使用し、オプションのパラメーターyを使用して調整します。
    import matplotlib.pyplot as plt
    """
            some code here
    """
    plt.title('My subtitle',fontsize=16)
    plt.suptitle('My title',fontsize=24, y=1)
    plt.show()

2つのテキストの間には、厄介なオーバーラップが存在する可能性があります。これを修正するには、yの値を正しく調整するまでいじります。

5
data.dude