matplotlib 如何创建分组和堆叠的条形图?[副本]

rnmwe5a2  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(138)

此问题已在此处有答案

How to have clusters of stacked bars(10个答案)
How can I group a stacked bar chart?(2个答案)
How to create grouped and stacked bars(1个答案)
39分钟前关闭
我有一个df,其中每行代表一个细胞,第一列代表其细胞类型,第二列代表它是常见细胞类型还是罕见细胞类型,最后一列代表相应患者的姓名。例如:the overview of the dataframe
我想使用上面描述的df绘制一个堆栈histplot来显示每个患者中细胞类型的比例,这是我的玩具代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from random import choice

celltype_name = [choice(['Myeloid','B','T','NK','CAF','pDC']) for i in range(100)]
celltype2_name= [choice(['rare','common']) for i in range(100)]
patient_name = [choice(['P01','P02','P03','P04']) for i in range(100)]

df = pd.DataFrame([celltype_name, celltype2_name, patient_name]).T
df.columns = ['celltype', 'celltype2', 'patient_name']
df['patient_name'] = pd.Categorical(df['patient_name'], ['P01','P02','P03','P04'])

ax = sns.histplot(
        data=df,
        x="patient_name", hue="celltype",
        multiple="fill", stat="proportion",
        discrete=True, shrink=.8, legend=True,
        linewidth=0.2,
)
sns.move_legend(ax, "upper left", bbox_to_anchor=(1, 1))
plt.show()

我得到了输出图:

然而,我希望图中每个患者有两列,第一列表示常见细胞类型的比率,第二列表示罕见细胞类型的比率,如下所示:

qcuzuvrc

qcuzuvrc1#

让我们看一个例子

sns.histplot(data=tips, x="day", hue="sex", multiple="dodge", shrink=.8)

输出:

你怎么看,色调=“离散型在这里道奇”,因为多重=“道奇”。因此,如果你想减少数据,请使用hue =“celltype2”和multiple=“dodge”。
你可以使用你的代码两次。第一是稀有,第二是普通。
完整回答您的问题link

相关问题