我正在使用以下代码,尝试将我的pandas数据框df_in的每一列的直方图绘制为一个大图的子图。
%matplotlib notebook
from itertools import combinations
import matplotlib.pyplot as plt
fig, axes = plt.subplots(len(df_in.columns) // 3, 3, figsize=(12, 48))
for x in df_in.columns:
df_in.hist(column = x, bins = 100)
fig.tight_layout()
然而,直方图并未在子图中显示。谁知道我错过了什么?谢谢!
答案 0 :(得分:5)
我无法评论burhan的答案,因为我没有足够的声望点。他回答的问题是axes
不是一维的,它包含轴三元组,因此需要展开:
%matplotlib notebook
from itertools import combinations
import matplotlib.pyplot as plt
fig, axes = plt.subplots(len(df_in.columns)//3, 3, figsize=(12, 48))
i = 0
for triaxis in axes:
for axis in triaxis:
df_in.hist(column = df_in.columns[i], bins = 100, ax=axis)
i = i+1
答案 1 :(得分:2)
您需要指定要绘制的轴。这应该有效:
fig, axes = plt.subplots(len(df_in.columns)//3, 3, figsize=(12, 48))
for col, axis in zip(df_in.columns, axes):
df_in.hist(column = col, bins = 100, ax=axis)
答案 2 :(得分:0)
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
fig, axis = plt.subplots(2,3,figsize=(8, 8))
df_in.hist(ax=axis)
以上内容将绘制2 * 3(您的数据框总共6个直方图)。根据您的布置要求调整行数和列数(列数)
我的TA @Benjamin曾经告诉我,数据框意味着不必使用for循环。