首页 > 解决方案 > Seaborn/Matplotlib:在水平条形图上绘制过滤数据

问题描述

我想使用我选择的数据绘制水平条形图。

average_nightly_prices = df.groupby('neighbourhood_cleansed')['price'].mean()
average_nightly_prices

数据:

neighbourhood_cleansed
Bijlmer-Centrum                            95.018868
Bijlmer-Oost                              100.268041
Bos en Lommer                             124.242481
Buitenveldert - Zuidas                    148.633065
Centrum-Oost                              174.449275
Centrum-West                              181.870728
De Aker - Nieuw Sloten                    137.437500
De Baarsjes - Oud-West                    148.323816
De Pijp - Rivierenbuurt                   163.523210
Gaasperdam - Driemond                     106.714286
Geuzenveld - Slotermeer                   122.605634
IJburg - Zeeburgereiland                  173.202273
Noord-Oost                                128.538462
Noord-West                                128.862069
Oostelijk Havengebied - Indische Buurt    130.387133
Osdorp                                    109.222222
Oud-Noord                                 161.260135
Oud-Oost                                  145.832629
Slotervaart                               119.940048
Watergraafsmeer                           150.214815
Westerpark                                148.807720
Zuid                                      175.561469
Name: price, dtype: float64

我需要帮助才能开始,所以我可以稍后添加一些细节,例如错误栏。

我已经详细浏览了文档,但最让我困惑的是将数据分配给轴。

问题:当将数据绘制到 x,y 轴时,我可以在那里实现数据过滤器吗?详细说明:

sns.barplot(x= df.groupby('neighbourhood_cleansed')....etc

标签: pythonpandasmatplotlibseaborn

解决方案


绘制简单的barplot使用。

import seaborn as sns
import matplotlib.pyplot as plt

ax = sns.barplot(x=average_nightly_prices.index, y=average_nightly_prices.values)

进一步定制:

脚步

  1. 设置figsize和要求dpi
  2. 旋转x-ticks90 度。
  3. x-label缩放和的字体大小ticks
  4. 在条形图顶部添加值文本
import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(35, 20),  dpi=100)

ax = sns.barplot(x=average_nightly_prices.index, y=average_nightly_prices.values)

plt.xticks(rotation=90)
plt.xlabel('neighbourhood_cleansed', fontsize=20)
ax.tick_params(labelsize=15)

for p in ax.patches:
    height = p.get_height()
    ax.text(p.get_x()+p.get_width()/2., height + 3, height, ha="center")

输出:

在此处输入图像描述

笔记:

horizontal要反向绘制x&y

ax = sns.barplot(x = average_nightly_prices.values , y = average_nightly_prices.index)

horizontal情节上的同类定制:

import seaborn as sns
import matplotlib.pyplot as plt

sns.set_style('darkgrid')
plt.figure(figsize=(35, 20), dpi=100)


ax = sns.barplot(x=average_nightly_prices.values, y=average_nightly_prices.index, palette="Set2")

plt.ylabel('neighbourhood_cleansed', fontsize=20)
ax.tick_params(labelsize=15)

for p in ax.patches:
    width = p.get_width()
    ax.text(width + 4, p.get_y()+p.get_height()/2.,  width, ha="center")

最终输出

在此处输入图像描述


推荐阅读