4

У меня на руках следующая таблица:

Диаграмма

Я хотел бы, чтобы он заменил те значения по осям X и Y, которые он в настоящее время имеет, на 10 в степени записи целых чисел. Я не хочу научных (экспоненциальных) обозначений. Заранее спасибо.

2 ответа2

5

Вам нужно будет сделать немало ручного форматирования, так как в Excel нет нужного вам числового формата.

Вы можете заставить график выглядеть так с небольшой работой: бревенчатый участок

1 - Пользовательский формат номера

Щелкните правой кнопкой мыши по номерам осей, выберите "форматировать ось", перейдите в раздел "число" и введите следующий пользовательский формат:

"10^"#

Заставьте свои оси использовать этот пользовательский формат.

Это добавит текст «10 ^» в начало любого отображаемого числа.

2 - Зарегистрируйте ваши данные

Пользовательский формат из 1) предполагает, что ваши данные уже зарегистрированы. Таким образом, мы должны записать ваши данные и отобразить их на графике. Найдите журнал каждой точки данных:

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

Сделайте свой график графика правильными двумя столбцами.

3 - исправить строки журнала

Графики журнала Excel предполагают, что основные строки журнала должны быть в 1, 10, 100, 1000 и т.д. Но вы хотите, чтобы ваши основные строки были в 1, 2, 3, потому что вы уже записали свои данные.

Поэтому нам нужно создать свои собственные линии и отформатировать их, чтобы они были тонкими серыми линиями.

Во-первых, удалите линии сетки из графика, так как мы создаем свои собственные.

Затем добавьте пары точек данных, определяющих начало и конец каждой строки каждые 10, 100, 1000 и т.д., А затем зарегистрируйте данные. Поместите пробелы между каждой парой точек, чтобы разбить линии, а также чтобы было легче увидеть, что происходит. Вы должны получить таблицу как:

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

Добавьте столбцы Log(x) и Log(y) в виде ряда данных на график, затем отформатируйте ряд данных, чтобы на нем не было точек, а были тонкие серые линии.

4 - метки оси

  • Мы уже зарегистрировали все, поэтому измените оси, чтобы не регистрировать данные - вам не нужно регистрировать их дважды.
  • Измените Major Unit на 1, чтобы получать метки каждый цикл журнала.
  • Удалите основные и второстепенные отметки, поскольку они будут в неправильных местах.

Добавьте любые метки данных, легенды и т.д., И все готово.

1

Таким образом, подход заключается в добавлении фиктивных рядов вдоль каждой оси в местах, где вы хотите метку оси. Скройте эти точки и добавьте метки данных, вставьте 101, 102 и т.д. (Для 10 ^ 1, 10 ^ 2 и т.д.) И отформатируйте показатель степени для надстрочного индекса. И это трудно сделать вручную, потому что трудно выбрать показатели и применить форматирование, среди других сложных вещей.

Поэтому я написал небольшую рутину. Выберите график регистрации журнала с осями на его левом и нижнем краях и запустите код ниже.

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

Примечание: код можно скопировать отсюда и вставить в обычный модуль кода. Посмотрите, Как: Использовать Макрос Чьего-то Остального в моем блоге, если вы еще этого не сделали.

Ниже представлены две диаграммы, оригинальная и та, что имеет красивые экспоненциальные метки.

Хорошие экспоненциальные метки оси

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .