作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
要使用 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',)
但是,不幸的是,关键字markers
或style
不适用于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")
最佳答案
seaborn.ecdfplot
的文档中所述, 其他关键字参数传递给 matplotlib.axes.Axes.plot()
, 它接受 marker
和 linestyle / ls
marker
和 ls
接受单个字符串,该字符串适用于绘图中的所有 hue
组。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')
seaborn.lineplot
的选项或 matplotlib.pyplot.plot
,就是直接计算ECDF的x
和y
。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
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')
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')
关于python - 如何在 ECDF 图上使用标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69300483/
我是一名优秀的程序员,十分优秀!