我正在使用带有facet_wrap的gglot绘制一些数据。不同方面的尺寸差异很大(0.2与2000)。
我绘制geom_bar并在该栏上方添加具有相同值的geom_text。现在有一个问题。geom_text值用于标题下的“大”栏。
我看到两个可能的解决方案,但我都无法实现。
切换geom_text位置,以在内部绘制大条形图。这可以通过aes的调整来完成。但是对于每个方面,切换点都必须不同。
我想将y轴缩放到110%,所以文本有空间。但是我不想手动将其放到我的程序中,因为情节是自动完成的。
library(ggplot2)
testdata <- data.frame(a = c(0.1,0.2,0.3, 4,5,6, 7000,8000,9000),
b = c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c' ),
c = c('aa', 'bb', 'cc', 'aa', 'bb', 'cc', 'aa', 'bb', 'cc'))
ggplot(testdata, aes(x = c, y = a)) +
geom_bar(stat = 'identity') +
geom_text(aes(label = a), vjust = -1) +
facet_wrap(~b, ncol=1, scales = 'free_y')
Run Code Online (Sandbox Code Playgroud)
这是为您提供的解决方案:
*(如果您想了解更多详细信息,请查看此stackoverflow问题和答案)
library(data.table)
testdata <- data.table(testdata)
testdata[,y_min:= a*0.5, by = c]
testdata[,y_max:= a*1.5, by = c]
ggplot(testdata, aes(x = c, y = a)) +
geom_bar(stat = 'identity') +
geom_text(aes(label = a), vjust = -1) +
facet_wrap(~b, ncol=1, scales = 'free_y') +
geom_blank(aes(y = y_min)) +
geom_blank(aes(y = y_max))
Run Code Online (Sandbox Code Playgroud)
您首先需要为每个组创建y_min和y_max变量。并通过“绘制”它们geom_blank()。