특정 영역에서 겹치는 사각형 목록 ((x0, y0, x1, y1) 좌표)이 있습니다. 나는 각각의 겹치는 영역의 색이 히트 맵과 같아야한다. 더 많은 직사각형이 겹치면 더 어두워 지거나 (더 가볍거나 더 빨갛다 - 상관 없다) 그 색은 겹쳐 져야한다. 지역.사각형에서 오버랩을 계산하고, 히트 맵으로 결과를 표시합니다.
이것은 팬더에서 쉽게 수행 할 수 있지만 너무 많은 O (N_ 픽셀)을 필요로합니다. 대신에 직사각형의 수에 따라 비용이 달라 지므로 수천 번 속도를 올릴 수있는 방법이 있어야합니다. (팬더)에
예 :
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
coords = [(1, 1, 4, 4), (2, 3, 6, 6), (2, 1, 3,2), (5, 3, 6, 7), (4, 3, 6, 7), (8, -5, 10, -2), (6, 0, 8, 3)]
heatmap = pd.DataFrame()
for box in coords:
area = pd.DataFrame(1, index=range(box[0], box[2]), columns=range(box[1], box[3]))
heatmap = heatmap.add(area, fill_value=0)
heatmap = heatmap.fillna(0).astype(int)
with sns.axes_style('white'):
plt.figure(figsize=(10,10))
ax = sns.heatmap(heatmap, cmap=plt.cm.jet, xticklabels=100, yticklabels=100)
ax.set(title="Heatmap of overlapping rectangles")
plt.show()
표시이 :
우스운, 나는 같은 고문과 함께 떠 올랐지 만 왼쪽에서 오른쪽으로 쓸어 버렸다. 내가 멈추게 한 이유는 내가 그걸 어떻게 그리는 지 몰랐기 때문이다. 거기에 어떤 조언이 있습니까? – Ludovica
Shamos & Preparata는 직사각형 문제를 논의합니다. http://www.springer.com/gp/book/9780387961316. 또한 내 부록을 읽으십시오. –