Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用标签获取matplotlib中xtick的位置/索引?(Python 3.6 | Matplotlib 2.0)_Python_Matplotlib_Indexing_Plot_Label - Fatal编程技术网

如何使用标签获取matplotlib中xtick的位置/索引?(Python 3.6 | Matplotlib 2.0)

如何使用标签获取matplotlib中xtick的位置/索引?(Python 3.6 | Matplotlib 2.0),python,matplotlib,indexing,plot,label,Python,Matplotlib,Indexing,Plot,Label,我试图获取特定xtick标签(不包括标记大小)的绘图专用区域。例如,label='b'似乎具有(0.5-1.5)b/c的区域。勾号位置是1,我相信默认的勾号宽度是1 我的问题是,如果我有一个query\u标签(例如query\u label=“c”),我如何获得query\u标签沿x轴的勾号位置,以及勾号宽度,而不假设每个勾号位置之间的宽度为1(例如[-1,0,1,2,)? 基本上,我想以以下方式结束: query_position=(1.5,2.5)#对于query_label=“c” 简单示

我试图获取特定
xtick
标签(不包括标记大小)的绘图专用区域。例如,
label='b'
似乎具有
(0.5-1.5)
b/c的区域。勾号位置是
1
,我相信默认的勾号宽度是
1

我的问题是,如果我有一个
query\u标签
(例如
query\u label=“c”
),我如何获得
query\u标签沿
x轴的
勾号位置
,以及
勾号宽度
,而不假设每个
勾号位置之间的宽度为1(例如
[-1,0,1,2,
)?

基本上,我想以以下方式结束:

query_position=(1.5,2.5)#对于query_label=“c”

简单示例的代码:

# Data
x = np.arange(5)
y = np.sqrt(x)
s = [1000]*5
c = ["aquamarine"]*5

# Plot
with plt.style.context("dark_background"):
    fig, ax = plt.subplots()
    ax.scatter(x, y, c=c, s=s, edgecolors="ivory", linewidth=2.5)
    ax.set_xticklabels(list("-abcde"), fontsize=20)
    ax.grid(False, which="major")

# Trying to get the xtick info
ax.get_xticks()
# array([-1.,  0.,  1.,  2.,  3.,  4.,  5.])

# How to get position and tick width? 
query_label= "c"
def get_position(query_label, ax):
    # stuff to get tick index
    # stuff to get tick width
    tick_padding = tick_width/2
    return (tick_index - tick_padding, tick_index + tick_padding)

# Results
query_position = get_position(query_label, ax)
query_position
# (1.5, 2.5)
也许在
matplotlib
中有一种方法可以分析
pd.Index(list(“-abcde”)。获取位置(“c”)


我不确定是否存在方法,但您可以使用
ax.getxticklabels()
生成字典,它将返回
xticklabel
对象的列表

x_labels = list(ax.get_xticklabels())
这些对象包含标签及其位置,您可以使用列表理解将其提取到字典中

x_label_dict = dict([(x.get_text(), x.get_position()[0]) for x in x_labels])
如果要排除某些记号标签,可以使用if条件,如下所示:

x_label_dict = dict([(x.get_text(), x.get_position()[0]) for x in x_labels if x.get_text() not in ['', '-']])
现在,可以使用相邻的查询标签确定每个记号标签的宽度,如下所示:

tick_width = x_label_dict['b'] - x_label_dict['a'] 
因此,
'c'
的查询位置变为

x_label_dict['c'] - tick_width/2, x_label_dict['c'] + tick_width/2
确定勾号宽度后,您可以更新字典,以便直接使用它,而无需函数定义

x_query_position = {key: (x_label_dict[key]- tick_width/2, x_label_dict[key] + tick_width/2) for key in x_label_dict.keys()}

我猜
'c'
的查询位置是
x\u query\u position['c']

注意:这仅在已经渲染绘图的情况下有效。此外,此代码似乎假定您只使用标签的x坐标,因此我怀疑您应该在第二个代码块中使用
x.get_position()[0]
,如下所示。