Representando valores de eixo como 10 para o poder de 1, 2, 3, etc ... no Microsoft Excel

4

Eu tenho o seguinte gráfico em minhas mãos:

Eu gostaria que ele substituísse os valores dos eixos X e Y que atualmente possui com os 10 para o poder de uma notação de número inteiro. Eu não quero a notação científica (exponencial). Agradecemos antecipadamente.

    
por Omar Metwally 06.02.2017 / 00:32

2 respostas

5

Você precisará fazer um bom trabalho de formatação manual, pois o Excel não possui o formato numérico desejado.

Você pode fazer com que o gráfico fique assim com um pouco de trabalho:

1-Formatonuméricopersonalizado

Cliquecomobotãodireitodomousenosnúmerosdoseixos,selecione"eixo de formatação", vá para a seção "número" e insira o seguinte formato personalizado:

"10^"#

Faça seus eixos usarem esse formato personalizado.

Isso adicionará o texto "10 ^" à frente de qualquer número exibido.

2 - Registre seus dados

O formato personalizado de 1) assume que seus dados já estão registrados. Portanto, precisamos registrar seus dados e representá-los no gráfico. Encontre o log de cada ponto de dados:

Data            
X   Y   Log10(X)    Log10(Y)
30  300 1.477121255 2.477121255
28  300 1.447158031 2.477121255
26  300 1.414973348 2.477121255
300 200 2.477121255 2.301029996
280 200 2.447158031 2.301029996
260 200 2.414973348 2.301029996

Faça o seu gráfico representar as duas colunas da direita.

3 - Corrija as linhas de log

As plotagens de log do Excel presumem que as principais linhas de log devem estar em 1, 10, 100, 1000 etc. Mas você deseja suas linhas principais em 1, 2, 3 porque já registrou seus dados.

Portanto, precisamos criar nossas próprias linhas e formatá-las para que sejam linhas cinza finas.

Primeiro, remova as linhas de grade da trama enquanto fazemos as nossas próprias.

Em seguida, adicione pares de pontos de dados especificando o início e o fim de cada linha a cada 10, 100, 1000 etc. e, em seguida, registre os dados. Coloque espaços entre cada par de pontos para quebrar as linhas e também tornar mais fácil ver o que está acontecendo. Você deve pegar uma mesa como:

Lines           
X   Y   Log(X)  Log(Y)
10     10   1.0 1.0
10  100000  1.0 5.0

20     10   1.3 1.0
20  100000  1.3 5.0

30     10   1.5 1.0
30  100000  1.5 5.0

40     10   1.6 1.0
40  100000  1.6 5.0

50     10   1.7 1.0
50  100000  1.7 5.0

60     10   1.8 1.0
60  100000  1.8 5.0

70     10   1.8 1.0
70  100000  1.8 5.0

80     10   1.9 1.0
80  100000  1.9 5.0

90     10   2.0 1.0
90  100000  2.0 5.0

100    10   2.0 1.0
100 100000  2.0 5.0

200    10   2.3 1.0
200 100000  2.3 5.0

300    10   2.5 1.0
300 100000  2.5 5.0

400    10   2.6 1.0
400 100000  2.6 5.0

500    10   2.7 1.0
500 100000  2.7 5.0

600    10   2.8 1.0
600 100000  2.8 5.0

700    10   2.8 1.0
700 100000  2.8 5.0

800    10   2.9 1.0
800 100000  2.9 5.0

900    10   3.0 1.0
900 100000  3.0 5.0

1000       10   3.0 1.0
1000    100000  3.0 5.0

   10     100   1.0 2.0
10000     100   4.0 2.0

   10     200   1.0 2.3
10000     200   4.0 2.3

   10     300   1.0 2.5
10000     300   4.0 2.5

   10     400   1.0 2.6
10000     400   4.0 2.6

   10     500   1.0 2.7
10000     500   4.0 2.7

   10     600   1.0 2.8
10000     600   4.0 2.8

   10     700   1.0 2.8
10000     700   4.0 2.8

   10     800   1.0 2.9
10000     800   4.0 2.9

   10     900   1.0 3.0
10000     900   4.0 3.0

   10    1000   1.0 3.0
10000    1000   4.0 3.0

   10    2000   1.0 3.3
10000    2000   4.0 3.3

   10    3000   1.0 3.5
10000    3000   4.0 3.5

   10    4000   1.0 3.6
10000    4000   4.0 3.6

   10    5000   1.0 3.7
10000    5000   4.0 3.7

   10    6000   1.0 3.8
10000    6000   4.0 3.8

   10    7000   1.0 3.8
10000    7000   4.0 3.8

   10    8000   1.0 3.9
10000    8000   4.0 3.9

   10    9000   1.0 4.0
10000    9000   4.0 4.0

   10   10000   1.0 4.0
10000   10000   4.0 4.0

Adicione as colunas Log (x) e Log (y) como uma série de dados ao gráfico e, em seguida, formate a série de dados para exibir nenhum ponto, mas finas linhas cinzas.

4 - Etiquetas do eixo

  • Já registramos tudo, portanto, altere os eixos para não registrar dados - você não precisa registrá-lo duas vezes.
  • Altere a unidade principal para 1 para obter rótulos a cada ciclo de log.
  • Remova marcas de escala maiores e menores, pois elas estarão nos lugares errados.

Adicione rótulos de dados, legendas etc. e pronto.

    
por 06.02.2017 / 02:48
1

Portanto, a abordagem é adicionar séries fictícias ao longo de cada eixo, nos locais em que você deseja um rótulo de eixo. Esconda esses pontos e adicione rótulos de dados, coloque 101, 102, etc (para 10 ^ 1, 10 ^ 2, etc) e formate o expoente para ser sobrescrito. E isso é difícil de fazer manualmente, porque é difícil selecionar os expoentes e aplicar a formatação, entre outras coisas difíceis.

Então eu escrevi uma pequena rotina. Selecione um gráfico de log-log com eixos nas bordas esquerda e inferior e execute o código abaixo.

Sub NiceExponentialAxisLabels()
  Dim cht As Chart
  Dim iPt As Long, iLog As Long, iMin As Long, iMax As Long
  Dim vXVals As Variant, vYVals As Variant
  Dim dFont As Double

  Set cht = ActiveChart

  ' HORIZONTAL AXIS ------------------------------------
  cht.Axes(xlCategory).TickLabels.NumberFormat = ";;;" ' hide tick labels

  ' build arrays of X and Y values
  iMin = WorksheetFunction.Log10(cht.Axes(xlCategory).MinimumScale)
  iMax = WorksheetFunction.Log10(cht.Axes(xlCategory).MaximumScale)
  ReDim vXVals(1 To 1)
  ReDim vYVals(1 To 1)
  iPt = 0
  For iLog = iMin To iMax
    iPt = iPt + 1
    ReDim Preserve vXVals(1 To iPt)
    ReDim Preserve vYVals(1 To iPt)
    vXVals(iPt) = 10 ^ iLog
    vYVals(iPt) = cht.Axes(xlValue).MinimumScale
  Next

  ' add series, hide points, add and format labels
  With cht.SeriesCollection.NewSeries
    .Name = "horizontal"
    .XValues = vXVals
    .Values = vYVals
    .Format.Line.Visible = False
    .MarkerStyle = xlMarkerStyleNone
    .HasDataLabels = True
    .DataLabels.Position = xlLabelPositionBelow
    For iPt = 1 To .Points.Count
      With .DataLabels(iPt)
        dFont = .Font.Size
        .Text = 10 & WorksheetFunction.Log10(vXVals(iPt))
        With .Characters(3, Len(.Text) - 2)
          .Font.Superscript = True
          .Font.Size = dFont + 2
        End With
        With .Characters(1, 2)
          .Font.Size = dFont
        End With
      End With
    Next
  End With

  ' VERTICAL AXIS ------------------------------------
  cht.Axes(xlValue).TickLabels.NumberFormat = "_0_0_0_0_0_0_0" ' hide but maintain margin

  ' build arrays of X and Y values
  iMin = WorksheetFunction.Log10(cht.Axes(xlValue).MinimumScale)
  iMax = WorksheetFunction.Log10(cht.Axes(xlValue).MaximumScale)
  ReDim vXVals(1 To 1)
  ReDim vYVals(1 To 1)
  iPt = 0
  For iLog = iMin To iMax
    iPt = iPt + 1
    ReDim Preserve vXVals(1 To iPt)
    ReDim Preserve vYVals(1 To iPt)
    vXVals(iPt) = cht.Axes(xlCategory).MinimumScale
    vYVals(iPt) = 10 ^ iLog
  Next

  ' add series, hide points, add and format labels
  With cht.SeriesCollection.NewSeries
    .Name = "vertical"
    .XValues = vXVals
    .Values = vYVals
    .Format.Line.Visible = False
    .MarkerStyle = xlMarkerStyleNone
    .HasDataLabels = True
    .DataLabels.Position = xlLabelPositionLeft
    For iPt = 1 To .Points.Count
      With .DataLabels(iPt)
        dFont = .Font.Size
        .Text = 10 & WorksheetFunction.Log10(vYVals(iPt))
        With .Characters(3, Len(.Text) - 2)
          .Font.Superscript = True
          .Font.Size = dFont + 2
        End With
        With .Characters(1, 2)
          .Font.Size = dFont
        End With
      End With
    Next
  End With
End Sub

Nota: o código pode ser copiado daqui e colado em um módulo de código regular. Veja Como usar a macro de outra pessoa no meu blog se você não tiver feito isso antes .

Abaixo estão dois gráficos, o original e aquele com os rótulos exponenciais agradáveis.

    
por 09.02.2017 / 23:15