2016-09-06 135 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