pyplot: график рассеяния с несколькими значениями Y и категориальными значениями X - PullRequest
0 голосов
/ 19 декабря 2018

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

Я уже пробовал несколько подходов.

Я сэкономлю полный код, но вот пример того, как выглядят данные:

XVals = ['10-Dec-18', '11-Dec-18']
YVals = [[0.88, 0.78, 0.92, 0.98, 0.91],[0.88, 0.78, 0.92, 0.98]]

Поскольку pyplot хочет, чтобы x и y имели одинаковое измерение, я попробовал следующее предложение

for xe, ye in zip(XVals, YVals):
   plt.scatter([xe] * len(ye), ye)

Это дает мне ошибку значения, так как мои xvals являются строками.

ValueError: could not convert string to float: '10-Dec-18'

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

fig, ax = plt.subplots()
ax.scatter(XVals, YVals)
plt.show()

Это дает мне очевидную ошибку:

ValueError: x and y must be the same size

Я не смог найти ни одного примера подобного графика (несколько значений Y с категориальными значениями X).Любая помощь будет оценена!

1 Ответ

0 голосов
/ 19 декабря 2018

Один из вариантов - создание сплющенных списков для данных.Первый список, X, будет содержать день каждой точки данных.Каждый день повторяется n раз, где n - количество точек данных за этот день.Второй список Y - это просто упрощенная версия YVals.

import matplotlib.pyplot as plt

XVals = ['10-Dec-18', '11-Dec-18']
YVals = [[0.88, 0.78, 0.92, 0.98, 0.91],[0.88, 0.78, 0.92, 0.98]]

X = [XVals[i] for i, data in enumerate(YVals) for j in range(len(data))]
Y = [val for data in YVals for val in data]

plt.scatter(X, Y)
plt.show()

enter image description here

...