Процент вместо подсчета в ggplot - PullRequest
0 голосов
/ 02 августа 2020

Я только начинаю заниматься программированием. У меня есть этот фрейм данных:

data1 = data.frame(NSE=c("A-B", "C", "D-E"), Percentage=c(68, 66, 63))

И я создал этот гистограмму:

a = ggplot(data1, aes(x=NSE, y=Percentage))+
geom_bar(stat = "identity", width=0.6, fill = "red", color = "grey40", alpha = 5)+ 
geom_text(aes(label=Percentage), vjust=1.5, color="white", 
size=3)+
ggtitle("No se sintieron discriminados en los últimos 
doce meses, según NSE (en porcentaje)")+labs(y="", x="")+
theme(plot.title = element_text(color="black", size=10, face="bold"))+ylim(0,100)

Он создает три столбца, соответствующие значениям 68, 66 и 63. Но я хочу, чтобы столбцы отображались эти значения в процентах (68%, 66%, 63%). Что мне делать, чтобы получить это?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Используя scales::percent и scales::percent_format, это может быть достигнуто следующим образом:

library(ggplot2)
library(scales)

data1 = data.frame(NSE=c("A-B", "C", "D-E"), Percentage=c(68, 66, 63))

ggplot(data1, aes(x=NSE, y=Percentage))+
  geom_bar(stat = "identity", width=0.6, fill = "red", color = "grey40", alpha = 5)+ 
  geom_text(aes(label=scales::percent(Percentage, scale = 1, accuracy = 1)), vjust=1.5, color="white", 
            size=3)+
  scale_y_continuous(labels = scales::percent_format(scale = 1, accuracy = 1), limits = c(0,100)) +
  ggtitle("No se sintieron discriminados en los ultimos 
doce meses, segun NSE (en porcentaje)")+labs(y="", x="")+
  theme(plot.title = element_text(color="black", size=10, face="bold"))

Created on 2020-08-02 by the пакет REPEX (v0.3.0)

0 голосов
/ 02 августа 2020

Без использования пакета scales можно просто использовать

function(x) paste0(round(x*100), "%)

в label aestheti c of geom_text, как показано ниже:

+ geom_text(aes(label=paste0(round(Percentage), "%")), vjust=1.5, color="white", 
size=3)

Дополнительно , в аргументе labels scale_y_continuous можно сделать то же самое, например,

+ scale_y_continuous(labels = function(x) paste0(round(x), "%"))
...