Построить одномерный массив массивов с переменным размером столбца в matplotlib - PullRequest
0 голосов
/ 01 ноября 2018

Учитывая, что у меня есть массивы x & y, я могу легко изобразить точки, например:

a = np.arange(10).reshape(5, 2)

plt.scatter(a.T[0], a.T[1])
plt.xlabel("Interval")
plt.ylabel("Value")
plt.show()

enter image description here

Но в настоящее время у меня есть список списков разного размера, например:

a = [
    [0, 1, 3],
    [4, 2],
    [1, 4, 7, 2],
    [2],
    [3, 4, 5, 6]
]

plt.scatter(a, list(range(len(a))))
plt.xlabel("Interval")
plt.ylabel("Value")
plt.show()

Но это приводит к ошибке: установка элемента массива с последовательностью, которая наверняка будет работать, когда размеры не фиксированы, а размеры не равны ((измерения) х! = (Измерения) у), но я глядя на получение чего-то такого:

enter image description here

Как я могу получить такой сюжет?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Вы были почти рядом. Вы можете просто использовать single for loop для построения отдельных списков следующим образом. lst будет один подсписок за раз и [i]*len(lst) сгенерирует количество точек х-данных для этого подсписка.

for i, lst in enumerate(a):
    plt.scatter([i]*len(lst), lst,  color='r')
plt.xlabel("Interval")
plt.ylabel("Value")

enter image description here

0 голосов
/ 01 ноября 2018

Вы можете создать данные для построения графика вручную:

import numpy as np
import matplotlib.pyplot as plt

a = np.array([
    [0, 1, 3],
    [4, 2],
    [1, 4, 7, 2],
    [2],
    [3, 4, 5, 6]

])

data = np.array([[x, y] for x, ys in enumerate(a) for y in ys])

plt.scatter(data[:, 0], data[:, 1], c='red')
plt.xlabel("Interval")
plt.ylabel("Value")
plt.show()

Выход enter image description here

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