我将以下 pandas 数据框绘制为 seaborn 散点图,但是默认的 y 轴非常混乱,我还没有找到如何格式化 y 轴。
x = sns.scatterplot(data=plot_df, x='enroll_cnt', y='grad_pct', hue='nrc_desc')
- 为什么seaborn默认这样做,我的数据有问题吗?我尝试了不同的 y 轴列并遇到了同样的问题。我使用
x.set_yscale("linear")并且能够设置yscale,但现在百分比已经完全翻转。
我将以下 pandas 数据框绘制为 seaborn 散点图,但是默认的 y 轴非常混乱,我还没有找到如何格式化 y 轴。
x = sns.scatterplot(data=plot_df, x='enroll_cnt', y='grad_pct', hue='nrc_desc')
x.set_yscale("linear")并且能够设置yscale,但现在百分比已经完全翻转。y 轴的条目现在是字符串,因为它们包含百分号。Matplotlib 将字符串显示为分类类型。这意味着遇到的第一个字符串放在位置 0,下一个放在位置 1,依此类推。每次字符串第二次出现时,它都会被分配到它已经拥有的位置。这意味着,您的百分比是随机排列的。
如果您使用x.set_yscale("linear"),您将看到这些位置,但看不到相关值。
解决方案是将 y 值设为数字,并使用 将PercentFormatter()数字刻度显示为百分比。请注意,它有一个参数xmax=来指示与'100 %'对应的值,因此它可以直接使用原始值。另请注意,的返回值sns.scatterplot是 an ax,使得编写ax = sns.scatterplot(...)then更具可读性ax.yaxis.set_major_formatter(PercentFormatter(100))。
如果您没有直接创建数值的简单方法,则可以将字符串更改为值:
plot_df['grad_pct'] = [int(s[:-1]) for s in plot_df['grad_pct']]