Matplotlib 플롯의 GUI에서 상자 영역 선택으로 요소 수를 계산하고 요소를 CSV 형식으로 클립 보드에 복사
13156 단어 python2.7파이썬matplotlib
하고 싶은 일
Matplotlib 플롯에서 GUI로 사각형 영역을 선택하고 선택한 영역 내에서 플롯 된 요소 수를 출력하고 싶습니다!
또한 요소를 CSV 형식으로 클립 보드에 복사하고 싶습니다.
소스 코드
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from matplotlib.widgets import RectangleSelector
import pyperclip
class RectSelect(object):
def __init__(self, x, y, ax=None):
self.ax = ax or plt.gca()
self.x = x
self.y = y
self.rect = Rectangle((0,0), 0, 0, color='orange', alpha=0.5)
self.ax.add_patch(self.rect)
self.blc = np.zeros(2)
self.trc = np.zeros(2)
def selector(event):
if event.key in ['Q', 'q'] and selector.RS.active:
selector.RS.set_active(False)
if event.key in ['A', 'a'] and not selector.RS.active:
selector.RS.set_active(True)
selector.RS = RectangleSelector(self.ax, self.callback)
self.ax.figure.canvas.mpl_connect('key_press_event', selector)
self.ax.figure.canvas.mpl_connect('button_release_event', self.release)
def callback(self, eclick, erelease):
def _check(a, b):
if (a >= eclick.xdata and a <= erelease.xdata) and (b >= eclick.ydata and b <= erelease.ydata):
return True
else:
return False
count = 0
copy_text = ""
for x_i, y_j in zip(self.x, self.y):
if _check(x_i, y_j):
count += 1
copy_text += "{0},{1}\r\n".format(x_i, y_j)
pyperclip.copy(copy_text)
print count, "num"
def release(self, event):
self.rect.set_width(self.trc[0] - self.blc[0])
self.rect.set_height(self.trc[1] - self.blc[1])
self.rect.set_xy(self.blc)
self.ax.figure.canvas.draw()
x = np.random.random(20) * 10
y = np.random.random(20) * 10
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, '.')
region = RectSelect(x, y)
plt.show()
결과
적절하게 플롯하고 마우스로 영역을 선택합니다.
그러면 이런 느낌으로 출력된다. 예상대로 분홍색 사각형 영역의 점 수를 계산할 수있었습니다 (· ω ·) v
추가
사각형 영역을 선택한 후 선택한 점의 좌표를 CSV 형식으로 클립보드에 복사합니다.
참고 사이트
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from matplotlib.widgets import RectangleSelector
import pyperclip
class RectSelect(object):
def __init__(self, x, y, ax=None):
self.ax = ax or plt.gca()
self.x = x
self.y = y
self.rect = Rectangle((0,0), 0, 0, color='orange', alpha=0.5)
self.ax.add_patch(self.rect)
self.blc = np.zeros(2)
self.trc = np.zeros(2)
def selector(event):
if event.key in ['Q', 'q'] and selector.RS.active:
selector.RS.set_active(False)
if event.key in ['A', 'a'] and not selector.RS.active:
selector.RS.set_active(True)
selector.RS = RectangleSelector(self.ax, self.callback)
self.ax.figure.canvas.mpl_connect('key_press_event', selector)
self.ax.figure.canvas.mpl_connect('button_release_event', self.release)
def callback(self, eclick, erelease):
def _check(a, b):
if (a >= eclick.xdata and a <= erelease.xdata) and (b >= eclick.ydata and b <= erelease.ydata):
return True
else:
return False
count = 0
copy_text = ""
for x_i, y_j in zip(self.x, self.y):
if _check(x_i, y_j):
count += 1
copy_text += "{0},{1}\r\n".format(x_i, y_j)
pyperclip.copy(copy_text)
print count, "num"
def release(self, event):
self.rect.set_width(self.trc[0] - self.blc[0])
self.rect.set_height(self.trc[1] - self.blc[1])
self.rect.set_xy(self.blc)
self.ax.figure.canvas.draw()
x = np.random.random(20) * 10
y = np.random.random(20) * 10
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, '.')
region = RectSelect(x, y)
plt.show()
결과
적절하게 플롯하고 마우스로 영역을 선택합니다.
그러면 이런 느낌으로 출력된다. 예상대로 분홍색 사각형 영역의 점 수를 계산할 수있었습니다 (· ω ·) v
추가
사각형 영역을 선택한 후 선택한 점의 좌표를 CSV 형식으로 클립보드에 복사합니다.
참고 사이트
Reference
이 문제에 관하여(Matplotlib 플롯의 GUI에서 상자 영역 선택으로 요소 수를 계산하고 요소를 CSV 형식으로 클립 보드에 복사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/code_monkey/items/002c8f3469be88dedabf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)