gpt4 book ai didi

python - 如何更改 seaborn violinplot 图例标签?

转载 作者:行者123 更新时间:2023-12-04 03:30:52 25 4
gpt4 key购买 nike

我正在使用 seaborn 制作 violinplot,它使用色调来确定谁幸存,谁没有幸存。这是由“DEATH_EVENT”列给出的,其中 0 表示该人幸存,1 表示他们没有。我遇到的唯一问题是我不知道如何为这个色调图例设置标签。如下所示,'DEATH_EVENT' 显示 0 和 1,但我想将其更改为 'Survived' 和 'Not survived'。

Current plot image.

当前代码:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
sns.set()
plt.style.use('seaborn')
data = pd.read_csv('heart_failure_clinical_records_dataset.csv')

g = sns.violinplot(data=data, x='smoking', y='age', hue='DEATH_EVENT')
g.set_xticklabels(['No smoking', 'Smoking'])

我尝试使用:g.legend(labels=['Survived', 'Not survived']),但由于某种原因它没有返回颜色,而是一条细线和粗线.

 (image).

我知道我可以使用:

data['DEATH_EVENT'].replace({0:'Survived', 1:'Not survived'}, inplace=True)

但我想看看有没有别的办法。我还是菜鸟,所以我猜 CSV 的作者使用整数来描述很多东西是有原因的。例如:如果有人吸烟或不吸烟、性行为、是否患有糖尿病等。也许它运行得更快?

最佳答案

控制 Seaborn 图例仍然有些棘手(matplotlib 的 API 的一些扩展会有所帮助)。在这种情况下,您可以从刚刚创建的图例中获取句柄并将它们重新用于新图例:

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

data = pd.DataFrame({"smoking": np.random.randint(0, 2, 200),
"survived": np.random.randint(0, 2, 200),
"age": np.random.normal(60, 10, 200),
"DEATH_EVENT": np.random.randint(0, 2, 200)})
ax = sns.violinplot(data=data, x='smoking', y='age', hue='DEATH_EVENT')
ax.set_xticklabels(['No smoking', 'Smoking'])
ax.legend(handles=ax.legend_.legendHandles, labels=['Survived', 'Not survived'])

violinplot with changed legend

这是一种通过数据框进行更改而不更改原始数据框的方法。为避免一起访问 ax.legend_(删除图例标题),一个技巧是将列重命名为空白字符串(并将该空白字符串用于 hue)。如果数据帧不是超长(即没有数百万行),则速度和内存开销都非常适中。

names = {0: 'Survived', 1: 'Not survived'}
ax = sns.violinplot(data=data.replace({'DEATH_EVENT': names}).rename(columns={'DEATH_EVENT': ''}),
x='smoking', y='age', hue='')

关于python - 如何更改 seaborn violinplot 图例标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66846287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com