Matplotlib transData.transform, ValueError: объект слишком глубокий для нужного массива применительно к дате - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь обновить точечный график с помощью set_offsets ().Моя ось х определяется датой.Я считаю, что мне нужно использовать ax.transData.transform (), чтобы получить значения смещения.Кажется, это работает нормально для чисел с плавающей точкой, но при использовании даты я получаю ошибку ValueError: объект слишком глубокий для нужного массива.

from datetime import date

import matplotlib.pyplot as plt
import numpy as np


x = [date(2010,5,14), date(2013,2,3), date(2014,10,9)]
y = [0.3, 0.5, 0.7]

fig, ax = plt.subplots(1, 1)
ax.set_xlim(date(2010, 1, 1), date(2015, 1, 1))
ax.set_ylim(0, 1)
scatter = plt.scatter(x, y)

offsets = scatter.get_offsets()
new_offsets = np.array(ax.transData.transform([[date(2011,3,4), .6],[date(2012,3,4),.7]]))
new_offsets = np.append(offsets, new_offset, axis=0)

scatter.set_offsets(new_offsets)

1 Ответ

0 голосов
/ 22 октября 2018

Не думаю, что вы хотите что-то преобразовать в пиксельное пространство.Это приведет к неправильным координатам, если вы измените пределы или увеличите масштаб графика.

Однако вам необходимо преобразовать даты в числа, прежде чем устанавливать их как смещения.

from datetime import date

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np


x = [date(2010,5,14), date(2013,2,3), date(2014,10,9)]
y = [0.3, 0.5, 0.7]

fig, ax = plt.subplots(1, 1)
ax.set_xlim(date(2010, 1, 1), date(2015, 1, 1))
ax.set_ylim(0, 1)
scatter = plt.scatter(x, y)

offsets = scatter.get_offsets()
new_offsets = np.array([[mdates.date2num(date(2011,3,4)), .6],[mdates.date2num(date(2012,3,4)),.7]])
new_offsets = np.append(offsets, new_offsets, axis=0)

scatter.set_offsets(new_offsets)

plt.show()

enter image description here

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