在网格中绘制多个直方图
plotting multiple histograms in grid
我运行按照代码在 3 x 3 网格中绘制 9 的直方图 varaibles.However,它只绘制一个变量。
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()
您正在正确添加子图,但您为每个添加的子图调用 plt.show
,这会导致显示到目前为止绘制的内容,即一个图。例如,如果您在 IPython 中绘制内联图,您将只会看到最后绘制的图。
Matplotlib 提供了一些很好的examples 如何使用子图。
您的问题已解决:
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)
给出的情节如下:
如果您真的不担心标题,这里有一个 one-liner
df = pd.DataFrame(np.random.randint(10, size=(100, 9)))
df.hist(color='k', alpha=0.5, bins=10)
我运行按照代码在 3 x 3 网格中绘制 9 的直方图 varaibles.However,它只绘制一个变量。
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()
您正在正确添加子图,但您为每个添加的子图调用 plt.show
,这会导致显示到目前为止绘制的内容,即一个图。例如,如果您在 IPython 中绘制内联图,您将只会看到最后绘制的图。
Matplotlib 提供了一些很好的examples 如何使用子图。
您的问题已解决:
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)
给出的情节如下:
如果您真的不担心标题,这里有一个 one-liner
df = pd.DataFrame(np.random.randint(10, size=(100, 9)))
df.hist(color='k', alpha=0.5, bins=10)