r - R,ggplot堆积条形图位置=“填充”和标签
问题描述
我正在ggplot2
使用 中的position = "fill"
选项,使用geom_bar()
.
这是我的代码:
test <- data.frame (x = c('a','a','a','b','b','b','b')
,k = c('k','j','j','j','j','k','k')
,y = c(1,3,4,2,5,9,7))
plot <- ggplot(test, aes(x =x, y = y, fill = k))
plot <- plot + geom_bar(position = "fill",stat = "identity")
plot <- plot + scale_fill_manual(values = c("#99ccff", "#ff6666"))
plot <- plot + geom_hline(yintercept = 0.50)+ggtitle("test")
plot
结果如下:
但是,我需要在各个条上添加标签,也在“子条”上。为此,我使用了 geom_text():
plot + geom_text(aes(label=y, size=4))
但结果并不好。我尝试了没有运气的hjust
andvjust
参数,并且还使用了类似的东西:
plot + geom_text(aes(label=y/sum(y), size=4))
但是我没有达到所需的结果(我没有添加所有测试,以免用无用的图像使问题超载,如果需要,请询问!)。
关于有一些不错的居中标签的任何想法?
解决方案
label
指定要显示的内容,并y
指定where
要显示的内容。由于您使用 y 轴的比例position = "fill"
,因此您需要根据每个使用累积和geom_text(aes(y = ...))
的比例来计算标签位置 ( ) 。此外,要仅显示给定颜色的总比例,您需要为每个 x、k 组合提取第 N 行。在这里,我正在构建一个单独的数据集,用于显示自定义标签: x
test_labels
geom_text
test <- data.frame (x = c('a','a','a','b','b','b','b'),
k = c('k','j','j','j','j','k','k'),
y = c(1,3,4,2,5,9,7))
test_labels = test %>%
arrange(x, desc(k)) %>%
group_by(x) %>%
mutate(ylabel_pos = cumsum(y)/sum(y),
ylabel = y/sum(y)) %>%
group_by(k, add = TRUE) %>%
mutate(ylabel = sum(ylabel)) %>%
slice(n())
ggplot(test, aes(x =x, y = y, fill = k)) +
geom_bar(position = "fill", stat = "identity") +
scale_fill_manual(values = c("#99ccff", "#ff6666")) +
geom_hline(yintercept = 0.50) +
geom_text(data = test_labels,
aes(y = ylabel_pos, label=paste(round(ylabel*100,1),"%")),
vjust=1.6, color="white", size=3.5) +
ggtitle("test")
结果:
> test_labels
# A tibble: 4 x 5
# Groups: x, k [4]
x k y ylabel_pos ylabel
<fctr> <fctr> <dbl> <dbl> <dbl>
1 a j 4 1.0000000 0.8750000
2 a k 1 0.1250000 0.1250000
3 b j 5 1.0000000 0.3043478
4 b k 7 0.6956522 0.6956522
推荐阅读
- python - 如何绘制堆积条
- python - 运行逻辑回归代码时出现 Pyspark 错误
- linux - 使文件只读,除非通过符号链接路径访问
- php - 使用 HTML.PHP 而不是 html.twig - 不工作
- robotframework - 如何使用在项目级别创建的测试用例级别的变量和用户关键字
- mongodb - Mongo Map-Reduce 查询
- java - 即使字符串匹配,string contains() 方法也会返回 false
- python - 如何以python字符串格式传递整个列表?
- firebase - 在 React Native 中集成 Firebase
- c - SIGSEGV 在某处不应该,没有 NULL 指针