Отображение значений и строк в matplotlib? - PullRequest
3 голосов
/ 19 августа 2011

Я пытаюсь создать график в matplotlib, где значения x являются целыми числами, а значения y - строками Можно ли вывести данные такого типа в matplotlib? Я изучил документацию и галерею для matplotlib и не смог найти примеров такого типа.

У меня есть много списков, связанных с переменной my_lists. Структура выглядит так:

mylists = [765340, 765371, 765310,'MA011',],
          [65310, 'MA015'],
          [765422, 765422, 24920205, 24920161, 'MA125'],
          [765422, 'MA105'], 
          [765371, 12345, 'MA004']

В каждом списке все элементы, кроме последнего, являются значениями x. Последний элемент в каждом списке - это строка, представляющая собой одно значение y. Как я могу построить это matplotlib? Вот моя попытка:

import matplotlib.pyplot as plt

for sub_list in my_lists:
    x_value = sub_list[:1]
    y_value = sub_list[-1]
    plt.plot(x_value, y_value, "ro")
    plt.show()

Приведенный выше код выдает мне эту ошибку:

ValueError: не удалось преобразовать строку в число с плавающей точкой: MA011

Как можно построить целые числа вместо строк?

1 Ответ

2 голосов
/ 19 августа 2011

Возможно, вы могли бы сделать что-то вроде этого, где вы даете каждой строке «y» уникальное значение индекса.Возможно, вам придется возиться с расстоянием для меня.То есть.я * 2 вместо меня, чтобы все выглядело хорошо.После этого вы устанавливаете метку для каждого из этих индексов на соответствующую строку.

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(9,7))
ax1 = fig.add_subplot(111)


mylists = [[765340, 765371, 765310,'MA011',], [65310, 'MA015'], 
           [765422, 765422, 24920205, 24920161, 'MA125'],
           [765422, 'MA105'],[765371, 12345, 'MA004']]

x = []
y = []
y_labels = []
y_ticks = []
for i,sub_list in enumerate(mylists):
    y_labels.append(sub_list[-1])
    y_ticks.append(i)
    for v in sub_list[:-1]:
        x.append(v)
        y.append(i)

ax1.set_yticks(y_ticks)
ax1.set_yticklabels(y_labels)
ax1.plot(x, y, "ro")
plt.show()

РЕДАКТИРОВАТЬ:

Извините, я забыл включить вызов enuemrate в цикл for.Это в основном устанавливает значение i в индекс текущего под_списка.Затем вы используете индекс вместо строкового значения в качестве значения y.После этого вы заменяете метку для этих значений y фактическим значением строки.

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