Joh*_*nna 8 r ggplot2 geom-text
我正在寻找一种方法来标记带百分比的堆积条形图,而y轴显示原始计数(使用ggplot).这是没有标签的情节的MWE:
library(ggplot2)
df <- as.data.frame(matrix(nrow = 7, ncol= 3,
data = c("ID1", "ID2", "ID3", "ID4", "ID5", "ID6", "ID7",
"north", "north", "north", "north", "south", "south", "south",
"A", "B", "B", "C", "A", "A", "C"),
byrow = FALSE))
colnames(df) <- c("ID", "region", "species")
p <- ggplot(df, aes(x = region, fill = species))
p + geom_bar()
Run Code Online (Sandbox Code Playgroud)
我有一个更大的桌子,R很好地计算每个地区的不同物种.现在,我想展示原始计数值(最好在y轴上)和百分比(作为标签)来比较区域之间物种的比例.
我试了很多东西,geom_text()但我认为与其他问题(例如这一个)的主要区别在于
任何帮助深表感谢!!
eip*_*i10 10
正如@Gregor所提到的,分别汇总数据,然后将数据汇总提供给ggplot.在下面的代码中,我们使用动态dplyr创建摘要:
library(dplyr)
ggplot(df %>% count(region, species) %>% # Group by region and species, then count number in each group
mutate(pct=n/sum(n), # Calculate percent within each region
ypos = cumsum(n) - 0.5*n), # Calculate label positions
aes(region, n, fill=species)) +
geom_bar(stat="identity") +
geom_text(aes(label=paste0(sprintf("%1.1f", pct*100),"%"), y=ypos))
Run Code Online (Sandbox Code Playgroud)
更新:使用dplyr0.5及更高版本,您不再需要提供y值来居中每个栏中的文本.相反,你可以使用position_stack(vjust=0.5):
ggplot(df %>% count(region, species) %>% # Group by region and species, then count number in each group
mutate(pct=n/sum(n)), # Calculate percent within each region
aes(region, n, fill=species)) +
geom_bar(stat="identity") +
geom_text(aes(label=paste0(sprintf("%1.1f", pct*100),"%")),
position=position_stack(vjust=0.5))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9961 次 |
| 最近记录: |