首页 > 解决方案 > Matplotlib transData.transform,ValueError:对象太深,无法应用到日期时所需的数组

问题描述

我正在尝试使用 set_offsets() 更新散点图。我的 x 轴由日期定义。我相信我需要使用 ax.transData.transform() 来获取偏移值。这似乎适用于浮点数,但是在使用日期时,我收到错误 ValueError: object too deep for desired array。

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)

标签: pythonpython-3.xmatplotlib

解决方案


我认为您不想在这里将任何东西转换为像素空间。一旦您更改限制或放大绘图,这将导致错误的坐标。

但是,您需要先将日期转换为数字,然后再将它们设置为偏移量。

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()

在此处输入图像描述


推荐阅读