【问题标题】:Matplotlib transData.transform, ValueError: object too deep for desired array when applied to dateMatplotlib transData.transform,ValueError:对象太深,无法应用到日期时所需的数组
【发布时间】:2019-03-26 19:32:21
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

    标签: python python-3.x matplotlib


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-01-02
      • 2019-04-15
      • 2017-01-21
      • 2012-10-28
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 2017-01-07
      相关资源
      最近更新 更多