matplotlib 使用Seaborn显示多个图形

iqjalb3h  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(117)

我有一个用Pandas打开的csv文件。它看起来像这样:

"Patient","Visit","Feature1","Feature2","Feature3"
"P1",0,?,?,?
"P1",1,?,?,?
"P2",0,?,?,?
"P2",1,?,?,?
"P2",2,?,?,?
"P3",0,?,?,?
"P3",1,?,?,?

字符串
?是一个数值。
我知道如何一次显示一个特征(因为它们有不同的范围),并按患者分开:

seaborn.stripplot(y="Feature1", x="Patient", data=features)


我想在一个图像中显示所有的图,就像一个Map。我怎么做?

w8f9ii69

w8f9ii691#

Seaborn通常喜欢“长形式”的框架,可以通过pandas的melt获得。

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

df = pd.DataFrame({"Patient": ["P1", "P1", "P2", "P2", "P2", "P3", "P3"],
                   "Visit": [0, 1, 0, 1, 2, 0, 1],
                   "Feature1": np.random.normal(10, 2, 7),
                   "Feature2": np.random.normal(12, 2, 7),
                   "Feature3": np.random.normal(15, 2, 7)})
df_melted = df.melt(value_vars=["Feature1", "Feature2", "Feature3"], id_vars=["Patient", "Visit"],
                    var_name="Feature", value_name="Value")
sns.stripplot(data=df_melted, x="Patient", y="Value", hue="Feature", dodge=True)

plt.tight_layout()
plt.show()

字符串
x1c 0d1x的数据
要在单独的子图中获取每个特征,您可以在熔化的网格上使用catplot(如果所有特征都在大约相同的范围内,则使用sharey=True;使用col_wrap=3每3列开始一个新行):

sns.catplot(kind="strip", data=df_melted, x="Patient", y="Value", col="Feature", sharey=False)
plt.tight_layout()


相关问题