python - 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)
解决方案
我认为您不想在这里将任何东西转换为像素空间。一旦您更改限制或放大绘图,这将导致错误的坐标。
但是,您需要先将日期转换为数字,然后再将它们设置为偏移量。
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()
推荐阅读
- html - 带有 img-thumbnail 的下拉项目超出其容器
- php - Composer 显示 2 个兼容包之间的冲突(原始)
- c - 如何将 C-printf 字符串格式化为等于 bash-printf 字符串
- go - 赛尔戈。如何使用自定义对象和时间戳比较
- javascript - 类列表切换多个元素
- r - 如何停止在不同计算机上选择相同的“随机”行?
- r - 在列内删除和求和
- javascript - 如何在 es6 中的 javascript 中循环遍历嵌套对象的值
- git - 在 Azure DevOps 中克隆私有 BitBucket 存储库
- javascript - 使用 Jquery 将多个函数分配给同一个类/元素?