gpt4 book ai didi

Python - 将几个刻度放在一个地方

转载 作者:太空宇宙 更新时间:2023-11-04 00:37:14 24 4
gpt4 key购买 nike

我想在一个地方有多个刻度,如下图所示。

enter image description here

即我希望在轴上的特定位置周围有两个或三个或更多,而不是一个小的垂直线段。
我怎样才能做到这一点?

最佳答案

您可以使用次刻度来产生额外的刻度。可以使用 FixedLocator 指定它们的位置.然后,您可以通过获取相应的 rcParams 来调整它们的样式以匹配主要刻度之一。 .

import matplotlib.pyplot as plt
import matplotlib.ticker

plt.plot([0,5],[1,1])
locs= [3.95,4.05] + [4.9,4.95,5.05,5.1]

plt.gca().xaxis.set_minor_locator(matplotlib.ticker.FixedLocator( locs ))
plt.gca().tick_params('x', length=plt.rcParams["xtick.major.size"],
width=plt.rcParams["xtick.major.width"], which='minor')

plt.show()

enter image description here


上面的问题是它依赖于比例,即对于不同的比例,例如从 4.8 到 5.2,滴答声会比预期的更远。
为了克服这个问题,我们可以将 FixedLocator 子类化,并让它返回与所需位置偏移一些像素单位的位置,而不是数据坐标。

import matplotlib.pyplot as plt
import matplotlib.ticker
import matplotlib.transforms
import numpy as np

class MultiTicks(matplotlib.ticker.FixedLocator):
def __init__(self, locs, nticks, space=3, ax=None):
"""
@locs: list of locations where multiple ticks should be shown
@nticks: list of number of ticks per location specified in locs
@space: space between ticks in pixels
"""
if not ax:
self.ax = plt.gca()
else:
self.ax = ax
self.locs = np.asarray(locs)
self.nticks = np.asarray(nticks).astype(int)
self.nbins = None
self.space = space

def tick_values(self, vmin, vmax):
t = self.ax.transData.transform
it = self.ax.transData.inverted().transform
pos = []
for i,l in enumerate(self.locs):
x = t((l,0))[0]
p = np.arange(0,self.nticks[i])//2+1
for k,j in enumerate(p):
f = (k%2)+((k+1)%2)*(-1)
pos.append( it(( x + f*j*self.space, 0))[0] )
return np.array(pos)


# test it:
plt.plot([0,5],[1,1])
plt.gca().xaxis.set_minor_locator(MultiTicks(locs=[4,5],nticks=[2,4]))
plt.gca().tick_params('x', length=plt.rcParams["xtick.major.size"],
width=plt.rcParams["xtick.major.width"], which='minor')

plt.show()

在自定义定位器 MultiTicks(locs=[4,5],nticks=[2,4]) 的初始化中,我们指定了一些附加刻度应该出现的位置(在 4和 5) 以及相应的刻度数(4 时 2 个刻度,5 时 4 个刻度)。我们还可以使用 space 参数指定这些刻度应彼此间隔的像素数。

enter image description here

关于Python - 将几个刻度放在一个地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43496721/

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