如何在GGplot2中将单个标签添加到堆叠的条形图中 [英] How to add a single label to a stacked bar chart in GGplot2
本文介绍了如何在GGplot2中将单个标签添加到堆叠的条形图中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想在GGplot2的堆叠条形图中添加一个数字标签.
I'd like to add a single numerical label to a stacked bar chart in GGplot2.
我有以下代码:
# Load the packages
library(dplyr)
library(readr)
library(tidyr)
library(ggplot2)
library(RColorBrewer)
# Create a data set called M
M <- structure(list(X1 = c("Diversity", "Endangerment", "Marketability", "Total"),
B1 = c(5.1, 4.9, 4.7, 4.6), B2 = c(3.5,
3, 3.2, 3.1), B3 = c(1.4, 1.4, 1.3, 1.5), Petal.Width = c(7.1,
4.7, 3.2, 5.1)), .Names = c("X1", "B1", "B2", "B3", "B4"), row.names = c(NA,
4L), class = "data.frame")
M
# Plot the stacked bar
P <- M %>%
gather(variable, value, -X1) %>%
filter(X1!="Total") %>% #Removes total variable
group_by(variable) %>%
mutate(sum=sum(value)) %>%
ungroup() %>%
mutate(variable=reorder(variable, -sum)) %>% #Reorders the chart based on breed total score
ggplot(aes(variable, value, fill=X1, width =.7)) +
geom_col(col="black") + #Black border around the bars
expand_limits(y = 0) +
scale_y_continuous(limits = c(0,70), breaks=c(0,10,20, 30,40, 50,60, 70), expand = c(0.02, 0.02))+
geom_text(aes(label = sum), vjust = -.25)+ #Here the text is added
scale_fill_brewer(palette="Dark2") + #Changes the colour scale
labs(x="Breed",
y="Weighted score",
fill="") +
theme_bw() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.direction="vertical", legend.position=c(0.9, 0.85),
legend.text=element_text(size=11),
legend.key = element_rect(size = 4),
legend.key.size = unit(1.5, 'lines')) # Ensures spacing between the different lines on the legend.
P
我想尝试在每个小节的上方添加求和"值.有什么想法我该怎么做吗?
I want to try and include the "summed" values above each bar. Any ideas how I go about doing this?
推荐答案
答案
因此,我创建了另一个data.frame,但是使用Summary汇总后,我们将只有1个总和值.
Answer
So, I created another data.frame, but with summarise then we will just have 1 value of the sum.
df <- structure(list(X1 = c("Diversity", "Endangerment", "Marketability", "Total"),
B1 = c(5.1, 4.9, 4.7, 4.6), B2 = c(3.5,
3, 3.2, 3.1), B3 = c(1.4, 1.4, 1.3, 1.5), Petal.Width = c(7.1,
4.7, 3.2, 5.1)), .Names = c("X1", "B1", "B2", "B3", "B4"), row.names = c(NA,
4L), class = "data.frame")
df %>%
gather(variable, value, -X1) %>%
filter(X1!="Total") %>%
group_by(variable) %>%
mutate(sum=sum(value)) %>%
ungroup() %>%
mutate(variable=reorder(variable, -sum)) ->df
df %>%
group_by(variable) %>%
summarise(max = max(sum)) ->df_max
df %>%
ggplot(aes(variable, value, width =.7)) +
geom_col(col="black",aes(fill=X1)) + #Black border around the bars
expand_limits(y = 0) +
scale_y_continuous(limits = c(0,70), breaks=c(0,10,20, 30,40, 50,60, 70), expand = c(0.02, 0.02))+
geom_text(data = df_max,
aes(label = max, y = max), vjust = -.25)+ #Here the text is added
scale_fill_brewer(palette="Dark2") + #Changes the colour scale
labs(x="Breed",
y="Weighted score",
fill="") +
theme_bw() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.direction="vertical", legend.position=c(0.9, 0.85),
legend.text=element_text(size=11),
legend.key = element_rect(size = 4),
legend.key.size = unit(1.5, 'lines')) # Ensures spacing between the different lines on the legend.
出局
这篇关于如何在GGplot2中将单个标签添加到堆叠的条形图中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文