我使用ggplot2
中的position = "fill"
选项,使用geom_bar()
,堆积条形图与相对值100%合作。
这是我的代码:
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
结果如下:
但是,我需要在各个条上添加标签,也需要在&#34;子条&#34;上添加标签。为此,我使用了geom_text():
plot + geom_text(aes(label=y, size=4))
但结果并不好。我没有试过hjust
和vjust
参数,也使用了类似的东西:
plot + geom_text(aes(label=y/sum(y), size=4))
但是我没有达到所需的结果(我没有添加所有的测试,没有用无用的图像重载问题,如果需要,请问!)。
有没有想过要有一些好的中心标签?
答案 0 :(得分:1)
let nvc : UIViewController = self.storyboard?.instantiateViewController(withIdentifier: "SongDetailVC") as! SongDetailsVC
nvc.willMove(toParentViewController: self)
playerMainView.addSubview(nvc.view)
self.addChildViewController(nvc)
nvc.didMove(toParentViewController: self)
指定要显示的内容,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")