2017-04-12 17 views
2

Seabornの棒グラフでは、矢印で列に注釈を付ける必要があります。私は、これはちょっと肥え見えるかもしれない方法を見ながら、今、私は本当にその矢印のようにに両方matplotlibで開いてスケーリングする矢印の頭を取得する方法

  1. オープンヘッド(すなわち、ない頭など閉じた三角形が、二つのオープンラインを持っているでしょう図形のサイズを変更すると
  2. 目盛りとなります。

私は矢印(arrowannotateメソッド)を追加することの2つのmatplotlibのの方法を発見したが、それぞれがこれらの特徴のうちの1つ欠けているようです。

import seaborn as sns 

sns.plt.subplot(121) 
ax = sns.barplot(("x", "y", "z"), (1, 4, 7)) 
# head is not open 
ax.arrow(0, 5, 0., -3.5, lw=1, fill=False, 
     head_length=.5, head_width=.2, 
     length_includes_head=True) 

sns.plt.subplot(122) 
ax = sns.barplot(("x", "y", "z"), (1, 4, 7)) 
# head does not scale with figure 
ax.annotate("", xytext=(0, 5), xy=(0, 1.5), 
      arrowprops=dict(arrowstyle="->, head_length = 2, head_width = .5", lw=1)) 

sns.plt.show() 

左矢印の頭が(醜い)閉じているが、私はフィギュア(ヘッドサイズがデータ単位であるので、私は仮定)をサイズ変更するときには、細かいスケール:このコードは、側で両サイドをプロットします。右矢印の頭は素敵で開かれていますが、図のサイズに関係なく常に同じピクセルサイズを保持します。だから、数字が小さい場合には、右矢印ヘッドが比較的大きいになります

Right arrow head too big

そして、私は数字を大きくすると、右矢印ヘッドはなり - 比較的 - 小さく、左矢印ヘッドがうまくスケールながら:

Right arrow head too small

ので、オープンスケーリング矢印の頭を持ってする方法はありますか?

答えて

2

キーは、overhang引数を使用して1に近い値に設定することです。

import matplotlib.pyplot as plt 

fig, ax = plt.subplots(figsize=(4,4)) 

v = [-0.2, 0, .2, .4, .6, .8, 1] 
for i, overhang in enumerate(v): 
    ax.arrow(.1,overhang,.6,0, width=0.001, color="k", 
      head_width=0.1, head_length=0.15, overhang=overhang) 

ax.set_yticks(v) 
ax.set_xticks([]) 
ax.set_ylabel("overhang") 
ax.set_ylim(-0.3,1.1) 
plt.tight_layout() 
plt.show() 

enter image description here

関連する問題