当kind ='bar'时显示子图的标题,但是当kind ='line'时则不显示

时间:2017-03-15 14:06:19

标签: python pandas matplotlib subplot

当我创建这样的子图时:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import itertools

df = pd.DataFrame(np.random.randn(20, 10), columns=list('ABCDEFGHIJ'))

ax = df.plot(kind='bar', subplots=True, layout=(4, 3), sharex=True, sharey=False)

我得到一个这样的图,其中列标题用作子图的标题:

enter image description here

当我将kind='bar'更改为kind='line'时,只会显示图例但不会显示标题。

解决方法是使用.get_legend_handles_labels(),如下所示:

for axi in itertools.chain.from_iterable(ax):
    try:
        axi.set_title(axi.get_legend_handles_labels()[1][0], {'size': 16})
    except:
        pass

然后给出正确的输出:

enter image description here

有没有更直接的方法来实现这一目标?为什么plot的行为会有所不同,具体取决于标记kind

1 个答案:

答案 0 :(得分:2)

解决方法:

  1. 获取当前development version of plotting.py。这允许为titles的{​​{1}}参数提供列表。
  2. 使用

    plot

    获取子剧情标题。

  3. 当然您也可以直接尝试更改代码以包含轴标题的设置。 barplot的代码在当前开发版本的2006年左右;并且你需要将它放在线条1757附近的LinePlot的ax = df.plot(kind="line",subplots=True, layout=(4, 3), sharex=True, sharey=False, title=list(df.columns.values)) 方法中,其中一个简单的_make_plot()就足够了。问题可能是大熊猫会要求你重建它。 (我没有测试过。)