Matplotlib упорядочивает данные по списку строк, чтобы привести метки в порядок (на топоре, а не на плите) - PullRequest
1 голос
/ 09 марта 2020

Мое использование требует, чтобы функция AX не была PLT (большинство ответов, которые я нашел, были сосредоточены на PLT, который НЕ имеет те же вызовы метода)

То, что я ищу, - это возможность организовать значения x ... A) по порядку A, B, C, D, E, FB) для отображения A и C, хотя у них нет связанных с ним точек данных

Я уверен, что это что-то простое, что мне не хватает ... Вот тестовый пример этого

import matplotlib.pyplot as plt

#desired x axis labels    
x_label_order = ["A","B","C","D","E","F"]

#data to be plotted
x=["B","E","D","F"]
y=[1,2,3,4]

#creates graph    
fig, ax = plt.subplots (1,1)
ax.scatter(x,y)

#assuming this is where changes need to be made?
ax.set_xticks(x_label_order)
ax.set_xticklabels(x_label_order)


plt.show()

1 Ответ

0 голосов
/ 09 марта 2020

Добро пожаловать в переполнение стека.

Для диаграммы рассеяния обычно значения x и y являются числовыми. Но matplotlib достаточно умен (или не достаточно) для автоматического преобразования строковых меток в бегущие числа.

Если вы хотите сохранить последовательность при построении графика, вам нужно преобразовать x в соответствующий ей индекс сначала местоположение:

x_label_order = ["A","B","C","D","E","F"]
x = ["B","E","D","F"]
x = [x_label_order.index(group) for group in x]

Затем, после построения графика, установите xticks в числовом местоположении и передайте метки ему:

ax.set_xticks(list(range(len(x_label_order))))
ax.set_xticklabels(x_label_order)

, и вы получите то, что вам нужно:

enter image description here

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