生成线条的热图图像

时间:2013-12-06 01:27:12

标签: python numpy heatmap scivis

我有这个图,其中包含由2个点定义的许多行。现在我想生成一个热图。结果应该类似于http://docs.ggplot2.org/current/geom_raster.html,除了每个单元格的热量被定义为与它相交的线数。结果应该是PIL的numpy数组。

graph with a lot of line segments

到目前为止我考虑过两件事,一件是迭代所有的线和网格,用this计算两者之间的距离,如果距离小于两个单元之间的距离,那就在那里。这是可能的,因为在实际数据中,线条具有一定的最小长度。

将每条线与每个网格单元相交并检查它是否在那里的另一种可能性。但这听起来很昂贵,但更准确。沿着线检查每条水平/垂直线以确定交叉点并检查它是哪个单元格。

Data sample。这是一个Array[Array[Int, Int]]。每对子阵列都指定一条线。

1 个答案:

答案 0 :(得分:1)

这听起来像你想要的:

How to test if a line segment intersects an axis-aligned rectange in 2D?

特别是最佳答案:https://stackoverflow.com/a/293052/66349

总结:

  • 检查线的两个点是否都在框的一侧(左侧,右侧,上方,下方) - 如果是,则没有交叉点
  • 否则,检查盒子的所有四个角是否在线的同一侧 - 如果不是,那么你有一个交叉点

一般来说,迭代线段并仅测试热图框的子集(可能是落入由线的两个点定义的较大框中的框)可能会更快;而不是迭代热图框并检查每条线的交叉点。