提问人: 提问时间:5/27/2021 最后编辑:Henry Ecker 更新时间:11/12/2023 访问量:376
Sns 条形图不对切片值进行排序
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(切片)进行了检查,它们是正确的顺序,Idk 我错过了什么,谢谢你的帮助
答:
2赞
JohanC
5/27/2021
#1
您没有说明您正在使用的版本,但它可能不是最新版本。Seaborn 和 matplotlib 在每个新版本中都得到了相当多的改进。
在 seaborn 0.11.1 中,您会收到警告,因为 并且最好通过关键字传递,即 .该警告试图避免与关键字混淆。除此之外,数字 x 值将按数字排序。x
y
sns.barplot(x=x, y=y)
data=
可以通过关键字控制订单。在本例中,.只有 10 个最高,你可以通过 .order=
sns.barplot(x=x, y=y, order=x)
sns.barplot(x=x, y=y, order=x[:10])
另请注意,您正在创建两次条形图(只是为了更改标题?),这可能会非常令人困惑。As 返回 (已绘制该图的子图),通常的方法是 和 然后 。(最好使用这个名称,以便更容易理解如何在新代码中使用 matplotlib 和 seaborn 示例代码。sns.barplot
ax
ax = sns.barplot(...)
ax.set_title(...)
ax
以下示例代码已使用 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()
0赞
George Kudryashov
11/12/2023
#2
for column in df.columns:
if column != 'Dataset':
plt.figure(figsize=(8, 4))
sns.barplot(x=df[column].value_counts().index, y=df[column].value_counts())
plt.title(f'Distribution of {column}')
plt.xlabel(column)
plt.ylabel('Count')
plt.xticks(rotation=90)
plt.show()
评论