У меня есть диаграмма с некоторыми данными с линейной осью y и логарифмической осью x. Речь идет о логарифмической (x-) оси.
Я хочу, чтобы логарифмические клещи по оси х выровнялись с точными десятилетиями (степень 10), но я не хочу, чтобы ось начиналась с нужных десятилетий; Я хочу, чтобы он начинался с начала моих данных. Так, например, ось может начинаться с 3; но первый основной тик должен быть в 10. Как мне это сделать?
В настоящее время, когда я устанавливаю ось, начинающуюся с 3, основная линия сетки равна 3, что бесполезно.
Когда я устанавливаю следующие свойства, сетка и тики хороши, но это потому, что я заставляю ось начинать с десятилетия (чего я не хочу делать).
.Chart.Axes(xlCategory).ScaleType = xlScaleLogarithmic
.Chart.Axes(xlCategory).HasMajorGridlines = True
.Chart.Axes(xlCategory).HasMinorGridlines = True
.Chart.Axes(xlCategory).MinimumScale = 10 ^ (Int(Application.Log10(Cells(DATA_START, 6))))
.Chart.Axes(xlCategory).MaximumScale = 10 ^ (Int(Application.Log10(Cells(DATA_START + n, 6)) - 0.00001) + 1)
Вот как это выглядит: хорошая сетка, но ось не начинается в нужном месте.
Теперь, когда я специально не округляю min и max моей оси до десятилетия,
' ...
.Chart.Axes(xlCategory).MinimumScale = 0.9 * Cells(DATA_START, 6)
.Chart.Axes(xlCategory).MaximumScale = 1.1 * Cells(DATA_START + n, 6)
он выглядит так: ось начинается в нужном месте, но сетка/тики выглядит глупо:
В этом примере я ожидаю, что перед первым тиком будет 100 и только незначительные тики/сетки до этого.
Я уже понял, что могу установить мультипликативный множитель между двумя основными тиками .MajorUnit = 10
.
У меня есть SSCCE для вас: просто запустите этот макрос на пустом листе. Он создает диаграмму с основными тиками (и сетками) в 18, 180, 1800
, но я хочу их в 100, 1000
.
Sub CreateDemoPlot()
Range("A1:A6") = Application.Transpose(Split("20,40,100,1000,4500,10000", ","))
Range("B1:B6") = Application.Transpose(Split("-30,-50,-90,-70,-75,-88", ","))
With ActiveSheet.ChartObjects.Add(Left:=100, Width:=400, Top:=100, Height:=200)
.Chart.SeriesCollection.NewSeries
.Chart.ChartType = xlXYScatterLinesNoMarkers
.Chart.Axes(xlValue).ScaleType = xlLinear
.Chart.Axes(xlValue).CrossesAt = -1000
.Chart.Axes(xlCategory).ScaleType = xlScaleLogarithmic
.Chart.Axes(xlCategory).HasMajorGridlines = True
.Chart.Axes(xlCategory).HasMinorGridlines = True
.Chart.Axes(xlCategory).MinimumScale = 0.9 * Cells(1, 1)
.Chart.Axes(xlCategory).MaximumScale = 1.1 * Cells(6, 1)
.Chart.Axes(xlCategory).MajorUnit = 10
.Chart.HasLegend = False
.Chart.SeriesCollection.NewSeries
.Chart.SeriesCollection(1).XValues = Range("A1:A6")
.Chart.SeriesCollection(1).Values = Range("B1:B6")
End With
End Sub