如何从用markevery参数绘制的直线中提取标记数据点?

2024-09-27 07:34:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过^{}选项来获得线标记的数据坐标。我在下面代码中的尝试显示,检索到的(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参数的值在这种情况下对数据进行高级索引是不适用的。你知道吗

当然,我可以成功地使用private-utility方法^{}来解决我处理的问题。但是,还有什么,比如说,“正确”的方法吗?你知道吗


Tags: 数据方法代码标记importnumpy参数原始数据
1条回答
网友
1楼 · 发布于 2024-09-27 07:34:54

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

相关问题 更多 >

    热门问题