在网格中绘制多个直方图

4
我正在运行以下代码,用于绘制9个变量的3x3直方图网格。然而,它只绘制一个变量。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def draw_histograms(df, variables, n_rows, n_cols):
    fig=plt.figure()
    for i, var_name in enumerate(variables):
        ax=fig.add_subplot(n_rows,n_cols,i+1)
        df[var_name].hist(bins=10,ax=ax)
        plt.title(var_name+"Distribution")
        plt.show()
2个回答

22

你已经正确添加子图,但是你在每个添加的子图中调用了plt.show,这会导致已经绘制的图形被显示出来,即只有一个图。如果例如在IPython中进行内联绘图,则只会看到最后绘制的一张图。

Matplotlib提供了一些不错的示例,演示如何使用子图。

解决方法如下:

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

def draw_histograms(df, variables, n_rows, n_cols):
    fig=plt.figure()
    for i, var_name in enumerate(variables):
        ax=fig.add_subplot(n_rows,n_cols,i+1)
        df[var_name].hist(bins=10,ax=ax)
        ax.set_title(var_name+" Distribution")
    fig.tight_layout()  # Improves appearance a bit.
    plt.show()

test = pd.DataFrame(np.random.randn(30, 9), columns=map(str, range(9)))
draw_histograms(test, test.columns, 3, 3)

这将产生一个像这样的图:

subplot histograms


14

如果您并不是非常在意标题,这里有一个一行的简述:

df = pd.DataFrame(np.random.randint(10, size=(100, 9)))
df.hist(color='k', alpha=0.5, bins=10)

这里输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接