Excel 2013:标记散点图中的解除冲突

在Excel 2013中,我使用单元格中的值标记散点图。 我想标签不重叠。 我可以手动移动标签,但我已经创build了一个filter来自动创build新的情节,所以我想标签解除冲突也会自动发生。

这可能吗? 没有VBA的解决scheme的奖金。

以下重叠标签示例:

在这里输入图像说明

这里有一个非VBA的解决scheme,如果没有太多的点,值的范围是相当稳定的。

它的工作原理是将你的Y系列分成两个独立的系列,一个在点上方有标签,另一个在点下方有标签。

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

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

四个工作列是必需的。 前两个是X Filtered和Y Filtered。

使用下面截图中的例子,这个公式进入D2并填充D和E列:

=SUBTOTAL(9,B2) 

这只会导致数据点去0,0,如果他们被过滤掉,所以他们在分裂公式中被忽略。

为了便于阅读,请将过滤值的名称设置为X(D2:D10)和Y(E2:E10)

然后这个公式作为数组公式inputF2,使用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()) 

此公式创build标签之上的标签。 该公式做两个检查:

  1. 检查是否有任何其他点“closures”,低于当前点。
  2. 检查是否有任何之前的点“closures”并且与当前点相同。 (对于这个检查,我们不能和所有的点进行比较,否则两个点都会在这个点之上有标签,我们只检查当前点,以便第一个点下面有一个标签,后面的点上面有一个标签。

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

在这个公式中,closures在X轴和Y轴上定义为“0.75”。 您需要根据数据中的“closures”来更改公式中的这些值。 也就是说,X和Y值有什么区别要求将标签放在点的相对两侧。

然后这个公式进入G2创build标签下的标签,这是所有剩余的值:

 =IF(ISERROR(F2),E2,NA()) 

一个技巧就是使自动filter在数据上工作。 因为我们使用SUBTOTAL公式,所以Excel认为最后一行是小计行,即使在应用自动筛选器之前select了所有数据,它也会自动将其排除在自动筛选器之外。 要使用自动filter,在创build自动filter之前,实际上需要创build一个没有小计function的额外虚拟行。

现在,创build2个系列的散点图:

系列1使用X和Y以上

系列2使用X和Y以下

(在这些数据系列中不需要包含空行)

除了系列1的标签显示在点之上而系列2的标签显示在点之下之外,两个系列的格式都是相同的。

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

所有观点:

所有点

过滤“a”

过滤了一个

过滤“b”

已过滤b

编辑:我们实际上可以使公式更聪明一些,以处理多个closures值。 这将在标签上下之间交替每个后续值。 但是,只有在所有值都在“closures”范围内且仅在数据首先按Xsorting的情况下,它才起作用

 =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()) 

多个关闭点