如何绘制相对距离的水平网格线?

时间:2019-01-22 19:32:29

标签: python matplotlib

我需要绘制水平网格线,其距离前一行位置的距离为1%。
例如:
-----(a * 1.01)* 1.01
----- * 1.01
-----

enter image description here

2 个答案:

答案 0 :(得分:2)

我不确定您是否真的想要1%的间距,因为那样会简单地绘制大量密集的线,最终您会看到很宽的水平线带。无论如何,这是一种方法。我使用10%的间距以获得更好的表示效果,但您可以将1.1替换为1.01

@OneToMany

enter image description here

答案 1 :(得分:0)

您可以编写自定义定位器,以将刻度设置为上一个刻度位置的1.01。这样的定位器可能看起来像

VueFormGenerator

然后,您可以使用次网格显示上述定位器所定位的网格线。

import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt
import matplotlib.ticker

class GeomLocator(matplotlib.ticker.IndexLocator):

    def __call__(self):
        if self.axis.axis_name =="x":
            vmin, vmax = self.axis.axes.get_xlim()
        elif self.axis.axis_name =="y":
            vmin, vmax = self.axis.axes.get_ylim()
        return self.tick_values(vmin, vmax)

    def tick_values(self, vmin, vmax):
        n = int(np.log(vmax/vmin)/np.log(self._base))
        ticks = np.ones(n+2)
        ticks[1:] = self._base
        ticks = vmin * np.cumprod(ticks)
        return ticks

enter image description here

这样做的好处是,您无需在代码中完全了解绘图的限制,而可以在网格始终保持最新状态的情况下自由平移或缩放绘图。