在水平上方添加轴文本 geom_bars;对齐文本左对齐
Add axis text above horizontal geom_bars; justify text flush left
我想在 ggplot2
图中将轴文本 放置在 适当的水平条上方。以下是我所得到的,之后是绘图代码。数据在这个问题的底部。
我的问题,除了一直存在的 "what code would accomplish the goal better",是 (1) 而不是我手动输入矩形和文本位置,R 如何通过算法放置它们, (2) R如何将矩形中的文本移动到最左边(我尝试根据文本中的字符数计算中点,但它不起作用)?
为了绘图,我创建了序列变量,而不是纠结于 as.numeric(as.character(risks)
。
ggplot(plotpg19, aes(x = sequence, y = scores)) +
geom_bar(stat = "identity", width = 0.4) +
coord_flip() +
labs(x = "", y = "") +
theme_bw() +
theme(axis.text.y = element_blank(), axis.ticks.y = element_blank()) +
geom_rect(data=plotpg19, aes(xmin= seq(1.5, 8.5, 1),
xmax= seq(1.8, 8.8, 1), ymin=0, ymax=30), fill = "white") +
geom_text(data=plotpg19, aes(x=seq(1.6, 8.6, 1), y= nchar(as.character(risks))/2, label=risks, size = 5, show_guide = FALSE)) +
guides(size = FALSE)
下面是数据。
plotpg19 <- structure(list(risks = structure(c(8L, 7L, 6L, 5L, 4L, 3L, 2L,
1L), .Label = c("Other", "Third parties/associates acting on our behalf",
"Rogue employees", "Lack of understanding by top executives",
"Lack of anti-bribery/corruption training or awareness within the business",
"Geographic locations in which the company operates", "Industries/sector(s) in which the company operates",
"Inadequate resources for anti-bribery/corruption compliance activities"
), class = "factor"), scores = c(15, 28, 71, 16, 5, 48, 55, 2
), sequence = 1:8), .Names = c("risks", "scores", "sequence"), class = "data.frame", row.names = c(NA,
-8L))
这个问题给了我一些指导。 fitting geom_text inside geom_rect
我不明白你为什么要画白geom_rect
。对于第二个问题,在 geom_text
的 aes
中设置 y=0
并添加 hjust=0
(恰好在 y 处开始文本)有效。我调整了 x 参数,以便在条形中途绘制文本:
library(dplyr)
plotpg19 <- mutate(plotpg19, xtext = sequence + 0.55)
library(ggplot2)
ggplot(plotpg19, aes(x = sequence, y = scores)) +
geom_bar(stat = "identity", width = 0.4) +
coord_flip() +
labs(x = "", y = "") +
theme_bw() +
theme(axis.text.y = element_blank(), axis.ticks.y = element_blank()) +
geom_text(data = plotpg19,
aes(x = xtext, y = 0, label = risks, size = 5, show_guide = FALSE),
hjust = 0, vjust = 1) +
guides(size = FALSE)
我想在 ggplot2
图中将轴文本 放置在 适当的水平条上方。以下是我所得到的,之后是绘图代码。数据在这个问题的底部。
我的问题,除了一直存在的 "what code would accomplish the goal better",是 (1) 而不是我手动输入矩形和文本位置,R 如何通过算法放置它们, (2) R如何将矩形中的文本移动到最左边(我尝试根据文本中的字符数计算中点,但它不起作用)?
为了绘图,我创建了序列变量,而不是纠结于 as.numeric(as.character(risks)
。
ggplot(plotpg19, aes(x = sequence, y = scores)) +
geom_bar(stat = "identity", width = 0.4) +
coord_flip() +
labs(x = "", y = "") +
theme_bw() +
theme(axis.text.y = element_blank(), axis.ticks.y = element_blank()) +
geom_rect(data=plotpg19, aes(xmin= seq(1.5, 8.5, 1),
xmax= seq(1.8, 8.8, 1), ymin=0, ymax=30), fill = "white") +
geom_text(data=plotpg19, aes(x=seq(1.6, 8.6, 1), y= nchar(as.character(risks))/2, label=risks, size = 5, show_guide = FALSE)) +
guides(size = FALSE)
下面是数据。
plotpg19 <- structure(list(risks = structure(c(8L, 7L, 6L, 5L, 4L, 3L, 2L,
1L), .Label = c("Other", "Third parties/associates acting on our behalf",
"Rogue employees", "Lack of understanding by top executives",
"Lack of anti-bribery/corruption training or awareness within the business",
"Geographic locations in which the company operates", "Industries/sector(s) in which the company operates",
"Inadequate resources for anti-bribery/corruption compliance activities"
), class = "factor"), scores = c(15, 28, 71, 16, 5, 48, 55, 2
), sequence = 1:8), .Names = c("risks", "scores", "sequence"), class = "data.frame", row.names = c(NA,
-8L))
这个问题给了我一些指导。 fitting geom_text inside geom_rect
我不明白你为什么要画白geom_rect
。对于第二个问题,在 geom_text
的 aes
中设置 y=0
并添加 hjust=0
(恰好在 y 处开始文本)有效。我调整了 x 参数,以便在条形中途绘制文本:
library(dplyr)
plotpg19 <- mutate(plotpg19, xtext = sequence + 0.55)
library(ggplot2)
ggplot(plotpg19, aes(x = sequence, y = scores)) +
geom_bar(stat = "identity", width = 0.4) +
coord_flip() +
labs(x = "", y = "") +
theme_bw() +
theme(axis.text.y = element_blank(), axis.ticks.y = element_blank()) +
geom_text(data = plotpg19,
aes(x = xtext, y = 0, label = risks, size = 5, show_guide = FALSE),
hjust = 0, vjust = 1) +
guides(size = FALSE)