【问题标题】:Python Matplotlib Box Plot Two Data Sets Side by SidePython Matplotlib 箱线图并排绘制两个数据集
【发布时间】:2017-04-26 00:43:26
【问题描述】:

我想使用两个数据集制作箱线图。每组都是浮点数列表。 A和B是两个数据集的例子

A = []
B = []

for i in xrange(10):
    l = [random.random() for i in xrange(100)]
    m = [random.random() for i in xrange(100)]
    A.append(l)
    B.append(m)

我希望 A 和 B 的箱线图彼此相邻,而不是彼此相邻。此外,我希望不同的 x 值之间有更大的差距,或许还有更薄的盒子。我的代码在下面,它产生的情节也是如此(当前代码将 A 放在 B 之上)。感谢您的帮助。

def draw_plot(data, edge_color, fill_color):
    bp = ax.boxplot(data, patch_artist=True)
    for element in ['boxes', 'whiskers', 'fliers', 'medians', 'caps']:
        plt.setp(bp[element], color=edge_color)
    plt.xticks(xrange(11))
    for patch in bp['boxes']:
        patch.set(facecolor=fill_color)

fig, ax = plt.subplots()
draw_plot(A, "tomato", "white")
draw_plot(B, "skyblue", "white")
plt.savefig('sample_box.png', bbox_inches='tight')
plt.close()

【问题讨论】:

    标签: python matplotlib boxplot


    【解决方案1】:

    查看箱线图的文档我们发现它有一个positions 参数,可以用来设置箱线图的位置。您需要提供一个包含尽可能多的元素的列表或数组来绘制箱线图。

    import numpy as np; np.random.seed(1)
    import matplotlib.pyplot as plt
    
    A = np.random.rand(100,10)
    B = np.random.rand(100,10)
    
    def draw_plot(data, offset,edge_color, fill_color):
        pos = np.arange(data.shape[1])+offset 
        bp = ax.boxplot(data, positions= pos, widths=0.3, patch_artist=True, manage_xticks=False)
        for element in ['boxes', 'whiskers', 'fliers', 'medians', 'caps']:
            plt.setp(bp[element], color=edge_color)
        for patch in bp['boxes']:
            patch.set(facecolor=fill_color)
    
    fig, ax = plt.subplots()
    draw_plot(A, -0.2, "tomato", "white")
    draw_plot(B, +0.2,"skyblue", "white")
    plt.xticks(xrange(10))
    plt.savefig(__file__+'.png', bbox_inches='tight')
    plt.show()
    plt.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-03
      • 2019-09-03
      • 2021-06-26
      • 1970-01-01
      • 2020-05-04
      • 2016-10-18
      • 1970-01-01
      相关资源
      最近更新 更多