Sns barplot 不对切片值进行排序
Sns barplot does not sort sliced values
我想使用 sns barplot 从 pd df 绘图。一切正常:
关联代码:
result = df.groupby(['Code departement']).size().sort_values(ascending=False)
x=result.index
y=result.values
plot=sns.barplot(x, y)
plot.set(xlabel='Code departement', ylabel='Nombre de transactions')
sns.barplot(x, y, data=df).set_title('title')
但是正如您在 PLOT 1 中看到的那样,条形图太多,所以我只想要最高的 10 个,当我对 x 和 y 进行切片时:
x=result[:10].index
y=result[:10].values
plot=sns.barplot(x, y)
它像这样无序地打印条形图:
我通过打印 x 和 y(切片)进行了检查,它们的顺序是正确的,我知道我缺少什么谢谢你的帮助
您没有说明您使用的版本,但可能不是最新的。 Seaborn 和 matplotlib 在每个新版本中都得到了相当多的改进。
对于 seaborn 0.11.1,您会收到警告,因为 x
和 y
首选通过关键字传递,即 sns.barplot(x=x, y=y)
。该警告试图避免与 data=
关键字混淆。除此之外,数字 x-values 将按数字排序。
顺序可以通过order=
关键字来控制。在这种情况下,sns.barplot(x=x, y=y, order=x)
。要只有最高的 10 个,你可以通过 sns.barplot(x=x, y=y, order=x[:10])
.
另请注意,您正在创建两次条形图(只是为了更改标题?),这可能会非常混乱。由于 sns.barplot
returns ax
(绘制情节的子情节),通常的方法是 ax = sns.barplot(...)
然后是 ax.set_title(...)
。 (首选名称 ax
,以便更容易理解如何在新代码中使用 matplotlib 和 seaborn 示例代码。)
以下示例代码已通过 seaborn 0.11.1 测试:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
print(sns.__version__)
df = pd.DataFrame({'Code departement': np.random.randint(1, 51, 1000)})
result = df.groupby(['Code departement']).size().sort_values(ascending=False)
x = result.index
y = result.values
ax = sns.barplot(x, y, order=x[:10])
ax.set(xlabel='Code departement', ylabel='Nombre de transactions')
ax.set_title('title')
plt.show()
我想使用 sns barplot 从 pd df 绘图。一切正常:
关联代码:
result = df.groupby(['Code departement']).size().sort_values(ascending=False)
x=result.index
y=result.values
plot=sns.barplot(x, y)
plot.set(xlabel='Code departement', ylabel='Nombre de transactions')
sns.barplot(x, y, data=df).set_title('title')
但是正如您在 PLOT 1 中看到的那样,条形图太多,所以我只想要最高的 10 个,当我对 x 和 y 进行切片时:
x=result[:10].index
y=result[:10].values
plot=sns.barplot(x, y)
它像这样无序地打印条形图:
我通过打印 x 和 y(切片)进行了检查,它们的顺序是正确的,我知道我缺少什么谢谢你的帮助
您没有说明您使用的版本,但可能不是最新的。 Seaborn 和 matplotlib 在每个新版本中都得到了相当多的改进。
对于 seaborn 0.11.1,您会收到警告,因为 x
和 y
首选通过关键字传递,即 sns.barplot(x=x, y=y)
。该警告试图避免与 data=
关键字混淆。除此之外,数字 x-values 将按数字排序。
顺序可以通过order=
关键字来控制。在这种情况下,sns.barplot(x=x, y=y, order=x)
。要只有最高的 10 个,你可以通过 sns.barplot(x=x, y=y, order=x[:10])
.
另请注意,您正在创建两次条形图(只是为了更改标题?),这可能会非常混乱。由于 sns.barplot
returns ax
(绘制情节的子情节),通常的方法是 ax = sns.barplot(...)
然后是 ax.set_title(...)
。 (首选名称 ax
,以便更容易理解如何在新代码中使用 matplotlib 和 seaborn 示例代码。)
以下示例代码已通过 seaborn 0.11.1 测试:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
print(sns.__version__)
df = pd.DataFrame({'Code departement': np.random.randint(1, 51, 1000)})
result = df.groupby(['Code departement']).size().sort_values(ascending=False)
x = result.index
y = result.values
ax = sns.barplot(x, y, order=x[:10])
ax.set(xlabel='Code departement', ylabel='Nombre de transactions')
ax.set_title('title')
plt.show()