Как изменить количество знаков после запятой на метки оси в ggplot2?
В частности, это в facet_grid. Широко распространены по аналогичным вопросам, но не ясны по синтаксису или по тому, где он идет. Я хочу, чтобы для каждого числа по у-оси имелось две цифры после десятичной точки, даже если конечная цифра равна 0. Является ли это параметром в scale_y_continuous или element_text или...?
row1 <- ggplot(sector_data[sector_data$sector %in% pages[[x]],], aes(date,price)) + geom_line() +
geom_hline(yintercept=0,size=0.3,color="gray50") +
facet_grid( ~ sector) +
scale_x_date( breaks='1 year', minor_breaks = '1 month') +
scale_y_continuous( labels = ???) +
theme(panel.grid.major.x = element_line(size=1.5),
axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.title.y=element_blank(),
axis.text.y=element_text(size=8),
axis.ticks=element_blank()
)
Ответы
Ответ 1
Из справки для ?scale_y_continuous
аргумент "метки" может быть функцией:
Один из ярлыков:
NULL без меток
waiver() для меток по умолчанию, вычисленных объектом преобразования
Вектор символов с метками (должен быть такой же длины, что и разрывы)
Функция, которая принимает разрывы в качестве входных данных и возвращает метки в качестве выходных данных
Мы будем использовать последнюю опцию, функцию, которая принимает breaks
в качестве аргумента и возвращает число с двумя десятичными знаками.
#Our transformation function
scaleFUN <- function(x) sprintf("%.2f", x)
#Plot
library(ggplot2)
p <- ggplot(mpg, aes(displ, cty)) + geom_point()
p <- p + facet_grid(. ~ cyl)
p + scale_y_continuous(labels=scaleFUN)
![enter image description here]()
Ответ 2
В пакете "scale" есть несколько приятных функций для форматирования осей. Одной из этих функций является number_format(). Так что вам не нужно сначала определять свою функцию.
library(ggplot2)
# building on Pierre answer
p <- ggplot(mpg, aes(displ, cty)) + geom_point()
p <- p + facet_grid(. ~ cyl)
# here comes the difference
p + scale_y_continuous(
labels = scales::number_format(accuracy = 0.01))
# the function offers some other nice possibilities, such as controlling your decimal
# mark, here ',' instead of '.'
p + scale_y_continuous(
labels = scales::number_format(accuracy = 0.01,
decimal.mark = ','))