2

我对 R 还是比较陌生,所以非常感谢这里的任何帮助。

我创建了一个李克特条形图,但图中显示的一些百分比重叠。我想知道如何防止这种重叠发生?我阅读了有关 ggrepel 的信息,并尝试合并 ggrepel 代码,但没有成功。有谁知道是否存在代码来询问绘图上显示的百分比(即来自 plot.percents=TRUE)不重叠?

这是我的代码,没有尝试合并ggrepel:

likert.bar.plot(likert_Prevention.ALL, plot.percents=TRUE, plot.percent.high= FALSE, plot.percent.low=FALSE, 
            center = 3, low.color = "grey72", high.color = "red3", neutral.color = "lightsalmon",
            legend.position = "bottom", text.size=3.5)

和我尝试合并ggrepel:

likert.bar.plot(likert_Prevention.ALL, plot.percents=TRUE, plot.percent.high= FALSE, plot.percent.low=FALSE, 
            center = 3, low.color = "grey72", high.color = "red3", neutral.color = "lightsalmon",
            legend.position = "bottom", text.size=3.5) + labs(geom_label_repel()) + labs(geom_text_repel())

下面是当前重叠百分比的裁剪图像:

具有重叠百分比的李克特条形图

提前感谢您的帮助和时间!如果需要任何澄清,请告诉我,因为这是我在 stackoverflow 上的第一篇文章。

4

1 回答 1

2

这不是最简单的事情,我不知道飞箭是否让它变得更复杂。这是使用示例数据的内容:

library(likert)
library(ggplot2)
library(plyr)
library(dplyr)
data(pisaitems)

items29 <- pisaitems[,substr(names(pisaitems), 1,5) == 'ST25Q']
names(items29) <- c("Magazines", "Comic books", "Fiction", 
                        "Non-fiction books", "Newspapers")
l29 <- likert(items29)

默认如下所示:

likert.bar.plot(l29, plot.percents=TRUE, plot.percent.high= TRUE, 
plot.percent.low=TRUE, center = 3, low.color = "grey72", high.color = "red3", 
neutral.color = "lightsalmon",legend.position = "bottom", text.size=3.5)

在此处输入图像描述

你制作一个没有标签的情节:

p = likert.bar.plot(l29, plot.percent.neutral=FALSE, plot.percent.high= FALSE, 
plot.percent.low=FALSE, center = 3, low.color = "grey72", high.color = "red3", 
neutral.color = "lightsalmon",legend.position = "bottom", text.size=3.5)

拉出负、正和中性坐标:

dat_pos = g$data %>% filter(value>0) %>% 
group_by(Item) %>% arrange(variable) %>%
mutate(ycoord=cumsum(value)-0.5*value) %>%
slice(2:n())

dat_neg = g$data %>% filter(value<0) %>% 
group_by(Item) %>% arrange(desc(variable)) %>%
mutate(ycoord=cumsum(value)-0.5*value) %>%
mutate(value=abs(value)) %>% slice(2:n())

dat_neu = g$data %>% group_by(Item) %>% 
filter(duplicated(variable)) %>% 
mutate(value=2*abs(value),ycoord=0) 

并将其添加到情节中:

p + geom_label_repel(data=rbind(dat_neu,dat_pos,dat_neg),
aes(x=Item,y=ycoord,label=paste0(round(value),"%")),size=3,force=10)

在此处输入图像描述

于 2020-12-09T23:05:03.023 回答