我想绘制背对背条形图,但是每一侧都位于独立的轴上。我可以通过取一组的负值来连续绘制它们,但这使它们具有相同的访问权限,并且因为 p 值较小,所以它们的条形几乎没有表示出来。
library(ggplot2)
df <-structure(list(Description = c("a", "b", "c", "d", "e", "f",
"g", "h", "a", "b", "c", "d", "e", "f", "g", "h"), test = c("size",
"size", "size", "size", "size", "size", "size", "size", "p",
"p", "p", "p", "p", "p", "p", "p"), value = c(0.1, 0.1, 0.125,
0.1, 0.075, 0.1, 0.075, 0.125, 0.000230705311441713, 0.000314488619269942,
0.00106639822095382, 0.00108290238851994, 0.00114723539549198,
0.00160204850890075, 0.0019276388745184, 0.00320371567547557)), .Names = c("Description",
"test", "value"), row.names = c(NA, -16L), class = "data.frame")
df$value[df$test == 'p'] <- -(df$value[df$test == 'p'])
ggplot(df, aes(x=Description, y= value, group=test, fill=test)) + geom_col() +coord_flip()
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望每个组都在独立的轴上,以便条形图在零处相交(在绘图区域的中间),但在不同的尺度上,对于本示例 ylim 将类似于 ylim(0,0.13) ,对于 pvalue c(0 , 0.0035)
您可以通过使用小平面并调整以消除小平面之间的间距来实现此目的:
ggplot(df, aes(x=Description, y= value, fill=test)) +
facet_wrap(~ test, scales = "free_x") +
geom_col() +
coord_flip() +
scale_y_continuous(expand = c(0, 0)) +
theme(panel.spacing.x = unit(0, "mm"))
Run Code Online (Sandbox Code Playgroud)
它可能会产生一些轴标签问题,并且这些问题解决起来有点棘手。在这种情况下,在刻面之间保留一些空间可能会更容易,但代价是条形条不会在中间相交。
输出:
PS:您还可以使用以下命令删除负轴标签:
scale_y_continuous(
expand = c(0, 0),
labels = function(x) signif(abs(x), 3)
)
Run Code Online (Sandbox Code Playgroud)