Я пытаюсь сместить некоторые данные на графике Маки (я использую сетку, но у меня более простой пример).
Если
fig = Figure()
Axis(fig[1,1],
xticks = 0:10:60,
xtickformat = x -> string.(x .+70),
yticks = 0:10:60,
ytickformat = x -> string.(x .+70),
limits = (0,60,0,60)
)
fig
Я получаю форматы с «.0» в конце каждой метки, но они мне не нужны.
Судя по документации, он запускает команду для автоматического добавления «.0».





По умолчанию значения отметок вдоль оси линии в Makie имеют тип Float64. Немного запутанно найти в коде, где это происходит, но вы можете видеть в определении функции LineAxis , что Ticketvalues создается как Observable{Vector{Float64}} , и это вектор значений Float64 который в конечном итоге передается функции, определенной в xtickformat. Это правда, даже если вы определяете xticks как StepRange{Int64, Int64}.
Самый простой способ заставить отображение тиков быть целыми числами — это преобразовать значения, переданные в функцию xtickformat, как Int, прежде чем превращать их в строки:
fig = Figure()
Axis(fig[1,1];
xticks = 0:10:60,
xtickformat = (x -> @. string(Int(x) + 70)),
limits = (0, 60, 0, 1),
)
Это работает только в том случае, если все значения xtick можно преобразовать в значения Int, в противном случае происходит следующее:
Axis(fig[1,1];
xticks = 0:1.5:6,
xtickformat = (x -> @. string(Int(x) + 70)),
limits = (0, 6, 0, 1),
)
# ERROR: InexactError: Int64(1.5)
Вы также можете передать String в xtickformat, который будет интерпретироваться как спецификатор формата для Format.jl , как описано в документации. Спецификатор формата для числа с плавающей запятой без десятичных значений — {:.0f}, что дает следующее:
Axis(fig[2,1];
xticks = 0:10:60,
xtickformat = "{:.0f}",
xticklabelcolor = :purple,
limits = (0, 60, 0, 1),
)
Использование этого спецификатора формата также работает, когда значения деления не являются целыми числами, хотя результат будет округлен и может отличаться от ожидаемого:
Axis(fig[3,1];
xticks = 0:1.5:6,
xtickformat = "{:.0f}",
xticklabelcolor = :orange,
limits = (0, 6, 0, 1),
)
Я ценю объяснение кода. Я пытался туда поискать, но знание того, что хранилище было Float64, было недостающим элементом.
Где в документации вы прочитали, что он автоматически добавляет ".0"?