4 votos

Representar los valores del eje como 10 a la potencia de 1, 2, 3, etc... en Microsoft Excel

Tengo el siguiente cuadro en mis manos:

Chart

Me gustaría que sustituyera los valores de los ejes X e Y que tiene actualmente por la notación de 10 a la potencia de un número entero. No quiero la notación científica (exponencial). Gracias de antemano.

6voto

Sir Adelaide Puntos 41

Tendrás que hacer un buen trabajo de formateo manual, ya que Excel no tiene el formato de número que quieres.

Puedes conseguir que el gráfico tenga este aspecto con un poco de trabajo: log plot

1 - Formato de número personalizado

Haga clic con el botón derecho del ratón en los números del eje, seleccione "formatear eje", vaya a la sección "número" e introduzca el siguiente formato personalizado:

"10^"#

Haz que tus ejes utilicen este formato personalizado.

Esto añadirá el texto "10^" al frente de cualquier número mostrado.

2 - Registre sus datos

El formato personalizado de 1) supone que sus datos ya están registrados. Así que tenemos que registrar sus datos, y el gráfico que en su lugar. Encuentra el registro de cada punto de datos:

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

Haz el gráfico de las dos columnas de la derecha.

3 - Arreglar las líneas de registro

Los gráficos de registro de Excel asumen que las principales líneas de registro deben estar en 1, 10, 100, 1000, etc. Pero usted quiere sus líneas principales en 1, 2, 3 porque ya ha registrado sus datos.

Así que tenemos que crear nuestras propias líneas, y darles formato para que sean líneas grises finas.

En primer lugar, elimine las líneas de cuadrícula de la parcela, ya que estamos haciendo la nuestra.

A continuación, añade pares de puntos de datos especificando el inicio y el final de cada línea cada 10, 100, 1000, etc., y luego registra los datos. Pon espacios entre cada par de puntos para romper las líneas y también para que sea más fácil ver lo que está pasando. Deberías obtener una tabla 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

Añada las columnas Log(x) y Log(y) como una serie de datos al gráfico, luego formatee la serie de datos para que no muestre puntos, sino líneas grises delgadas.

4 - Etiquetas de los ejes

  • Ya hemos registrado todo, así que cambia los ejes para no registrar los datos - no es necesario registrarlos dos veces.
  • Cambie la Unidad Mayor a 1, para obtener etiquetas en cada ciclo de registro.
  • Elimine las marcas mayores y menores, ya que estarán en lugares equivocados.

Añade las etiquetas de los datos, la leyenda, etc., y ya está.

0 votos

Gracias. Al final me he dado por vencido y he recurrido al uso de MATLAB. Excel puede hacer gráficos coloridos y de buen aspecto, pero es desalentador lo molesto y complicado que puede ser hacer algunos ajustes simples en él a veces.

4voto

Jon Peltier Puntos 1409

Así que el enfoque es añadir series ficticias a lo largo de cada eje, en los lugares en los que desea una etiqueta de eje. Ocultar estos puntos, y añadir etiquetas de datos, poner 101, 102, etc (para 10^1, 10^2, etc), y formatear el exponente para que esté en superíndice. Y esto es un dolor para hacer a mano, porque es difícil seleccionar los exponentes y aplicar el formato, entre otras cosas difíciles.

Así que escribí una pequeña rutina. Seleccione un gráfico log-log con ejes en sus bordes izquierdo e inferior, y ejecute el código siguiente.

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: el código puede copiarse desde aquí y pegarse en un módulo de código normal. Véase Cómo: utilizar la macro de otra persona en mi blog si no lo has hecho antes.

A continuación hay dos gráficos, el original y el que tiene las bonitas etiquetas exponenciales.

Nice Exponential Axis Labels

0 votos

Respuesta bien expuesta, introducción, código, enlace al "Cómo" e imágenes de los resultados. El superíndice del exponente hace que esto parezca realmente profesional. Bueno todo redondo +1 habría sido +2, pero no es posible. Iv'e copiado el código en mi "Big Modules de macros (para mi propio uso solamente, pero mantengo un enlace de vuelta aquí de todos modos.)

0 votos

Esta es una respuesta bastante buena. Hace series ficticias, las etiqueta y pone las etiquetas donde irían las etiquetas de los ejes. Se ve mejor que la respuesta aceptada, pero tiene algunos problemas con la edición del gráfico después, especialmente el cambio de la extensión del eje Y. Nada que no se pueda arreglar con un poco más de edición.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X