在Matplotlib中,我想对y轴使用FunctionFormatter来格式化刻度,使得在绘图底部附近的区域中不显示刻度。这是为了形成“y无数据”区域,沿着图的底部的条带,其中将绘制没有y值的数据。
在伪代码中,该函数将是这样的:
def CustomFormatter(self,y,i):
if y falls in the bottom 50 pixels' worth of height of this plot:
return ''
或
def CustomFormatter(self,y,i):
if y falls in the bottom 10% of the height of this plot in display coordinates:
return ''
我很确定我必须使用倒置的axes.transData.transform才能做到这一点,但我不确定该怎么做。
如果重要的话,我还会提到:我也会在这个格式化程序中有其他格式规则,处理 有y数据的部分情节。
答案 0 :(得分:1)
Formatter
与显示刻度无关,它仅控制刻度标签的格式。你需要的是修改Locator
,它定位显示的刻度位置。
有两种方法可以完成任务:
编写自己的Locator
类,继承自matplotlib.ticker.Locator
。不幸的是,缺乏关于它是如何工作的文档,所以我从来没有能够做到这一点;
尝试使用预定义的定位器来获得您想要的内容。例如,在这里,您可以从绘图中获取刻度位置,找到靠近底部的位置,并覆盖默认定位器,FixedLocator
仅包含您需要的刻度。
作为一个简单的例子:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as tkr
x = np.linspace(0,10,501)
y = x * np.sin(x)
ax = plt.subplot(111)
ax.plot(x,y)
ticks = ax.yaxis.get_ticklocs() # get tick locations in data coordinates
lims = ax.yaxis.get_view_interval() # get view limits
tickaxes = (ticks - lims[0]) / (lims[1] - lims[0]) # tick locations in axes coordinates
ticks = ticks[tickaxes > 0.5] # ticks in upper half of axes
ax.yaxis.set_major_locator(tkr.FixedLocator(ticks)) # override major locator
plt.show()
这会生成以下图表: