#r #ggplot2
Вопрос:
Это мой сюжет, который сейчас визуализируется
Средний, где я вижу большую длину чисел после десятичной точки.
Как его сократить. Я попробовал это с помощью весов и т. Д., Но, похоже, это не работает.
Мой код для создания этого
c1 <- read.csv("figure1/Cosmic/EF_TF_Non_EF_TF_cosmic_class.txt",sep = "t")
names(c1)
#A1$Tier1 <- paste('Tier',A1$Tier)
c1$Tier_class <- paste('Tier_',c1$Tier)
#df_calculated
#df_calculated$Tier <- gsub('\s ', '', df_calculated$Tier_class)
C2 <- c1 %>% dplyr::select(Tier_class,Family)
C2$Tier_class <- gsub('\s ','', C2$Tier_class)
c3 <- C2 %>%
mutate_if(is.character, factor)
cnt1 <- c3 %>% group_by(Family, Tier_class) %>% summarise(n=n())
class(cnt1)
pcnt <- do.call(rbind,
lapply(split(cnt1, cnt1$Family), function(x){x[x$Tier_class=='Tier_1', 'n']/sum(x$n)})
)
pcnt
names(pcnt) <- 'pcnt'
pcnt$Family <- rownames(pcnt)
pcnt$Tier_class='Tier_1'
pcnt2 <- do.call(rbind,
lapply(split(cnt1, cnt1$Family), function(x){x[x$Tier_class=='Tier_2', 'n']/sum(x$n)})
)
names(pcnt2) <- 'pcnt'
pcnt2$Family <- rownames(pcnt2)
pcnt2$Tier_class='Tier_2'
KS <- merge(c3, rbind(pcnt, pcnt2))
KS$labelpos <- ifelse(KS$Tier_class=='Tier_1',
1 - KS$pcnt/2, KS$pcnt/2)
gg <- ggplot(data=KS, aes(x=Family, fill=Tier_class))
gg <- gg geom_bar(position="fill")
gg <- gg geom_text(aes(label = paste0(100*pcnt,"%"),y=labelpos),size = 3)
gg <- gg scale_y_continuous(labels = scales::percent)
print(gg)
Данные, которые я использовал для составления окончательного графика
Любое предложение было бы действительно полезно
Обновить
Удалось исправить с помощью этого
gg <- gg geom_text(aes(label = paste0(round(100*pcnt),"%"),y=labelpos),size = 3)
Комментарии:
1. Не стесняйтесь публиковать свое обновление в качестве ответа
2. Другим вариантом было бы использовать
scales::percent(pcnt)
3. @teunbrand обновил код..обновит фиг