gpt4 book ai didi

python - Matplotlib:使用显示坐标的自定义轴格式化程序

转载 作者:太空宇宙 更新时间:2023-11-03 19:25:20 46 4
gpt4 key购买 nike

在 Matplotlib 中,我想使用 y 轴的 FunctionFormatter 来格式化刻度,以便在绘图底部附近的区域中不显示刻度。这是为了创建一个“y 无数据”区域,即沿着图底部的一 strip ,将在其中绘制没有 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 数据的部分。

最佳答案

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

结果如下图:enter image description here

关于python - Matplotlib:使用显示坐标的自定义轴格式化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8332698/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com