我想在R中绘制一个小节,其中图形中的最后一个小节表示last是所有频率大于某个阈值的所有值的总和。我想用对应于最后一个小节的x值表示此信息。例如:
library(ggplot2)
x <- c(1, 2, 3, 4, 5)
y <- c(4000, 3000, 2000, 1000, 500)
df <- data.frame(x, y)
names(df) <- c("Var1", "Freq")
theme_set(theme_classic())
g <- ggplot(df, aes(Var1, Freq))
g + geom_bar(stat = "identity", width = 0.5, fill = 'tomato2') +
xlab('Var1') +
ylab('Freq') +
theme(axis.text.x = element_text(angle = 0,
vjust = 0.6,
colour = "black"),
axis.text.y = element_text(colour = "black"))
上面的代码生成类似于此的图表:
但是在最后一个栏中,我希望x轴(x = 5
)的最后一个值显示为>= 5
。
到目前为止,我已经尝试使用scale_x_discrete
。所以我在上面的代码中添加了以下几行:
n <- 5
# I'm not very creative with names.
.foo <- function(x, n) {
if (x == n) {
element <- paste('\u2265', toString(x), sep = ' ')
} else {
element <- toString(x)
}
}
labels <- sapply(seq(n), .foo, n)
g + scale_x_discrete(breaks = sapply(seq(n), function(x) toString(x)),
labels = labels)
此代码可以按我希望的方式设置x轴的格式,但它会覆盖小节图,并留下一个空图表:
我该怎么做?
答案 0 :(得分:2)
答案 1 :(得分:1)
一种方法是避免直接更改轴刻度标签,而是将Var1
中的分类数据转换为一个因数,然后使用forcats::fct_lump
重新调整该因数,使最终因数为{{1 }}
≥5
答案 2 :(得分:0)
问题是,正如@ Z.Lin注释所指出的那样,在使用geom_bar(...)
之前,我已将scale_x_discret
分配给ggplot对象。解决方法如下:
library(ggplot2)
...
labels <- sapply(seq(n), .foo, n)
g <- ggplot(df, aes(Var1, Freq)) +
scale_x_discrete(breaks = sapply(seq(n), function(x) toString(x)),
labels = labels)
g + geom_bar(stat = "identity", width = 0.5, fill = color) +
...