我正在尝试使用markevery
选项获取线条标记的数据坐标。我对下面代码的尝试表明,检索到的(x,y)数据包含所有原始数据值,并忽略该参数:
import numpy as np
from matplotlib import pyplot as plt
line, = plt.plot(np.arange(100)**2, marker='o', markevery=(0, 0.1))
x, y = line.get_data()
assert len(x) != 100
请注意,在这种情况下,markevery
参数 - 高级索引对数据的值不适用作为替代。
当然,我可以成功使用私有效用方法lines._mark_every_path()
来解决我所处理的问题。但是,还有更多,比方说,“正确”的方式吗?
答案 0 :(得分:0)
markevery
选项允许对一行上标记的数据点进行二次采样。标记与否的点仅在绘制线时确定。因此,没有行的属性将存储所示点的数据,因为它们可能一直在变化,具体取决于绘图的大小和限制。
解决方案确实是使用_mark_every_path
复制线条的绘制行为以访问标记点的坐标。
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import lines
line, = plt.plot(np.arange(100)**2, marker='o', markevery=(0, 0.1))
tpath, affine = line._get_transformed_path().get_transformed_points_and_affine()
p = lines._mark_every_path(line.get_markevery(),
tpath, affine, line.axes.transAxes)
print(len(p.vertices)) # prints 10
print(p.vertices) # print array of points, shape (10,2)
plt.show()