データセット内のポイントのセットを手動で調整するには、ドラッグ可能なデータマーカーが必要です。 This答えて、他の人がこの問題をPatch.Circleを使って解決します。しかし、私はプロットをズームするときに同じサイズを維持するためにマーカーが必要です。サークルではサークルもズームします。私はマーカーを動かすより簡単な方法があるように見えるので、新しいズームごとにサークルのサイズを動的に変更する方法を見つけようとしていません。誰もこれを行う方法を知っていますか?Matplotlibのドラッグ可能なデータマーカー
答えて
以下、matplotlibとPyQt4のオブジェクト指向APIを使用する方法の1つを示すMWEを示します。データマーカーは、マウスの中央ボタンを使用してドラッグ可能です。ストラテジは、データをLine2Dアーティストにプロットし、続いてアーティストのデータを操作してプロットを更新することによってマーカーをドラッグすることです。 - 中央のマウスボタンをクリックすると、ピクセル単位でのマウスカーソルの座標がLine2Dの両方のアーティストの画素で変換XYデータと比較される
ステップ1:これは大まかに3つのステップに要約することができます。カーソルと最も近いマーカ間の線形距離が所定の値(マーカのサイズとして定義される)よりも小さい場合、そのデータマーカのインデックスはクラス属性draggable
に保存されます。それ以外の場合、draggable
はNone
に設定されます。
ステップ2 - マウスが移動されると、draggable is not None
場合、そのインデックスクラス属性draggable
に記憶されたマウスカーソルのものに設定されているデータのマーカの座標。
ステップ3 - マウスの中央ボタンを放すと、draggable
がNoneに戻されます。
注:必要に応じて、オブジェクト指向APIではなく、図を生成するためにpyplotインターフェイスを使用することもできます。あなたがパッチの場所は、データになりたい
import sys
from PyQt4 import QtGui
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
from matplotlib.backends.backend_qt4agg import FigureManagerQT
import numpy as np
class MyFigureCanvas(FigureCanvasQTAgg):
def __init__(self):
super(MyFigureCanvas, self).__init__(Figure())
# init class attributes:
self.background = None
self.draggable = None
self.msize = 6
# plot some data:
x = np.random.rand(25)
self.ax = self.figure.add_subplot(111)
self.markers, = self.ax.plot(x, marker='o', ms=self.msize)
# define event connections:
self.mpl_connect('motion_notify_event', self.on_motion)
self.mpl_connect('button_press_event', self.on_click)
self.mpl_connect('button_release_event', self.on_release)
def on_click(self, event):
if event.button == 2: # 2 is for middle mouse button
# get mouse cursor coordinates in pixels:
x = event.x
y = event.y
# get markers xy coordinate in pixels:
xydata = self.ax.transData.transform(self.markers.get_xydata())
xdata, ydata = xydata.T
# compute the linear distance between the markers and the cursor:
r = ((xdata - x)**2 + (ydata - y)**2)**0.5
if np.min(r) < self.msize:
# save figure background:
self.markers.set_visible(False)
self.draw()
self.background = self.copy_from_bbox(self.ax.bbox)
self.markers.set_visible(True)
self.ax.draw_artist(self.markers)
self.update()
# store index of draggable marker:
self.draggable = np.argmin(r)
else:
self.draggable = None
def on_motion(self, event):
if self.draggable is not None:
if event.xdata and event.ydata:
# get markers coordinate in data units:
xdata, ydata = self.markers.get_data()
# change the coordinate of the marker that is
# being dragged to the ones of the mouse cursor:
xdata[self.draggable] = event.xdata
ydata[self.draggable] = event.ydata
# update the data of the artist:
self.markers.set_xdata(xdata)
self.markers.set_ydata(ydata)
# update the plot:
self.restore_region(self.background)
self.ax.draw_artist(self.markers)
self.update()
def on_release(self, event):
self.draggable = None
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
canvas = MyFigureCanvas()
manager = FigureManagerQT(canvas, 1)
manager.show()
sys.exit(app.exec_())
これは素晴らしい作品です!ありがとう! – martinako
on_click()は、(on_motion()のように)データ座標で計算することに関して、ピクセル座標で計算することに利点があるのだろうかと思います。 on_click()のデータ座標を操作することは、データ座標をピクセル座標に変換する必要はありません。いずれにしても、教育目的のために、両方の用途を見るのが得意です:-) – martinako
@martinakoピクセル座標は、x軸とy軸のスケールとは無関係の直線距離を計算できます。そうでなければ、xyデータを変換する必要があります。なぜなら、両方の軸が同じ縮尺ではなく、ズームアウト時にも考慮に入れるということです。 –
- 1. matplotlibのドラッグ可能なマーカー
- 2. ドラッグ可能なドラッグ可能なJQuery UIのドラッグ可能な複数のドラッグとドロップの後に破損した
- 3. ドラッグ可能なNSButton
- 4. ドラッグ可能なフュージョンラインチャート
- 5. ドラッグ可能なポップアップ?
- 6. イベントピッキング機能を使用している間、matplotlibのドラッグ可能な凡例
- 7. SFMLのドラッグ可能なスプライト
- 8. jQueryドラッグ可能:ドラッグ可能なボックスがコンテナを越える - バグ?
- 9. ドラッグ可能なオブジェクトをドラッグ可能に変更する
- 10. ドラッグ可能、ドロップ可能、クローン
- 11. ドラッグ可能な要素内にドラッグ可能なものがありません
- 12. C++ドラッグ可能なボーダレスフォーム
- 13. Jquery:ドラッグ可能な感性
- 14. スイフト3ドラッグ可能なUIButton
- 15. jQuery UIドラッグ可能なスナップルーラー
- 16. ドラッグ可能な属性アウレリア
- 17. jQueryドラッグ可能なヘルパークローンイベント
- 18. ドラッグ可能なJavaScriptツリービュー
- 19. GWTドラッグ可能なCellTableセル
- 20. 、ドラッグ可能なドロップ可能とソート可能
- 21. Matplotlibでドラッグ可能な線が互いに選択されます
- 22. jQueryドラッグ可能でドロッブル可能な他のドラッグ可能なオントリックイベントを防止する
- 23. 枠なしのドラッグ可能なWPFウィンドウ
- 24. JQueryプログラム可能な位置にドラッグするためのドラッグ可能
- 25. javascript bingマップのドラッグ可能なクリック可能な押しピン
- 26. 複数のドロップ可能な異なる色でドラッグ可能
- 27. jQuery:複数のドラッグ可能なアイテムと削除可能なアイテム?
- 28. Drupal 7のようなソート可能/ドラッグ可能な項目
- 29. jQueryの1.7 UI 1.8、ドラッグ可能なドロップ可能とソート可能な共存
- 30. jQueryのドラッグ可能な位置の値
座標が、パッチのサイズは、Axesの座標であることを? – cphlewis