使用 seaborne ScatterPlot 简化 y 轴值
Simplify y-axis values with seaborne ScatterPlot
我将以下 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,但现在百分比已完全翻转。
您的 y-axis 条目现在是字符串,因为它们包含百分号。 Matplotlib 将字符串显示为分类类型。这意味着遇到的第一个字符串放在位置 0,下一个放在位置 1,等等。每次一个字符串第二次出现时,它都会被分配到它已经拥有的位置。这意味着,您的百分比是随机排列的。
如果您使用 x.set_yscale("linear")
,您将看到这些位置,但看不到相关值。
解决方案是将 y-values 设为数字,并使用 PercentFormatter()
将数字刻度显示为百分比。注意它有一个参数xmax=
来表示'100 %'对应的值,所以它可以直接使用原始值。另请注意,sns.scatterplot
的 return 值是一个 ax
,这使得编写 ax = sns.scatterplot(...)
和 ax.yaxis.set_major_formatter(PercentFormatter(100))
更易读。
如果您没有直接创建数值的简单方法,您可以将字符串更改为值:
plot_df['grad_pct'] = [int(s[:-1]) for s in plot_df['grad_pct']]
我将以下 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,但现在百分比已完全翻转。
您的 y-axis 条目现在是字符串,因为它们包含百分号。 Matplotlib 将字符串显示为分类类型。这意味着遇到的第一个字符串放在位置 0,下一个放在位置 1,等等。每次一个字符串第二次出现时,它都会被分配到它已经拥有的位置。这意味着,您的百分比是随机排列的。
如果您使用 x.set_yscale("linear")
,您将看到这些位置,但看不到相关值。
解决方案是将 y-values 设为数字,并使用 PercentFormatter()
将数字刻度显示为百分比。注意它有一个参数xmax=
来表示'100 %'对应的值,所以它可以直接使用原始值。另请注意,sns.scatterplot
的 return 值是一个 ax
,这使得编写 ax = sns.scatterplot(...)
和 ax.yaxis.set_major_formatter(PercentFormatter(100))
更易读。
如果您没有直接创建数值的简单方法,您可以将字符串更改为值:
plot_df['grad_pct'] = [int(s[:-1]) for s in plot_df['grad_pct']]