python绘制多个直方图

Hyo*_*sun 0 python plot matplotlib

我有一个包含 30 个变量的数据框 X,v1, v2 ... v30并且 col_name=[v1,v2.....v30]

对于每个变量,我想绘制直方图以了解变量分布。但是,编写代码来一个一个地绘制太手动了,我可以使用 for 循环之类的东西一次绘制 30 个直方图吗?

例如:

for i in range(30):
  hist(np.array(X[col_name[i]]).astype(np.float),bins=100,color='blue',label=col_name[i],normed=1,alpha=0.5)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?就像一页图表(每个图表都有标题和标签),这样我就可以向下滚动阅读。

jon*_*one 5

你可以这样做:

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

np.random.normal(0, 10)

df = pd.DataFrame({
        'v1': np.random.normal(0, 3, 20),
        'v2': np.random.normal(0, 3, 20),
        'v3': np.random.normal(0, 3, 20),
        'v4': np.random.normal(0, 3, 20),
        'v5': np.random.normal(0, 3, 20),
        'v6': np.random.normal(0, 3, 20),        
    })


# Generically define how many plots along and across
ncols = 3
nrows = int(np.ceil(len(df.columns) / (1.0*ncols)))
fig, axes = plt.subplots(nrows=nrows, ncols=ncols, figsize=(10, 10))

# Lazy counter so we can remove unwated axes
counter = 0
for i in range(nrows):
    for j in range(ncols):

        ax = axes[i][j]

        # Plot when we have data
        if counter < len(df.columns):

            ax.hist(df[df.columns[counter]], bins=10, color='blue', alpha=0.5, label='{}'.format(df.columns[counter]))
            ax.set_xlabel('x')
            ax.set_ylabel('PDF')
            ax.set_ylim([0, 5])
            leg = ax.legend(loc='upper left')
            leg.draw_frame(False)

        # Remove axis when we no longer have data
        else:
            ax.set_axis_off()

        counter += 1

plt.show()
Run Code Online (Sandbox Code Playgroud)

结果是:

在此处输入图片说明

改编自:如何在 matplotlib 中获得多个子图?