Это аналогично Python Scatter Plot с несколькими значениями Y для каждого X ;то есть у меня есть данные, которые:
data = [
[1, [15, 16, 17, 18, 19, 20]],
[2, [21, 22, 23, 24, 25, 26]],
[3, [27, 28, 29, 30, 31, 32]],
]
... поэтому первый столбец (0) является координатами x, а второй столбец (1) содержит массивы значений y, соответствующих одной координате x. И я хочу построить это как график рассеяния, и лучшее, что я мог сделать, это (код ниже):
То же, что и всвязанный пост, мне пришлось использовать три ax.scatter
графика, и поэтому у нас есть три цвета, по одному для каждого столбца.
Итак, мой вопрос:
- Могу ли я выдатьединственная команда
ax.scatter
для получения графика, подобного приведенному выше (но с одним цветом / маркером) из имеющихся у меня данных (вместо необходимости выполнения трех команд)? - В качестве альтернативы, можно ли как-то преобразовать данныеУ меня есть, поэтому я получаю график, подобный описанному выше (но с одним цветом / маркером), с помощью одной
ax.scatter
команды?
Вот код:
#!/usr/bin/env python3
import sys
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
print("versions: Python {} matplotlib {} numpy {}".format(sys.version.replace('\n', ''), matplotlib.__version__, np.version.version))
data = [
[1, [15, 16, 17, 18, 19, 20]],
[2, [21, 22, 23, 24, 25, 26]],
[3, [27, 28, 29, 30, 31, 32]],
]
ndata = np.asarray(data, dtype=object)
fig = plt.figure()
# Null formatter
ax = fig.add_subplot(1, 1, 1)
print()
print(ndata[1])
print(ndata[:,0].astype(float))
print(ndata[:,1])
datay_2D = np.stack(ndata[:,1], axis=0) # convert numpy array of lists to numpy 2D array
print()
print(datay_2D[:,0])
print(datay_2D[0])
print([ndata[:,0][0]]*len(datay_2D[0]))
ax.scatter([ndata[:,0][0]]*len(datay_2D[0]), datay_2D[0], marker="x")
ax.scatter([ndata[:,0][1]]*len(datay_2D[1]), datay_2D[1], marker="x")
ax.scatter([ndata[:,0][2]]*len(datay_2D[1]), datay_2D[2], marker="x")
plt.show()
Распечатка:
versions: Python 3.6.8 (default, Oct 7 2019, 12:59:55) [GCC 8.3.0] matplotlib 2.1.1 numpy 1.13.3
[2 list([21, 22, 23, 24, 25, 26])]
[ 1. 2. 3.]
[list([15, 16, 17, 18, 19, 20]) list([21, 22, 23, 24, 25, 26])
list([27, 28, 29, 30, 31, 32])]
[15 21 27]
[15 16 17 18 19 20]
[1, 1, 1, 1, 1, 1]