簡體   English   中英

如何更改 seaborn violinplot 圖例標簽?

[英]How to change seaborn violinplot legend labels?

我正在使用 seaborn 制作小提琴圖,它使用色調來識別誰幸存下來,誰沒有幸存。 這由“DEATH_EVENT”列給出,其中 0 表示此人幸存,1 表示他們沒有。 我遇到的唯一問題是我不知道如何為這個色調圖例設置標簽。 如下所示,“DEATH_EVENT”表示 0 和 1,但我想將其更改為“幸存”和“未幸存”。

當前繪圖圖像。

當前代碼:

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']) ,但由於某種原因,它在沒有 colors 的情況下返回它,而是一條細而粗的線。

(圖片)。

我知道我可以使用:

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'])

改變傳奇的小提琴圖

這是一種通過 dataframe 進行更改而不更改原始 dataframe 的方法。 為了避免一起訪問ax.legend_ (以刪除圖例標題),一個技巧是將列重命名為空白字符串(並將該空白字符串用於hue )。 如果 dataframe 不是超長(即沒有數百萬行),則速度和 memory 開銷相當適中。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM