2016-09-06 136 views
2

在Excel 2013中,我使用单元格中的值标记散点图。我希望标签不要重叠。我可以手动移动标签,但是我创建了一个过滤器来自动创建新图,所以我希望标签解除冲突也会自动发生。Excel 2013:在标记散点图中解除标签冲突

这可能吗?没有VBA的解决方案的奖励。

低于标签重叠的例子:

enter image description here

+0

排序,我可以写起来不VBA的解决方案,但它仅会对于一次绘制的少量点可以很好地工作,并且如果轴固定,则也更容易。一次绘制的最大点数是多少?而且,如果轴是固定的,它们的范围是什么?最后,你通常只有2点或3点在一个位置碰撞,或者可以有更多点碰撞? – Michael

+0

另外,是否只使用源数据上的自动过滤器? – Michael

+0

@Michael对于我目前的问题,我有14个点绘制在一个简短的描述符(通常每个<10个字符)。轴目前不是固定的,但如果它们是固定的,它们很可能是-5到+5或-3到+3,大体上具有正态分布,并且规模为1的标准偏差。 – Underminer

回答

4

这里有一个非VBA的解决方案如果没有太多的点和值的范围是相当稳定的作品。

它通过将您的Y系列分为两个单独的系列,一个在点之上有标签,另一个在点之下有标签。

默认情况下,点将被放入该点下的标签系列。但是,对于每个点,分裂公式会检查是否存在另一个低于或高于当前点的附近点。如果存在,则将当前点放入具有点之上的标签的系列中。

我假设你有3列中的数据:过滤器,X,Y(这也适用,如果你只是在X或Y的过滤,可以忽略过滤器列)

四个工作列是必要的。前两个是X Filtered和Y Filtered。使用

的例子在下面的截图我,这个公式进入D2并同时填写d和E列:

=SUBTOTAL(9,B2) 

这只是导致数据点去0,0,如果他们过滤掉,以便在分解公式中忽略它们。

为了方便起见,以读,设置过滤值的名称为X(D2:D10)和Y(E2:E10)

然后这个公式进入F2作为数组公式,使用CTRL + SHIFT + ENTER输入,然后填写下来。

=IF(SUM((ABS(D2-X)<0.75)*(E2-Y>0)*(E2-Y<0.75))+(SUM((ABS(D2-$D$2:D2)<0.75)*($E$2:E2=E2))>1),E2,NA()) 

此公式创建标签上方标签的系列。该公式会执行两次检查:

  1. 检查是否有任何其他点“关闭”且低于当前点。
  2. 检查是否有任何先前的点“关闭”并且与当前点相同。 (对于这项检查,我们无法与所有点进行比较,否则两个点都将具有高于该点的标签。我们只检查当前点,以便第一个点仍然有一个标签在下面,随后的点上面有一个标签。)

如果满足这些条件中的任何一个,则使用该值,否则使用NA()(以便不显示任何点)。

在此公式中,X轴和Y轴上的close均定义为“0.75”。您需要根据数据中“关闭”的内容更改公式中的这些值。即X和Y值有什么区别要求将标签放在点的相对两侧。

这个公式然后进入G2来创建点,这是所有剩余值低于标签系列:

一招只是需要作出对数据的自动筛选工作。因为我们使用了SUBTOTAL公式,所以Excel认为最后一行是小计行,并自动将其从自动过滤器中排除,即使我们在应用自动过滤器之前选择了所有数据。要使用自动过滤器,在创建自动过滤器之前,实际上需要创建一个没有小计功能的额外虚拟行。

现在,创建散点图与2系列:用X和Y以上

系列1使用X和Y下面

(没有必要在这些空行

系列2数据系列)

将两个系列的格式设置为相同,除了系列1的标签显示在点上方并且系列2的标签显示在点下方之外。

下面的截图显示了结果,包括过滤时的结果。标签总是低于数值,除非附近有其他可见点。每个屏幕截图还会显示其中一个公式。

所有的点:

All points

过滤器上的 “A”

Filtered a

过滤器上的 “B”

Filtered b

编辑:我们可以实际使公式更聪明一些,以处理多个关闭值。这将在标签的上方和下方之间交替每个后续值。但是,它只能当所有值都“关闭”范围之内,只有当数据以X第一

=IF(SUM((ABS(D2-X)<0.75)*(E2-Y>0)*(E2-Y<0.75))+(MOD(SUM((ABS(D2-$D$2:D2)<0.75)*($E$2:E2=E2)),2)=0),E2,NA()) 

Multiple close level points

+0

迈克尔,这太好了。同样,我已经将数据分成4个系列(基于类别),因此可以将它们绘制为不同的颜色。我相信这可以让我使用你的方法做更多的去冲突检查。 – Underminer

+0

“亲密度”的定义可以更自动地设定,例如,通过使用x和y范围的10%,所以它应该在轴线改变时起作用。 – SteveES