此问题已在此处有答案:
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()
我得到了输出图:
然而,我希望图中每个患者有两列,第一列表示常见细胞类型的比率,第二列表示罕见细胞类型的比率,如下所示:
1条答案
按热度按时间qcuzuvrc1#
让我们看一个例子
输出:
你怎么看,色调=“离散型在这里道奇”,因为多重=“道奇”。因此,如果你想减少数据,请使用hue =“celltype2”和multiple=“dodge”。
你可以使用你的代码两次。第一是稀有,第二是普通。
完整回答您的问题link