Excel 中的分組散佈圖、分類 X 軸

Excel 中的分組散佈圖、分類 X 軸

我正在嘗試創建帶有分類 X 軸的分組散點圖。我的數據和我目前的圖表嘗試:

在此輸入影像描述

我試圖將所有字母分組為具有相同 x 值的點,沒有重複的字母...例如所有 D 都垂直分佈:

在此輸入影像描述

我怎樣才能做到這一點?

答案1

這是一種解決方案:Excel - 在相同的 x 值之上繪製不同的 y 值

看來訣竅在於將標籤轉換為數字(他們可能沒有聽說過關於毫秒的名義和序數數據,呃)。透過排序和累加計數器很容易實現這一點。問題是,X 軸是數位的,並且像上面建議的那樣手動調整間距可能在大範圍內不可行。

另一種方法是將資料合併到每個類別的一行中 - 這非常簡單,可以透過公式或 VBA - 然後將散佈圖套用到表中。這將為每個列建立一個系列,每個列都有彩虹色的形狀。我想,使用正確的陣列屬性在 vba 中同時修正這些應該是可行的(尚未檢查文件)。此外,在生成繪圖時有空白似乎會混淆它,因此我最初用佔位符值替換它們(例如-412613),然後,生成繪圖後,將所有佔位符替換為空白,方便地將它們從圖表中刪除沒有進一步的後果。因此,編碼的一次性成本較大,然後需要 2 分鐘才能應用。

或者,如果您可以使用更好的繪圖軟體,那麼...


編輯(30/06/19):根據要求,技術細節應在下面詳細說明。我的隨機數據最初位於 A+C 中。

總和:

B1=1 ; B2=if(a2=a1,b1,b1+1)

使用公式合併:

D1=1 ; D2 = if(a2=a1,0,1)
E1=if(index($a2:$a$999,column(a1),1)=$a1, _
      value(index($c2:$c$999,column(a1),1)),-0.413612)

將 E 沿著所有行和與最大數量的觀察值一樣多的列貼上 - 您將知道列的過濾器何時僅顯示佔位符。根據 D=1 進行過濾,將值貼到另一個工作表,然後刪除 D。

替代方案 - 使用 vba 合併:

Const BASESHEET As String = "Base"
Const MERGESHEET As String = "Merge2"

Sub MergePairs()
Dim rowcnt As Long
Dim srcsht
Dim trgsht
Dim pid As String
Dim stidx As Long
Dim trgidx As Long
Set srcsht = Sheets(BASESHEET)
Set trgsht = Sheets(MERGESHEET)

' Sort the data.
srcsht.Sort.SortFields.Clear
srcsht.Sort.SortFields.Add Key:=Range("$A:$A"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With srcsht.Sort
    .SetRange Range("$A:$C")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

' Copy unique ids.
rowcnt = srcsht.Cells(srcsht.Rows.Count, 1).End(xlUp).Row
srcsht.Range(srcsht.Cells(1, 1), srcsht.Cells(rowcnt, 1)).Copy
trgsht.Range("A1").PasteSpecial
trgsht.Range("$A:$A").RemoveDuplicates Columns:=1, Header:=xlNo

' Copy each set of points.
pid = ""
For i = 1 To rowcnt + 1
    If pid = "" Then
        pid = srcsht.Cells(i, 1).Value
        stidx = i
        trgidx = 1
    ElseIf pid <> srcsht.Cells(i, 1).Value Then
        srcsht.Range(srcsht.Cells(stidx, 3), srcsht.Cells(i - 1, 3)).Copy
        trgsht.Cells(trgidx, 2).PasteSpecial Paste:=xlPasteValues, _
            Operation:=xlNone, SkipBlanks:=False, Transpose:=True
        pid = srcsht.Cells(i, 1).Value
        stidx = i
        trgidx = trgidx + 1
    End If
Next i
End Sub

不要忘記建立一個選擇所有值的圖表,然後用空白取代所有佔位符。

更改所有標記:散佈圖上的軸標籤似乎不容易彎曲(甚至可能根本沒有這樣做的權限);相較之下,刪除折線圖上的線條就夠簡單了。 (請注意,這會更改工作表上的所有圖表,因此請確保它是單獨的或將循環修改為參數。)

Sub XChart()
Dim chrt As ChartObject
Dim ser As Excel.Series
For Each chrt In Worksheets("Merge1").ChartObjects
    chrt.Chart.ChartType = xlLine
    For Each ser In chrt.Chart.SeriesCollection
        ser.Format.Line.Visible = msoFalse
        ser.MarkerStyle = xlMarkerStyleX
        ser.MarkerForegroundColor = RGB(0, 0, 0)
        ser.MarkerBackgroundColor = RGB(255, 255, 255)
        ser.MarkerSize = 7
    Next ser
Next chrt
End Sub

接下來示範一些圖像。

選擇階段:

垃圾郵件

使用此資料產生的圖表(注意佔位符的底線):

垃圾郵件

用空格替換佔位符:

垃圾郵件

垃圾郵件

這是最終的結果,每一盎司的活力都被從骨頭裡吸走了。

最後結果


編輯(2020年4月24日):正如引起我注意的那樣,Excel 2013+版本似乎將折線圖設定更改為值類型軸,表面上沒有任何改變它的方法。但是,柱形/條形字元確實(仍然)使用類別類型軸;一種可能的低技術黑客方法是創建一個如上所述的散點圖/折線圖,然後創建第二個僅包含標籤+ 0 值的條形圖- 這會創建一個空網格,可以清除其中的圖例、刻度線等,僅留下水平軸。然後,透過調整散點的數值範圍(大致從 0 / 1 到標籤數量+)以及列的寬度和位置,可以對齊兩個圖表,儘管不美觀。 低技術含量 可以透過 Worksheets("Merge").ChartObjects(1).Chart.Axes(xlCategory,xlPrimary) 取得 (excel.) 軸的引用,其中值/類別差異非常清晰;儘管如此,它不會響應我嘗試過的任何屬性更改請求。

相關內容