2017-11-25 12 views
1

私は、多くのパッチを含む既存のプロット(軸)を持っています。そして、私は既存の軸にいくつかのボタンを追加したいと思います。次のコードを記述すると、軸全体がボタンとして表示されます。つまり、クリックが軸上のどこでも検出されます。 matplotlibので与えexample既存の軸を使用しますが、新しい軸を使用していない(?)軸のボタン位置決め(matplotlib)

# Create axes 
axprev = plt.axes([0.7, 0.05, 0.1, 0.075]) 
axnext = plt.axes([0.81, 0.05, 0.1, 0.075]) 

# Make Buttons of those axes. 
bnext = Button(axnext, 'Next') 
bnext.on_clicked(callback.next) 
bprev = Button(axprev, 'Previous') 
bprev.on_clicked(callback.prev) 

# ax is the reference to axes containing many patches 
bSend = Button(ax, 'send') 
bSend.on_clicked(fu) 

私は既存の軸上のボタンを配置することができる方法はあります

答えて

2

matplotlib.widgets.Buttonは、最初の引数で指定する必要がある独自の軸に沿って存在します。ですから、どこかの軸を作成する必要があります。

あなたが達成しようとしている内容に応じて、あなたは、単に軸内部の座標を選択することができ、ここで

button_ax = plt.axes([0.4, 0.5, 0.2, 0.075]) #posx, posy, width, height 
Button(button_ax, 'Click me') 

座標は、図の幅と高さの単位です。したがって、ボタンは図形の幅の40%、Figureの高さの50%で作成され、幅20%、高さ7.5%です。

enter image description here

別の方法としては、サブプロットに比べてボタン軸を置くことInsetPositionを使用して軸。ここ

import matplotlib.pyplot as plt 
from matplotlib.widgets import Button 
from mpl_toolkits.axes_grid1.inset_locator import InsetPosition 

fig, ax= plt.subplots() 

button_ax = plt.axes([0, 0, 1, 1]) 
ip = InsetPosition(ax, [0.4, 0.5, 0.2, 0.1]) #posx, posy, width, height 
button_ax.set_axes_locator(ip) 
Button(button_ax, 'Click me') 

plt.show() 

、ボタン軸40%に位置している幅と高さの50%、軸の20%が長い幅、及び8%heigh。

enter image description here

+0

このような精巧な答えをありがとう!私は**既存の軸**にボタンを追加する方法があるかもしれないと思ったので、私は "1軸/ボタン"の方法で行くつもりはありません。ありがとう。 – vvy

+0

ボタン**が**軸のようにもっと考えてみてください。プロットする軸は1つあり、**ボタンは**です。つまり、既存の軸をボタンに変えることです。 – ImportanceOfBeingErnest

+0

そして2回目の解析で、 'InsetPosition'を使用したことがわかります。私はそれが好きです。ありがとう。 – vvy