我在Jupyter notebook上有一个DataFrame,使用seaborn绘制了一个条形图:
data = {'day_index': [0, 1, 2, 3, 4, 5, 6],
'avg_duration': [708.852242, 676.7021900000001, 684.572677, 708.92534, 781.767476, 1626.575057, 1729.155673],
'trips': [114586, 120936, 118882, 117868, 108036, 43740, 37508]}
df = pd.DataFrame(data)
daysOfWeek = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
plt.figure(figsize=(16,10));
sns.set_style('ticks')
ax = sns.barplot(data=df, \
x='day_index', \
y='avg_duration', \
hue='trips', \
palette=sns.color_palette("Reds_d", n_colors=7, desat=1))
ax.set_xlabel("Week Days", fontsize=18, alpha=0.8)
ax.set_ylabel("Duration (seconds)", fontsize=18, alpha=0.8)
ax.set_title("Week's average Trip Duration", fontsize=24)
ax.set_xticklabels(daysOfWeek, fontsize=16)
ax.legend(fontsize=15)
sns.despine()
plt.show()
从图中可以看出,条形图与 x_ticklabels 不匹配且非常窄。
如果我删除 hue='trips'
部分,这一切都会解决,这是 seaborn 已知的问题。
尽管在可视化中显示行程次数非常重要,因此:有没有绕过 seaborn(或直接使用 matplotlib)来添加 hue 属性的方法?
sns.barplot(..., hue='trips', dodge=False)
来获得普通宽度的条形图。默认情况下,dodge=True
以防止具有相同x值的多个条形图重叠。 - JohanC