2010-06-05 96 views
4

我在飞机上有一组密集的点。我想让它们着色,以便彼此靠近的点具有相同的颜色,而如果它们很远,则使用不同的颜色。为了简单起见,假设有5种不同的颜色供选择。原来我还没有丝毫的想法如何做到这一点..着色关闭点

我使用的Tkinter与Python,顺便

+0

我有点困惑。你有积分吗? “亲密”和“远离”并不是离散的。接近的东西逐渐变得很远。 – 2010-06-05 08:36:15

+0

至少有一些有趣的问题,而不是系列“如何使用工具X”。 – 2010-06-05 08:40:19

+0

你是对的,Noufal。我认为完全用词有点困难,但如果这些点均匀分布在一个圆圈内,将它简单地分成披萨片并赋予每片不同的颜色是有意义的。 – ooboo 2010-06-05 08:53:22

回答

2

如果您可以使用任何您想要的颜色,您可以使用颜色(几乎)连续的事实。根据它们的x,y坐标对点进行着色,因此您将得到一个副作用,即接近点将具有有点类似颜色

您可以使用类似

point.color(R,G,B) = (point.normalized_x, 0.5, 1-point.normalized.y) 

其中normalized_x为(x-MIN_X /(MAX_X-MIN_X)),所以它会以最小的x值点给出0和1与最大点x值。

如果你真的只需要使用少量的颜色,并有接近点有确切同色,那么你就必须做你的数据有些clusteringK-means是一个简单的和广泛使用算法)。聚类后​​,您只需根据其集群的ID为每个点分配一个颜色。 Python有一些很好的实现,包括scipy's clustering

+0

是的。看起来,聚类的调整是最困难的部分。 – 2010-06-05 09:04:56

+0

是的,这可能是最好的主意。我问了不同的颜色,因为我认为这会让事情变得更简单,但事实并非如此。我现在必须阅读关于群集。谢谢 :) – ooboo 2010-06-05 09:05:21

0

我会与识别在平面上的斑点的浓度开始。找到这些聚集的中心并为它们分配每种独特的颜色。然后对于其他点,您可以使用线性原理简单地计算颜色。例如,如果一个中心是红色的,另一个是黄色的,则中间的某个点会变成橙色。

我可能会使用一些指数函数而不是线性原理。这将保持点组或多或少具有相同的颜色,只会给远处的点带来明显的颜色变化,或者更准确地说,远点和点之间的某处。

0

一种方法是通过你的观点并将它们分成具有“中心”的集合。既然你有5种颜色,你会有5套。比较每个中心新点的距离,然后将其放在与最近点相同的组中。

每组对应于不同的颜色,因此您可以在完成此分区后对其进行绘制。

+0

我喜欢这个想法 - 但我不知道如何选择这些中心,以及如何确保每个集合具有或多或少相同的点数 – ooboo 2010-06-05 08:51:36