Matplotlib бар сюжет, бары друг над другом, как создать пространство - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть эта функция для построения гистограммы для некоторых значений задержки:

import pandas as pd
import numpy as np
%matplotlib inline
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt 


def plot_bar(g):
    auto = [1.36, 5.34, 10.2, 16.48, 24.3, 45.6, 83.89, 155.19, 289.68, 598.85]
    four = [1.81, 5.57, 11.48, 18, 27.69, 47.72, 89.11, 164.74, 315.24, 637.89]
    eight = [1.44, 5.45, 8.56, 16.64, 26.85, 43.44, 82.41, 152.32, 294.11, 598.57]
    sixteen = [2.29, 5.79, 19.99, 18.44, 33.73, 75.31, 177.74, 365.39, 774.57, 1619.99]
    thirtytwo = [3.62, 13.84, 25.39, 42.21, 80.14, 150.41, 311.46, 645.37, 1330.94, 2688.48]   

    N = 10
    fig, ax = plt.subplots()

    ind = np.arange(N)    # the x locations for the groups
    width = 0.30         # the width of the bars
    p1 = ax.bar(ind, auto, width, color='r')
    p2 = ax.bar(ind+width, four, width, color='y')
    p3 = ax.bar(ind+width+width, eight, width, color='b')
    p4 = ax.bar(ind+width+width+width, sixteen, width, color='k')
    p5 = ax.bar(ind+width+width+width+width, thirtytwo, width, color='g')



    #ax.set_title('Scores by group and gender')
    ax.set_xticks(ind * (5 * width))
    ax.set_xticklabels(('1MB', '4MB', '8MB', '16MB', '32MB', '64MB', '128MB', '256MB', '512MB', '1GB'))

    plt.xticks(rotation=75)

    ax.legend((p1[0], p2[0], p3[0], p4[0], p5[0]), ('Automatic t=8', 't=4','t=8', 't=16', 't=32'))
    ax.autoscale_view()
    plt.ylabel('time (ms)')
    plt.xlabel('Data Size')
    plt.yscale("log", nonposy='clip')
    plt.tight_layout()
    fig.savefig('./graphs/nope_{!s}.eps'.format(g))

, и результат такой: enter image description here

где барыпересекаются друг с другом, что я хотел бы избежать.Я пытался с размером фигуры, но не повезло.Я также попытался изменить set_xticks также, чтобы узнать, что получилось, и у меня нет идей, как это исправить.

Представленный код должен работать, пожалуйста, совет.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Другое альтернативное решение - использовать широко разделенные x-позиции для центральной полосы.Проблема с вашим графиком заключалась в том, что ширина вашего бара составляла 0,3, а у вас было 5 столбцов, так что 5 * 0,3 = 1,5 общего интервала x на группу.И так как интервал между вашими x-позициями для центрирующих баров был 1, у вас было перекрытие 0,5 между каждой группой баров.

Чтобы избежать этого, вы можете использовать интервал 2 между вашими x-индексами дляцентрирование баров с использованием следующего.Я также заметил, что вы не используете все x-ticklabels должным образом.Добавьте следующие две строки, чтобы все выглядело хорошо.

ind = np.arange(0,2*N, 2)    # the x locations for the groups
ax.set_xticks(ind + 2*width)

enter image description here

0 голосов
/ 26 сентября 2018

По сути, ширина вашего бара слишком велика.Значки шириной в 1 единицу, вы пытаетесь построить 5 баров шириной .3, что превышает 1 единицу, следовательно, перекрывается.Уменьшите ширину до 0,2 для 5 баров.

width = 0.20         # the width of the bars

Вывод:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...