特定の領域で重複する四角形のリスト((x0、y0、x1、y1)としての座標)があります。私はそれらのオーバーラップで、余分なひねりを加えて描画したい:それぞれのオーバーラップ領域の色はヒートマップのようにする必要があります:より矩形がオーバーラップしている場合は、より暗く(またはより軽く、エリア。矩形の重なりを計算し、結果をヒートマップとしてプロットする
これはPandasで簡単に行うことができますが、あまりにも多くのO(N_pixels)がかかります。代わりに、長方形の数に応じてコストがかかり、その結果、何千ものスピードアップをする方法があるはずです。
例(パンダで):
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。私の補遺も読んでください。 –