2013-05-28 31 views
0

我想創建下面鏈接的圖表。我有用二進制標誌(0 =紅色,1 =藍色)編碼的數據,它也是有序的。例如,數據我會用假設創建下面左邊欄看起來像表以低於用有序的二進制數據創建條形圖

Data table

Chart

鏈接

任何人都可以建議我怎麼能做到這一點?謝謝。

+0

什麼數據創建圖表中的右欄? –

+0

它看起來像http://i.imgur.com/UfRqkUi.gif – zgall1

+0

好的。那麼,假設我可以像這樣重新安排數據表是安全的:http://imgur.com/iln3A0p –

回答

1

假設你的數據表被安排這樣的:

Data table

這應該適應任何數量的行列,並且任意數量的列。運行宏,並選擇包含所有二進制標誌,細胞樣細胞的範圍:

Select the binary flag values

它將創建像圖表:

Chart screenshot

Option Explicit 
Sub BuildRankedBinaryChart() 
    Dim ws As Worksheet 
    Dim cht As Chart 
    Dim ax As Axis 
    Dim rngFlag As Range 
    Dim xVal As Double 
    Dim r As Long 
    Dim c As Long 
    Dim s As Long 
    Dim p As Long 
    Dim pt As Point 

    Set ws = ActiveSheet 

    On Error Resume Next 
    Set rngFlag = Application.InputBox(_ 
       "Select the binary flags.", _ 
       "Binary Flag", Type:=8) 
    If Err <> 0 Then 
     On Error GoTo 0 
     Exit Sub 
    End If 

    '## Determine what VALUES to use for each point:' 
    xVal = 1/rngFlag.Rows.Count 
    ReDim xVals(1 To rngFlag.Columns.Count) 
    For c = 1 To rngFlag.Columns.Count 
     xVals(c) = xVal 
    Next 

    '## Add a new chart to the sheet.' 
    Set cht = ws.ChartObjects.Add(50, 50, 300, 200).Chart 
    '## Format the chart:' 
    With cht 
     .ChartType = xlColumnStacked100 
     .HasLegend = False 
     .Axes(xlPrimary).Delete 
     Set ax = .Axes(xlSecondary) 
     With ax 
      .HasMajorGridlines = False 
      .HasMinorGridlines = False 
      .Delete 
      .ReversePlotOrder = True 
     End With 
    End With 

    '## Each ROW in the table is a new series.' 
    For r = 1 To rngFlag.Rows.Count 
     '## Add a new series to the chart' 
     With cht.SeriesCollection.NewSeries 
      '## Assign the values calculated above' 
       .Values = xVals 
      '## Apply labels' 
       .ApplyDataLabels 
      '## Finally, fake out the labels and apply the color to each point.' 
      For p = 1 To .Points.Count 
       With .Points(p) 
        If rngFlag.Rows(r).Cells(1, p).Value = 1 Then 
         .Format.Fill.ForeColor.RGB = vbRed 
         .DataLabel.Text = 1 
        Else: 
         .Format.Fill.ForeColor.RGB = vbBlue 
         .DataLabel.Text = 0 
        End If 
        '## Use a white font which is more legible on the dark fill colors ' 
        .DataLabel.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = vbWhite 
       End With 
      Next 
     End With 
    Next 

End Sub 

每個數據點在圖表中將是相同的大小(我認爲這是你想要的屏幕截圖)。這個大小的計算方法是將表格中的行數除以1,例如,對於6行,它將是0.166666667,這樣堆疊的列全部增加到100%。

值標籤被覆蓋,並指定爲1或0

標誌值的顏色是紅色或藍色,根據1或0的值I取得的字體顏色白色,以便將更清晰地對付藍色&紅色填充。

+0

這太棒了。非常感謝。 – zgall1

0

結果下面可以使用,也許與直覺相反,堆積條形圖圖表(無VBA)來實現(和從默認調整其他許許多多設置!):

SO16797200 first example

編輯在迴應置評請求進一步的細節

一些被要求可能調整爲默認設置(可能不是全部!):

國界
數據系列格式應設置邊框顏色實線(顏色可能默認爲黑色,透明度爲0%)和邊框樣式,以約3磅(或同等學歷,其餘部分可能是默認值)兩個Binary FlagSeries1。對於Series1數據點

顏色
數據系列格式應該是填充,實體填充顏色:紅色和透明度0%(Binary Flag可能默認爲藍色,而不是需要調整)。

格式軸
對於X軸,軸選項都設置爲固定,與值最小值:0,最大:1,專業:1,次要:1和主要刻度線類型:,次要刻度線類型:和軸標籤:全部設置爲無。縱軸交叉:設定爲約0.75。

對於Y軸,線條顏色設置爲無線。

圖例
刪除。

系列選項
設置爲系列重疊分居100%,間隔寬度沒有間隙(0%)與繪圖系列默認爲主座標軸。

大小 將右側圖表邊框向左拖動以適合。


替代

雖然或許與條件格式更容易(提供排序排列順序是相反的):

SO16797200second example

+0

那麼你必須做出什麼樣的默認調整? – zgall1

+0

@ zgall1我一定會錯過一些東西,但希望通過上述編輯方式提供的說明至少有助於確定進一步的調整要求。 – pnuts