在matplotlib中为图形提供字幕

pri*_*stc 49 matplotlib

我想给我的图表一个大的18pt字体的标题,然后是一个较小的10pt字体下面的字幕.我怎么能在matplotlib中这样做?看起来该title()函数只接受一个具有单个fontsize属性的字符串.必须有办法做到这一点,但如何?

小智 64

我所做的是使用title()函数作为副标题,使用suptitle()作为主标题(它们可以使用不同的fontsize参数).希望有所帮助!

  • 这样做的一个问题是“标题”和“副标题”的中心位置不同,因此它们可能与您的情节不一致。 (2认同)

Jas*_*son 23

虽然这不能为您提供与多种字体大小相关的灵活性,但在pyplot.title()字符串中添加换行符可以是一个简单的解决方案;

plt.title('Really Important Plot\nThis is why it is important')
Run Code Online (Sandbox Code Playgroud)

  • 大多数情况下,您需要标题和字幕之间的某些风格差异.否则它只是看起来像一个草率的标题分为两行. (5认同)

Tim*_*ner 18

这是一个实施Floris van Vugt答案的熊猫代码示例(2010年12月20日).他说:

>我所做的是使用title()函数作为字幕,使用suptitle()作为>主标题(它们可以使用不同的fontsize参数).希望有所帮助!

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)
Run Code Online (Sandbox Code Playgroud)

注意:我无法对该答案发表评论,因为我是stackoverflow的新手.

  • 如果您有两个子图怎么办?如果我叫`subtitle_string =('上面板:最大,平均,最小,足迹%|下面板:足迹%和关键单元格%')`,然后调用plt.suptitle(title_string,y = 0.99,fontsize = 17)`。在具有两个子图的图表中,字幕被打印在第二个子图的上方而不是第一个子图上,并且我看不到图例。 (2认同)

Jou*_*nen 17

我不认为内置任何东西,但你可以通过在轴上方留出更多空间并使用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')
Run Code Online (Sandbox Code Playgroud)

ha是的缩写horizontalalignment.


pie*_*rre 7

只需使用TeX!这有效:

title(r"""\Huge{Big title !} \newline \tiny{Small subtitle !}""")
Run Code Online (Sandbox Code Playgroud)

编辑:要启用TeX处理,您需要将"usetex = True"行添加到matplotlib参数:

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)
Run Code Online (Sandbox Code Playgroud)

我猜你还需要在你的计算机上运行TeX发行版.所有详细信息均在此页面给出:

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


Pat*_*ceG 7

正如这里提到的,你可以使用matplotlib.pyplot.text对象来达到相同的结果:

plt.text(x=0.5, y=0.94, s="My title 1", fontsize=18, ha="center", transform=fig.transFigure)
plt.text(x=0.5, y=0.88, s= "My title 2 in different size", fontsize=12, ha="center", transform=fig.transFigure)
plt.subplots_adjust(top=0.8, wspace=0.3)
Run Code Online (Sandbox Code Playgroud)


dat*_*ude 5

对我有用的解决方案是:

  • 使用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()
Run Code Online (Sandbox Code Playgroud)

这两段文字之间可能会有些讨厌的重叠。您可以通过摆弄y直到正确的值来解决此问题。