从数据中勾选位置

时间:2019-08-16 03:15:42

标签: python python-3.x matplotlib

我想获取一组数据的刻度位置(主要和次要),例如通常传递给plot.plot([x], y)的数据进行绘制的位置。这样做的用途是通过利用不必全部绘制图形的事实来加快大数据集上某些计算量大的运算的速度,因为我仅对刻度线中的数据点以及

matplotlib.ticker中的类似乎很有希望,AutoLocatorAutoMinorLocator是常用的类,但是在AutoDateLocator等之间进行选择的逻辑将落在该函数上。更糟糕的是,TickHelper.create_dummy_axis()AutoMinorLocator无效,因为它需要正确的轴。我已经考虑过……绘制,获取刻度线然后清除它,但是在绘制过程中最有用的是一些用法,因此实际上并不影响绘制的东西将是理想的。 >

我设法创建了一个可行的解决方案,该解决方案主要是通过复制和粘贴AutoMinorLocation的相关部分而创建的,并获得了视图的限制,但是该过程很棘手(很不值得研究)只需要仅对我想要的子集有用的数字。有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

如果我正确理解,您希望获得在给定视图间隔的轴上将产生的主要和次要刻度位置。

from matplotlib.ticker import AutoLocator, AutoMinorLocator

v = 3,9

loc = AutoLocator()
loc.create_dummy_axis()
loc.axis.get_scale = lambda: "linear"
loc.set_view_interval(*v)
loc2 = AutoMinorLocator()
loc2.axis = loc.axis
loc.axis.get_majorticklocs = loc


print(loc())
print(loc2())

此打印

[3. 4. 5. 6. 7. 8. 9.]
[3.2 3.4 3.6 3.8 4.  4.2 4.4 4.6 4.8 5.  5.2 5.4 5.6 5.8 6.  6.2 6.4 6.6
 6.8 7.  7.2 7.4 7.6 7.8 8.  8.2 8.4 8.6 8.8]

第一个数组为主要刻度,第二个为次要刻度位置。

另一种方法是实际创建一个轴并在没有任何数据且不显示任何地方的情况下使用它。

from matplotlib.axes import Axes
from matplotlib.figure import Figure

v = 3,9

ax = Axes(Figure(), [0,0,1,1])
ax.set_xlim(*v)
ax.minorticks_on()

print(ax.xaxis.get_majorticklocs())
print(ax.xaxis.get_minorticklocs())

打印:

[3. 4. 5. 6. 7. 8. 9.]
[3.2, 3.4, 3.6, 3.8, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4, 5.6000000000000005, 5.800000000000001, 6.2, 6.4, 6.6000000000000005, 6.800000000000001, 7.2, 7.4, 7.600000000
0000005, 7.800000000000001, 8.2, 8.4, 8.600000000000001, 8.8]

请注意与上面的区别:这里主要位置的次要位置是从数组中切除的。