Excel: rótulos de gráfico de bolha - use a 4ª dimensão?

3

Eu tenho um conjunto de dados que tem 4 dimensões - digamos que são as seguintes:

+------------------------------+
| Type  | Amnt |Price| Quality |
+-------|------|-----|---------+
|  A    |  15  | 4.0 |   3     |
|  B    |  32  | 4.5 |   4     |
|  C    |  35  | 3.8 |   7     |
+------------------------------+

O que eu quero fazer é desenhar um gráfico de bolhas desses dados no Excel. Eu posso desenhar com prazer um gráfico mostrando Preço versus Qualidade, e eu posso dimensionar a bolha de acordo com o Valor. No entanto, parece que não consigo encontrar uma maneira de rotular as bolhas usando a dimensão Tipo. Os rótulos padrão parecem ser apenas uma das três dimensões existentes usadas no gráfico, o que não é útil para mim.

Eu sei que posso adicionar rótulos de dados e, em seguida, renomear manualmente cada um, mas existe uma maneira de usar uma quarta dimensão para os rótulos automagicamente?

    
por growse 16.06.2011 / 21:04

2 respostas

1

Uma vez que você tenha configurado o gráfico com cada bolha configurada para ser chamada em série pela coluna Tipo (que é um grande problema), basta executar este código e ele rotulará todos eles com base no nome da série:

Sub BubbleLabel_Click()

Dim BC As ChartObject
Dim i As Integer

Set BC = ActiveSheet.ChartObjects(1)

For i = 1 To BC.Chart.SeriesCollection.Count

  With BC.Chart.SeriesCollection(i)
    .ApplyDataLabels
    .DataLabels.ShowSeriesName = True
    .DataLabels.ShowValue = False
  End With

Next i

End Sub

OU use esse código com base em um intervalo nomeado "MakeMeAChart" (altere o que quiser) em todos os dados, mas não nos cabeçalhos. Ele criará o gráfico, com cada linha uma série e rotulará todas a primeira coluna:

Sub BubbleLabel_Click()

Dim i As Integer

With ActiveSheet.ChartObjects.Add(Left:=100, Width:=375, Top:=75, Height:=225)
  For i = 1 To Range("MakeMeAChart").Rows.Count
    .Chart.SeriesCollection.NewSeries
    .Chart.SeriesCollection(i).Name = Range("MakeMeAChart").Rows(i).Cells(1, 1)
    .Chart.SeriesCollection(i).XValues = Range("MakeMeAChart").Rows(i).Cells(1, 3)
    .Chart.SeriesCollection(i).Values = Range("MakeMeAChart").Rows(i).Cells(1, 4)
    If i = 1 Then .Chart.ChartType = xlBubble3DEffect
    .Chart.SeriesCollection(i).BubbleSizes = "="& Range("MakeMeAChart").Parent.Name _
                & "!" & Range("MakeMeAChart").Cells(1, 2).Address(1, 1, xlR1C1)
  Next i

  For i = 1 To .Chart.SeriesCollection.Count
    With .Chart.SeriesCollection(i)
      .ApplyDataLabels
      .DataLabels.ShowSeriesName = True
      .DataLabels.ShowValue = False
    End With
  Next i
  .Chart.Legend.Delete
End With

End Sub

Observação: há muitos bugs e truques para fazer gráficos de bolhas no VBA.

    
por 17.06.2011 / 09:37
1

@ O código do Lance funciona bem. Acabei de ter um problema com a configuração do ChartType, e há um .Rows(i) ausente ao definir o BubbleSize

Isso é o que eu criei:

Sub BubbleLabel_Click()

Dim r As Range

With ActiveSheet.ChartObjects.Add(Left:=100, Width:=375, Top:=75, Height:=225).Chart
  'Sacrifical rows that will be lost
  .SeriesCollection.NewSeries
  .SeriesCollection.NewSeries
  .ChartType = xlBubble3DEffect
  .Legend.Delete

  For Each r In [MakeMeAChart].Rows
    With .SeriesCollection.NewSeries
      .Name = r.Cells(1, 1)
      .XValues = r.Cells(1, 3)
      .Values = r.Cells(1, 4)
      .BubbleSizes = "=" & [MakeMeAChart].Parent.Name & "!" & r.Cells(1, 2).Address(1, 1, xlR1C1)
      .ApplyDataLabels
      .DataLabels.ShowSeriesName = True
      .DataLabels.ShowValue = False
    End With
  Next
End With

End Sub
    
por 23.01.2012 / 19:44