2017-04-24 4 views
1

특정 xtick 레이블 (마커 크기 제외)에 대한 플롯 전용 영역을 얻으려고합니다. 예를 들어 label='b'(0.5 - 1.5) b/c의 영역을 가지고있는 것 같습니다. 틱 위치는 1이고 기본 틱 너비는 1입니다.라벨이있는 matplotlib에서 xtick의 위치/인덱스를 얻는 방법은 무엇입니까? (파이썬 3.6 | Matplotlib 2.0)

질문은 I 가질 경우 query_label (예컨대 query_label= "c") I (예 [-1, 0, 1, 2, ...] 1)의 폭에 의해 분리 된 각 tick 위치를 가정하지 않고 x-axistick width 따라 query_labeltick position 얻을 수 있는가? 간단한 예를 들어

query_position = (1.5, 2.5) # for 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) 

어쩌면 pd.Index(list("-abcde")).get_loc("c")에와 똑같이 matplotlib있는 방법이 있습니까? 이 방법이 존재하지만 생성 할 수 있지만 xticklabel 개체의 목록을 반환합니다 ax.get_xticklabels()를 사용하여 사전을 생성 할 수있는 경우

enter image description here

답변

1

나는 확실하지 않다.

x_labels = list(ax.get_xticklabels()) 

이러한 개체에는 레이블과 위치가 모두 포함되어 있으므로 목록 이해를 사용하여 사전에 추출 할 수 있습니다. 경우

x_label_dict = dict([(x.get_text(), x.get_position()) for x in x_labels]) 

당신은 당신이 사용할 수있는 눈금 라벨의 일부를 제외하려는 경우 조건으로 : 이제

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 
된다

tick_width 직접

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_query_position['c']

추측 함수 정의를위한 필요없이 사용할 수 있도록 사전을 업데이트 할 수 있습니다를 결정한 후