【问题标题】:Best way to represent relation between two grouped bar plots [closed]表示两个分组条形图之间关系的最佳方法[关闭]
【发布时间】:2021-01-26 03:26:52
【问题描述】:

假设我们有以下两个数据集:

data1 = {
         'A' : pd.Series([10, 20, 30, 40], index = [1, 2, 3, 4]), 
         'B' : pd.Series([8, 15, 29, 42], index = [1, 2, 3, 4]),
         'C' : pd.Series([7, 13, 31, 45], index = [1, 2, 3, 4])
        }

data2 = {
         'A' : pd.Series([9, 18, 27, 38], index = [1, 2, 3, 4]), 
         'B' : pd.Series([11, 17, 28, 41], index = [1, 2, 3, 4]),
         'C' : pd.Series([12, 17, 29, 42], index = [1, 2, 3, 4])
        }

我可以使用分组条形图表示data1,其中 x 轴有刻度 [1, 2, 3, 4]。在每个刻度内,我可以有三个部分“A”、“B”和“C”,并且可以使用数据集中的值形成条形图。分组条形图的一般示例是 .

我也可以为data2形成一个类似的分组条形图。

有没有办法可以将这两个组图组合在一个图中?是否有任何其他类型的图表可用于在单个图中同时表示 data1data2

谢谢

【问题讨论】:

    标签: python matplotlib seaborn data-visualization bar-chart


    【解决方案1】:

    你可以做一个背靠背的条形图..或任何它被称为的,从solution here进行一些修改:

    import matplotlib.pyplot as plt
    import pandas as pd
    
    fig, axes = plt.subplots(ncols=2, sharey=True)
    pd.DataFrame(data1).plot(kind="barh",ax=axes[0])
    axes[1]= pd.DataFrame(data2).plot(kind="barh",ax=axes[1])
    axes[0].invert_xaxis()
    plt.show()
    

    另一种选择是使用构面:

    import seaborn as sns
    data1 = pd.DataFrame(data1).reset_index()
    data2 = pd.DataFrame(data2).reset_index()
    df = pd.concat([data1,data2])
    df['dataset'] = np.repeat(['1','2'],[4,4])
    
    sns.catplot(data=df.melt(id_vars=["index","dataset"]),aspect=1,
                x="dataset",y="value",col="index",hue="variable",kind="bar")
    

    【讨论】:

    • 如果data1data2 有显着差异,这可能会起作用。例如。在您的图表中,在我仔细观察之前,顶部组看起来完全一样。基本上,很难看到比较。
    • 好的,你能清楚地知道你想看到什么或你试图编码什么。好像这个问题没有明确的答案
    • 好的。因此,我尝试为data1 绘制组条形图,然后在其顶部绘制data2 作为散点图。我使用颜色编码和标记样式来分隔ABC 的点。我认为这是一个不错的解决方案,但我认为也许有更好的方法。
    • 你可以尝试一个方面..
    • 这也是一个有趣的解决方案。
    猜你喜欢
    • 2014-11-02
    • 2019-11-27
    • 2013-03-11
    • 2023-03-09
    • 2015-01-18
    • 2015-12-07
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多