Python 如何为seaborn histplot绘制不均匀数量的子地块

Python 如何为seaborn histplot绘制不均匀数量的子地块,python,pandas,seaborn,subplot,Python,Pandas,Seaborn,Subplot,我目前有一个13列的列表,我正在绘制分布图。我想创建一系列的子情节,使情节占用较少的空间,但我有一个困难的时间这样做在一个循环 示例数据帧: import pandas as pd import numpy as np data = {'identifier': ['A', 'B', 'C', 'D'], 'treatment': ['untreated', 'treated', 'untreated', 'treated'], 'treatment_timing': ['pr

我目前有一个13列的列表,我正在绘制分布图。我想创建一系列的子情节,使情节占用较少的空间,但我有一个困难的时间这样做在一个循环

示例数据帧:

import pandas as pd
import numpy as np

data = {'identifier': ['A', 'B', 'C', 'D'],
        'treatment': ['untreated', 'treated', 'untreated', 'treated'], 'treatment_timing': ['pre', 'pre', 'post', 'post'],
        'subject_A': [1.3, 0.0, 0.5, 1.6], 'subject_B': [2.0, 1.4, 0.0, 0.0], 'subject_C': [nan, 3.0, 2.0, 0.5],
        'subject_D': [np.nan, np.nan, 1.0, 1.6], 'subject_E': [0, 0, 0, 0], 'subject_F': [1.0, 1.0, 0.4, 0.5]}

df = pd.DataFrame(data)

  identifier  treatment treatment_timing  subject_A  subject_B  subject_C  subject_D  subject_E  subject_F
0          A  untreated              pre        1.3        2.0        NaN        NaN          0        1.0
1          B    treated              pre        0.0        1.4        3.0        NaN          0        1.0
2          C  untreated             post        0.5        0.0        2.0        1.0          0        0.4
3          D    treated             post        1.6        0.0        0.5        1.6          0        0.5
  • 从主题A到主题M(共13个)
  • 我目前正在做的是生成一个13行1列的布局,包含13个直方图。每个主题一个,分为3种颜色(前、后和缺失)

以下是我目前拥有的:

fig, axes = plt.subplots(3,5, sharex=True, figsize=(12,6))

for index, col in enumerate(COL_LIST):
    sns.histplot(
            df ,x=col, hue="time", multiple="dodge", bins=10, ax=axes[index,index % 3]
        ).set_title(col.replace("_", " "))
plt.tight_layout()
这肯定不行。但我不确定是否有一种简单的方法来定义轴,而不必复制和粘贴这条线13次,并手动定义轴坐标

使用DISPLAOT有些麻烦,因为COLU wrap错误会被清除

ValueError: Number of rows must be a positive integer, not 0
(我认为这是由于np.nan的存在)

  • 它将更易于使用,这是一个,而不是
    seaborn.histplot
    • 探索使用
      列换行
      获得所需的行数和列数
  • 必须堆叠
    主题
    列,才能将数据帧转换为整齐的格式,这可以通过
    堆叠
将熊猫作为pd导入
导入seaborn作为sns
#使用堆栈将数据帧转换为长格式
df_long=df.set_index(['identifier','treatment','treatment_timing']).stack().reset_index().rename(列={'level_3':'subject',0:'vals'})
#按主题分类
df_long=df_long.sort_值(“主题”).reset_索引(drop=True)
#显示(df_long.head())
标识符治疗时间受试者VAL
0未经治疗的预受试者\u A 1.3
1 D受试者术后治疗1.6
2 C未经治疗的受试者后0.5
3 B治疗前受试者_A 0.0
4 D治疗后受试者_B 0.0
#恶作剧
显示(数据=df_long,row='subject',col='treatment',x='vals',hue='treatment'u timing',bin=10)

本节介绍如何在轴对象之间循环并删除未使用的轴。对于您提供的受限信息,您只能说这些。