Сюжет Matplotlib не отражает упорядоченный набор данных - PullRequest
0 голосов
/ 05 октября 2018

проблема в следующем заключается в том, что в небольшом образце, независимо от того, какую метку я использовал, matplotlib наносил на график в порядке х / у массивов, которые я дал.Это просто не применяется, когда набор данных увеличивается.

data = {a:1, b:2, c:3}

def plot_bar_new(data, reverse):
    data = sorted(data.items(), key=lambda x:x[1], reverse=reverse)
    plotx, ploty = zip(*data)  # replaces the for-loop from plot_bar()
    locs = range(0, len(ploty))
    plt.figure()
    plt.bar(locs, ploty)
    plt.xticks(locs, plotx)
    plt.show()
plot_bar_new({1: 1, 2: 2, 3: 3}, False)
  1. Я хочу понять, почему matplotlib не отображает данные в порядке, указанном пользователем
  2. Я хочу построить данные, которые я передаю, в порядке убывания значений,
  3. и ключи, напечатанные как есть на ярлыке x
  4. Но данные огромны, и я могу видеть только каждый 300-й ярлык x.

1 Ответ

0 голосов
/ 05 октября 2018

Проблема в том, что вы принимаете plotx как список меток, которые будут нанесены на ось X в указанном порядке.Фактически, plotx - это список абсолютных местоположений на оси X, на которых будут отображаться соответствующие значения Y.Так как ось X по умолчанию поднимается слева направо, порядок, в котором вы перечисляете местоположения в plotx, не имеет значения.

Рассмотрим следующую функцию печати, которая позволяет сортировать plotx в порядке убывания или возрастания поустановка параметра reverse на True или False:

def plot_bar(data, reverse):
    data = sorted(data.items(), key=lambda x:x[1], reverse=reverse)
    plotx =[]
    ploty =[]
    for item in data:
        plotx.append(item[0])
        ploty.append(item[1])
    plt.figure()
    plt.bar(plotx, ploty)
    plt.show()

График с plotx в порядке возрастания:

plot_bar({1: 1, 2: 2, 3: 3}, False)

enter image description here

Теперь строим график с plotx в порядке убывания:

plot_bar({1: 1, 2: 2, 3: 3}, True)

enter image description here

Как видите, порядок расположенияв plotx не имеет значения.

Чтобы отобразить значения Y в том порядке, в котором они перечислены в ploty, вы можете создать новый список местоположений locs для использования в plt.bar() и использоватьplotx как метки для этих мест:

def plot_bar_new(data, reverse):
    data = sorted(data.items(), key=lambda x:x[1], reverse=reverse)
    plotx, ploty = zip(*data)  # replaces the for-loop from plot_bar()
    locs = range(0, len(ploty))
    plt.figure()
    plt.bar(locs, ploty)
    plt.xticks(locs, plotx)
    plt.show()
plot_bar_new({1: 1, 2: 2, 3: 3}, False)

enter image description here

plot_bar_new({1: 1, 2: 2, 3: 3}, True)

enter image description here

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