2017-04-24 2 views
1

私は特定のxtickラベル(マーカーのサイズを含まない)のプロット専用の領域を取得しようとしています。たとえば、label='b'(0.5 - 1.5) b/cのテリトリーを持っているようですが、ティックポジションは1です。デフォルトのティック幅は1と考えています。ラベル付きmatplotlibのxtickの位置/インデックスを取得する方法は? (Python 3.6 | Matplotlib 2.0)

私の質問は、私が持っている場合query_label(例えばquery_label= "c")私は(例えば[-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 analagousで方法はありますか?

enter image description here

答えて

1

私はそこにする方法は存在しますが、あなたが生成することができますが、あなたはxticklabelオブジェクトのリストを返しますax.get_xticklabels()を使用して辞書を生成することができるかどうかわかりません。

x_labels = list(ax.get_xticklabels()) 

これらのオブジェクトには、ラベルとその位置の両方が含まれています。リスト内包を使用して、そのラベルを辞書に抽出できます。

今、各目盛りラベルの幅は、隣接するクエリのラベルを使用して決定することができる
x_label_dict = dict([(x.get_text(), x.get_position()[0]) for x in x_labels if x.get_text() not in ['', '-']]) 

あなたがようであれば条件を使用することができ目盛りラベルの一部を除外したい場合には

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

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

を必要とせずにそれを使用できるように、辞書を更新することができtick_widthを決定した後、私は'c'のクエリ位置がx_query_position['c']

だと思います
関連する問題