Как я могу преобразовать цифры оси Y в проценты на гистограмме?


108

Как мы можем изменить ось Y на проценты, как на рисунке? Я могу изменить диапазон оси Y, но не могу сделать это до процентов. введите описание изображения здесь

Ответы:


238

Использование:

+ scale_y_continuous(labels = scales::percent)

Или, чтобы указать параметры форматирования процентов:

+ scale_y_continuous(labels = scales::percent_format(accuracy = 1))

(команда labels = percentустарела с версии 2.2.1 ggplot2)


3
Мне понравилось, что для этого не нужно печатать library(scales).
Акшай Гаур,

И причина того, что scales::percent(accuracy = 1)это не работает, заключается в том, что *_format()версии создают функцию, а не ... все, что percent()создает, это правильно?
MokeEire

62

В принципе, в labelsпараметр можно передать любую функцию переформатирования :

+ scale_y_continuous(labels = function(x) paste0(x*100, "%")) # Multiply by 100 & add %  

Или

+ scale_y_continuous(labels = function(x) paste0(x, "%")) # Add percent sign 

Воспроизводимый пример:

library(ggplot2)
df = data.frame(x=seq(0,1,0.1), y=seq(0,1,0.1))

ggplot(df, aes(x,y)) + 
  geom_point() +
  scale_y_continuous(labels = function(x) paste0(x*100, "%"))

8
+1 для отсутствия внешней зависимости. Я знаю, что, поскольку Хэдли является автором как ggplot2, так и scale, это не имеет особого значения, но это решение по-прежнему ценится.
Марк Уайт

44

ggplot2и scalesпакеты могут это сделать:

y <- c(12, 20)/100
x <- c(1, 2)

library(ggplot2)
library(scales)
myplot <- qplot(as.factor(x), y, geom="bar")
myplot + scale_y_continuous(labels=percent)

Похоже, что stat()опция была отключена, и появилось сообщение об ошибке. Попробуй это:

library(scales)

myplot <- ggplot(mtcars, aes(factor(cyl))) + 
          geom_bar(aes(y = (..count..)/sum(..count..))) + 
          scale_y_continuous(labels=percent)

myplot

2

Заимствованное из @Deena выше, эта модификация функции для меток более универсальна, чем вы могли подумать. Например, у меня был график ggplot, где знаменатель подсчитанных переменных был равен 140. Я использовал ее пример таким образом:

scale_y_continuous(labels = function(x) paste0(round(x/140*100,1), "%"), breaks = seq(0, 140, 35))

Это позволило мне получить мои проценты в знаменателе 140, а затем разбить шкалу с шагом 25%, а не странными числами, которые она использовала по умолчанию. Ключевым моментом здесь является то, что разрывы шкалы по-прежнему устанавливаются исходным количеством, а не вашими процентами. Следовательно, разрывы должны быть от нуля до знаменателя, а третий аргумент в «разрывах» должен быть знаменателем, деленным на сколько угодно разрывов метки (например, 140 * 0,25 = 35).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.