Это должно быть относительно простым делом, но я не могу понять это прямо здесь.Я создаю PDF, и поэтому это не так просто, как использование координат
. То, что я делаю, - это создание оси x, которая больше значения max x по косметическим причинам.В моем примере максимальный x равен 19, но я хочу, чтобы максимальное значение на оси было 20
Хитрость заключается в том, что разрыв между точками на графикеустанавливаются исходя из количества точек и доступного пространства для графика
Выкладывая свой пример, я знаю следующие фрагменты информации:
- max x = 19
- максимальное значение оси x = 20
- ширина оси x = 518,3
- Количество отметок, которое я хочу = 10
Я думалбыло бы так же просто получить пробел между каждым тиком в цикле, который рисует маленькие отметки:
interateXPositionsForEachTick := (xAxisWidth / xAxisMaxValue) * (xAxisMaxValue / NumberOfTickMarksOnXAxis)
В приведенном выше примере мы делаем:
(518.3 / 20) * (20 / 10)
Эта логика верна, не так ли?
Но, похоже, она не работает в моем цикле вообще:
xAxisTickPosition := startOfYAxis
for i := 1.0; i <= NumberOfTickMarksOnXAxis; i++ {
LabelToUse := (xAxisMaxValue / NumberOfTickMarksOnXAxis) * i
Line(xAxisTickPosition, placeYTickLocation, xAxisTickPosition, placeYTickLocation+tickmarkSize)
xAxisTickPosition = xAxisTickPosition + interateXPositionsForEachTick
Но это не работает:
Кто-нибудь может увидеть, что я здесь не так делаю?Я сбит с толку
20 в конце устанавливается за пределами этого, но я хочу, чтобы эта функция могла в основном поставить 20 в том же месте Я установил его снаружи, чтобы ямогу проверить выравнивание моей функции
Я обнаружил, что она на 1,5 ширины слишком велика по сравнению с осью x:
При запуске, чтобы уменьшить ее на 15%:
interateXPositionsForEachTick := ((xAxisWidth / xAxisMaxValue) * (xAxisMaxValue NumberOfTickMarksOnXAxis)) * 0.85
Ось диаграммы выглядит правильно:
20 выделено жирным шрифтом, поскольку оно перезаписано вне моей петли