【问题标题】:Two seaborn plots with different scales displayed on same plot but bars overlap两个不同比例的seaborn地块显示在同一地块上,但条形重叠
【发布时间】:2021-12-30 10:19:38
【问题描述】:

我试图在同一个图上包含 2 个具有不同比例的 seaborn 计数图,但条形显示为不同的宽度并重叠,如下所示。知道如何解决这个问题吗?

设置 dodge=False 不起作用,因为条形显示在彼此之上。

【问题讨论】:

  • 请提供一个最小的、完整的和可验证的示例,包括输入。不要将代码、数据、错误消息作为图片发布。

标签: python seaborn


【解决方案1】:

问题中方法的主要问题是第一个countplot 没有考虑hue。第二个countplot 不会神奇地移动第一个的条。可以添加一个额外的分类列,仅采用“周末”值。请注意,即使真正使用了一个值,该列也应该明确地使用两个值进行分类。

事情可以简化很多,从原始数据框开始,据说已经有一个列'is_weeked'。预先创建twinx ax 允许编写一个循环(因此只需编写一次对sns.countplot() 的调用,并带有参数)。

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

sns.set_style('dark')
# create some demo data
data = pd.DataFrame({'ride_hod': np.random.normal(13, 3, 1000).astype(int) % 24,
                     'is_weekend': np.random.choice(['weekday', 'weekend'], 1000, p=[5 / 7, 2 / 7])})
# now, make 'is_weekend' a categorical column (not just strings)
data['is_weekend'] = pd.Categorical(data['is_weekend'], ['weekday', 'weekend'])
fig, ax1 = plt.subplots(figsize=(16, 6))
ax2 = ax1.twinx()
for ax, category in zip((ax1, ax2), data['is_weekend'].cat.categories):
    sns.countplot(data=data[data['is_weekend'] == category], x='ride_hod', hue='is_weekend', palette='Blues', ax=ax)
    ax.set_ylabel(f'Count ({category})')
ax1.legend_.remove()  # both axes got a legend, remove one
ax1.set_xlabel('Hour of Day')
plt.tight_layout()
plt.show()

【讨论】:

    【解决方案2】:

    使用 plt.xticks(['将标签手动放入你的 x 标签'])

    【讨论】:

    • 我不想对新用户的答案投反对票,但这如何解决重叠条的问题?
    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2021-01-25
    • 2020-08-16
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多