ggplot2如何将x轴移动到顶部(与反转的y轴在0处相交)?

13
我想制作一个图表,其中y轴和x轴在y=0处反转。 使用scale_y_reverse可以反转y轴,但是x轴仍停留在底部。
p <- ggplot(df, aes(x= conc, y=depth, group=factor(stn), color=factor(stn)))+
geom_point(shape=1)+
geom_path(alpha=0.5)+
scale_y_reverse(limits=(c(20,0)), expand=c(0,0))+   
scale_x_continuous(expand=c(0,0))

我尝试了这篇文章中的代码,像下面这样,但是没有成功。
p + 
scale_x_continuous(guide = guide_axis(position = "top")) + 
scale_y_continuous(guide = guide_axis(position = "right"))

我不需要两个x轴,只需从底部向上移动即可。

3
这个功能请求仍然没有被实现。这意味着你需要在网格级别上进行操作。请注意不要更改原意。 - Roland
如果只需要做一次,您可以考虑将图形保存为矢量/PDF格式,然后在矢量绘图软件(例如Inkscape)中移动轴。 - Alexander Vos de Wael
感谢您的建议,我希望他们能尽快实现。我暂时开始在Inkscape上进行编辑。 - Megumi
有人理解为什么这个功能没有被实现的原因吗?在图形语法方面是否存在一些哲学观点,不希望在绘图的顶部有x轴? - tumultous_rooster
@Matt O'Brien,有些人不愿意实施它,因为它可能被滥用。我不明白。《经济学人》也不明白... - PatrickT
2个回答

4

ggplot2中还不可能实现,但在ggvis中是可能的,它将ggplot2语法与dplyr管道结合起来。只需使用add_axis函数将轴放置在顶部即可。

# sample data
N <- 20
df <- data.frame(conc = seq(0, N), 
                 depth = runif(N+1, 0, 20), 
                 stn = rep(1:4, length=N+1))
# ggplot version
require(ggplot2)
p <- ggplot(df, aes(x= conc, y=depth, group=factor(stn), color=factor(stn)))+
  geom_point(shape=1)+
  geom_path(alpha=0.5)+
  scale_y_reverse(limits=(c(20,0)), expand=c(0,0))+   
  scale_x_continuous(expand=c(0,0))
p
# ggvis version
require(ggvis)
df %>% transform(stn = factor(stn)) %>%
  ggvis(x = ~conc, y = ~depth, stroke = ~stn) %>%
  layer_points(shape := "circle", fill := "white") %>%
  layer_lines(opacity := 0.5) %>%
  scale_numeric("y", reverse=TRUE, domain=c(0,20), expand=c(0,0)) %>%
  scale_numeric("x", expand=c(0,0)) %>%
  add_axis("x", orient = "top") 

0

你也可以使用:

library(cowplot)
ggdraw(switch_axis_position(p, axis = 'x'))

请参考此答案:https://dev59.com/m4Xca4cB1Zd3GeqPI33b#50589549 - Clay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接