用子图绘制pandas数据框(subplots = True):放置图例并使用紧密布局

时间:2015-11-27 14:06:47

标签: python pandas matplotlib

我真的很喜欢大熊猫来处理和分析大数据集。到目前为止,我主要使用matplotlib进行绘图,但现在想要使用pandas自己的绘图功能(基于matplotlib),因为它需要更少的代码,并且在大多数情况下似乎对我来说足够了。特别是在下面的例子中对大数据帧进行了一瞥的子图。

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

# Generate random data
df = pd.DataFrame(np.random.randn(96,12),
                  columns=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
                           'K', 'L'])

# Plotting
df.plot(kind='line', subplots=True, grid=True, title="Sample Data (Unit)",
        layout=(4, 3), sharex=True, sharey=False, legend=True,    
        style=['r', 'r', 'r', 'g', 'g', 'g', 'b', 'b', 'b', 'r', 'r', 'r'],
        xticks=np.arange(0, len(df), 16))

enter image description here

..这让我想到了我的问题:

1.。)如何将所有图例放在子图中的同一个地方(例如居中,外面,顶部)?

2。)我可以以某种方式使用matplotlibs" Tight Layout" (http://matplotlib.org/users/tight_layout_guide.html)为情节?

提前致谢!

1 个答案:

答案 0 :(得分:12)

  1. 您可以将所有图例放在同一个位置,但您必须在单独的步骤中创建它们。

    # Plotting
    df.plot(kind='line', subplots=True, grid=True, title="Sample Data (Unit)",
        layout=(4, 3), sharex=True, sharey=False, legend=False,    
        style=['r', 'r', 'r', 'g', 'g', 'g', 'b', 'b', 'b', 'r', 'r', 'r'],
        xticks=np.arange(0, len(df), 16))
    
    [ax.legend(loc=1) for ax in plt.gcf().axes]
    
  2. 不确定。只需在plt.tight_layout()show之前使用savefig。比较使用和不使用tight_layout创建的以下两个示例。

  3. 没有tight_layout()

    enter image description here

    使用tight_layout()

    enter image description here