如何在其中一个方面添加一条线?

max*_*oku 11 r ggplot2

ggplot(all, aes(x=area, y=nq)) +
  geom_point(size=0.5) +
  geom_abline(data = levelnew, aes(intercept=log10(exp(interceptmax)), slope=fslope)) + #shifted regression line
  scale_y_log10(labels = function(y) format(y, scientific = FALSE)) + 
  scale_x_log10(labels = function(x) format(x, scientific = FALSE)) + 
  facet_wrap(~levels) +
  theme_bw() +
  theme(panel.grid.major = element_line(colour = "#808080"))
Run Code Online (Sandbox Code Playgroud)

我得到这个数字

在此输入图像描述

现在我想在其中一个方面添加一个geom_line.基本上,我想在主要面板中有一条虚线(Say x = 10,000).我怎样才能做到这一点?

Sam*_*son 16

我没有你的数据,所以我做了一些:

df <- data.frame(x=rnorm(100),y=rnorm(100),z=rep(letters[1:4],each=25))

ggplot(df,aes(x,y)) +
  geom_point() +
  theme_bw() +
  facet_wrap(~z)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

要添加一条垂直线,x = 1我们可以使用geom_vline()具有相同分面变量的数据框(在我的情况下z='b',但你的是levels='major'):

ggplot(df,aes(x,y)) +
  geom_point() +
  theme_bw() +
  facet_wrap(~z) +
  geom_vline(data = data.frame(xint=1,z="b"), aes(xintercept = xint), linetype = "dotted")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 很难找到.应该让它变红了. (4认同)

ngm*_*ngm 8

另一种表达方式可能更容易概括(并忽略格式化内容):

ggplot(df, aes(x,y)) +
  geom_point() + 
  facet_wrap(~ z) +
  geom_vline(data = subset(df, z == "b"), aes(xintercept = 1))
Run Code Online (Sandbox Code Playgroud)

关键是:先构面,然后通过对原始数据框进行子集化来装饰构面,并在aes可能的情况下将细节放入新的。类似想法的其他例子:

ggplot(df, aes(x,y)) +
  geom_point() + 
  facet_wrap(~ z) +
  geom_vline(data = subset(df, z == "b"), aes(xintercept = 1)) + 
  geom_smooth(data = subset(df, z == "c"), aes(x, y), method = lm, se = FALSE) +
  geom_text(data = subset(df, z == "d"), aes(x = -2, y=0, label = "Foobar"))
Run Code Online (Sandbox Code Playgroud)