我的结构遵循的是熊猫DataFrame:
n X Y Z
0 1.000000 1.000000 1.014925
1 1.000000 1.000000 1.000000
我想从每列创建M个单独的子图(直方图)。一个直方图来自X,一个来自Y,最后一个来自Z。
我希望它可以在单独的地块上使用。我一直在研究https://seaborn.pydata.org/generated/seaborn.FacetGrid.html,但不了解如何从数据中绘制语法/逻辑。
答案 0 :(得分:2)
您可以使用熊猫数据框的内置plot
方法和选项subplots=True
按列进行绘制
from io import StringIO
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('seaborn')
# Here I read your example data in
df = pd.read_fwf(StringIO("""
X Y Z
0 1.000000 1.000000 1.014925
1 1.000000 1.000000 1.000000
"""), header=1, index_col=0)
# Plotting as desired
df.plot.hist(subplots=True, legend=False)
df.plot
包含许多其他参数,可让您轻松更改绘图,例如
df.plot.hist(subplots=True, legend=True, layout=(1, 3))
答案 1 :(得分:1)
使用seaborn.FacetGrid
可能需要您重组数据。
让我们看一个例子:
np.random.seed(0)
df = pd.DataFrame(np.random.randn(1000, 3), columns=['X', 'Y', 'Z'])
print(df.head(10))
X Y Z
0 1.764052 0.400157 0.978738
1 2.240893 1.867558 -0.977278
2 0.950088 -0.151357 -0.103219
3 0.410599 0.144044 1.454274
4 0.761038 0.121675 0.443863
5 0.333674 1.494079 -0.205158
6 0.313068 -0.854096 -2.552990
7 0.653619 0.864436 -0.742165
8 2.269755 -1.454366 0.045759
9 -0.187184 1.532779 1.469359
df_stacked = df.stack().reset_index(1).rename({'level_1': 'column', 0: 'values'}, axis=1)
print(df_stacked.head(10))
column values
0 X 1.764052
0 Y 0.400157
0 Z 0.978738
1 X 2.240893
1 Y 1.867558
1 Z -0.977278
2 X 0.950088
2 Y -0.151357
2 Z -0.103219
3 X 0.410599
g = sns.FacetGrid(df_stacked, row='column')
g.map(plt.hist, 'values')
[出]
答案 2 :(得分:0)
sns.pairplot(your_df)
将执行此操作,但是它还会向您显示每列的成对散点图,所以是的,它会做得比您需要的多一点?在进行探索性数据分析时很好。您还可以通过在调用中添加 corner=True
使其更简洁。
或者类似的东西:
# Update as needed
n_rows=1
n_cols=3
# Create the subplots
fig, axes = plt.subplots(nrows=n_rows, ncols=n_cols, figsize=(10, 10))
for i, column in enumerate(df):
sns.histplot(df, ax=axes[i // n_cols, i % n_cols]).set_title(column)