gpt4 book ai didi

python - 如何在 ECDF 图上使用标记

转载 作者:行者123 更新时间:2023-12-01 23:14:06 25 4
gpt4 key购买 nike

要使用 seaborn 获得 ECDF 图,应执行以下操作:

sns.ecdfplot(data=myData, x='x', ax=axs, hue='mySeries')

这将为 myData 中的每个系列 mySeries 提供 ECDF 图。

现在,我想为这些系列中的每一个使用标记。我尝试使用与例如 sns.lineplot 相同的逻辑,如下:

sns.lineplot(data=myData,x='x',y='y',ax=axs,hue='mySeries',markers=True, style='mySeries',)

但是,不幸的是,关键字markersstyle 不适用于sns.ecdf 图。我正在使用 seaborn 0.11.2。

对于可重现的示例,可以使用企鹅数据集:

import seaborn as sns

penguins = sns.load_dataset('penguins')
sns.ecdfplot(data=penguins, x="bill_length_mm", hue="species")

最佳答案

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

df = sns.load_dataset('penguins', cache=True)

sns.ecdfplot(data=df, x="culmen_length_mm", hue="species", marker='^', ls='none', palette='colorblind')

enter image description here

直接计算ECDF

def ecdf(data, array: bool=True):
"""Compute ECDF for a one-dimensional array of measurements."""
# Number of data points: n
n = len(data)
# x-data for the ECDF: x
x = np.sort(data)
# y-data for the ECDF: y
y = np.arange(1, n+1) / n
if not array:
return pd.DataFrame({'x': x, 'y': y})
else:
return x, y

matplotlib.pyplot.plot

x, y = ecdf(df.culmen_length_mm)

plt.plot(x, y, marker='.', linestyle='none', color='tab:blue')
plt.title('All Species')
plt.xlabel('Culmen Length (mm)')
plt.ylabel('ECDF')
plt.margins(0.02) # keep data off plot edges

enter image description here

  • 对于多个组,如 JohanC 所建议
for species, marker in zip(df['species'].unique(), ['*', 'o', '+']):
x, y = ecdf(df[df['species'] == species].culmen_length_mm)
plt.plot(x, y, marker=marker, linestyle='none', label=species)
plt.legend(title='Species', bbox_to_anchor=(1, 1.02), loc='upper left')

enter image description here

seaborn.lineplot

# groupy to get the ecdf for each species
dfg = df.groupby('species')['culmen_length_mm'].apply(ecdf, False).reset_index(level=0).reset_index(drop=True)

# plot
p = sns.lineplot(data=dfg, x='x', y='y', hue='species', style='species', markers=True, palette='colorblind')
sns.move_legend(p, bbox_to_anchor=(1, 1.02), loc='upper left')

enter image description here

关于python - 如何在 ECDF 图上使用标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69300483/

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