Як я можу змінити фігури осі Y на відсотки в баплоті?


107

Як ми можемо змінити вісь y на відсотки, як цифра? Я можу змінити діапазон осі y, але не можу зробити його відсотками. введіть тут опис зображення

Відповіді:


236

Використання:

+ 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, так і шкал, це насправді не має значення - але це рішення все ще цінується.
Марк Білий

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.