matplotlib - 使用 Seaborn 显示多个图形
问题描述
我有一个用 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)
我想在单个图像中显示所有图,例如映射。我该怎么做?
解决方案
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()
要在单独的子图中获取每个特征,您可以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()
推荐阅读
- c# - linq 选择中的条件
- laravel - 在实时服务器上运行 composer install 时出现错误
- python - 我怎样才能有效地做到这一点?
- reactjs - 如何检测未使用的 css-modules 类
- javascript - 将 html 表转换为 mat 表(角度)
- c# - 有没有办法使用 C# 在 Visual Studio 中使面板缓慢移动?
- php - 如何在 PHP 中将 PayPal 沙箱帐户切换为真实帐户
- node.js - 在谷歌云函数中访问 JSON 对象
- javascript - 如何在页面加载jquery上将更改设置为默认值?
- ruby-on-rails - 如何在保持适当的尾随/前导零的同时增加字符串中的数字