Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在ggplot2中添加多个水平功能区(如geom_hline)?_R_Ggplot2 - Fatal编程技术网

R 如何在ggplot2中添加多个水平功能区(如geom_hline)?

R 如何在ggplot2中添加多个水平功能区(如geom_hline)?,r,ggplot2,R,Ggplot2,我想在散点图上绘制一些水平线(例如,使用geom_hline),然后在这些线周围放置一些误差带,每条线的宽度不同 我有一个数据帧,由连续的x和y以及分组因子组成: #make the dataframe: so<-data.frame(expand.grid(x=c(1:5),sys=c("a","b","c","d"))) so$y<-c(1,2,1,3,2,2,1,3,2,3,4,3,2,3,4,5,

我想在散点图上绘制一些水平线(例如,使用geom_hline),然后在这些线周围放置一些误差带,每条线的宽度不同

我有一个数据帧,由连续的x和y以及分组因子组成:

#make the dataframe:
so<-data.frame(expand.grid(x=c(1:5),sys=c("a","b","c","d")))
so$y<-c(1,2,1,3,2,2,1,3,2,3,4,3,2,3,4,5,4,3,4,5)

但是如果我试着把色带绕在它们周围,ggplot在没有x值的情况下会丢失:

ggplot(so,aes(x=x,y=y,colour=sys)) + 
 geom_point(position=position_jitter()) +
 geom_hline(data=so2,aes(yintercept=yint,colour=sys))+
 geom_ribbon(data=so2,aes(ymin=low,ymax=upp))
   #Error in FUN(X[[i]], ...) : object 'x' not found

有可能让geom_ribbon表现得像geom_hline吗?或者是否有一种解决方法,例如,将上下界绘制为hline,并在它们之间以某种方式着色?

我不确定我是否理解您试图实现的目标,但如果您使用geom_rect()而不是geom_ribbon(),则可以指示上下界,例如

library(tidyverse)
so<-data.frame(expand.grid(x=c(1:5),sys=c("a","b","c","d")))
so$y<-c(1,2,1,3,2,2,1,3,2,3,4,3,2,3,4,5,4,3,4,5)
#make the second dataframe:
so2<-data.frame(sys=c("a","b","c","d"),yint=c(1.4,2.3,3.5,4.6),low=c(1.2,2.1,3.4,4.1),
                upp=c(1.6,2.7,3.6,4.7))  

ggplot(so,aes(x=x,y=y,colour=sys)) + 
  geom_point(position=position_jitter()) +
  geom_hline(data=so2,aes(yintercept=yint, colour=sys)) +
  geom_rect(data = so2, aes(ymin = low, ymax = upp,
                            xmin = 0.5, xmax = 5.5, fill=sys),
            alpha = 0.2, inherit.aes = FALSE)
库(tidyverse)

这正是我想要达到的!(尝试过geom_rect(),但肯定错过了什么,因为它不起作用,所以非常感谢示例代码)
ggplot(so,aes(x=x,y=y,colour=sys)) + 
 geom_point(position=position_jitter()) +
 geom_hline(data=so2,aes(yintercept=yint,colour=sys))+
 geom_ribbon(data=so2,aes(ymin=low,ymax=upp))
   #Error in FUN(X[[i]], ...) : object 'x' not found
library(tidyverse)
so<-data.frame(expand.grid(x=c(1:5),sys=c("a","b","c","d")))
so$y<-c(1,2,1,3,2,2,1,3,2,3,4,3,2,3,4,5,4,3,4,5)
#make the second dataframe:
so2<-data.frame(sys=c("a","b","c","d"),yint=c(1.4,2.3,3.5,4.6),low=c(1.2,2.1,3.4,4.1),
                upp=c(1.6,2.7,3.6,4.7))  

ggplot(so,aes(x=x,y=y,colour=sys)) + 
  geom_point(position=position_jitter()) +
  geom_hline(data=so2,aes(yintercept=yint, colour=sys)) +
  geom_rect(data = so2, aes(ymin = low, ymax = upp,
                            xmin = 0.5, xmax = 5.5, fill=sys),
            alpha = 0.2, inherit.aes = FALSE)