Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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 如果在ggplot中设置else条件,则添加额外图层_R_If Statement_Ggplot2 - Fatal编程技术网

R 如果在ggplot中设置else条件,则添加额外图层

R 如果在ggplot中设置else条件,则添加额外图层,r,if-statement,ggplot2,R,If Statement,Ggplot2,假设我想在ggplot中绘制两个图层,一个包含点,另一个包含线(如果满足特定条件) 没有标准的代码可能如下所示: library("ggplot2") # Summarise number of movie ratings by year of movie mry <- do.call(rbind, by(movies, round(movies$rating), function(df) { nums <- tapply(df$length, df$year, length)

假设我想在ggplot中绘制两个图层,一个包含点,另一个包含线(如果满足特定条件)

没有标准的代码可能如下所示:

library("ggplot2")

# Summarise number of movie ratings by year of movie
mry <- do.call(rbind, by(movies, round(movies$rating), function(df) {
  nums <- tapply(df$length, df$year, length)
  data.frame(rating=round(df$rating[1]), year = as.numeric(names(nums)), number=as.vector(nums))
}))

p <- ggplot(mry, aes(x=year, y=number, group=rating))

p + 
geom_point()+
geom_line()
geom_线() 几何线:
统计标识:
位置标识:(宽度=NULL,高度=NULL)


您看到的是一个语法错误。我能想到的最可靠的方法是:

tmp.data<-c(1,2,3) 
if(tmp.data[1]!="no value") {
   p = p + geom_point()
}
p + geom_line()

tmp.data您看到的是语法错误。我能想到的最可靠的方法是:

tmp.data<-c(1,2,3) 
if(tmp.data[1]!="no value") {
   p = p + geom_point()
}
p + geom_line()
tmp.data
library(ggplot2)
#按电影年份总结电影收视率数量
mry
库(ggplot2)
#按电影年份总结电影收视率数量

mry这是使用ggplot2.1.0完成的。我认为你可以完全按照OP的意愿去做,只需切换括号,使其包含整个
if
语句

下面是一个根据
Swtich
T
还是
F
添加水平线的示例。首先,条件为
TRUE

library(ggplot2)

df<-data.frame(x=1:10,y=11:20)
Switch=T

ggplot(df,aes(x,y))+
{if(Switch)geom_hline(yintercept=15)}+
  geom_point()

这是使用ggplot2.1.0完成的。我认为你可以完全按照OP的意愿去做,只需切换括号,使其包含整个
if
语句

下面是一个根据
Swtich
T
还是
F
添加水平线的示例。首先,条件为
TRUE

library(ggplot2)

df<-data.frame(x=1:10,y=11:20)
Switch=T

ggplot(df,aes(x,y))+
{if(Switch)geom_hline(yintercept=15)}+
  geom_point()

按照,您可以创建一个返回列表的函数。任何空组件都将被忽略

库(ggplot2)
图书馆(ggplot2movies)
#按电影年份总结电影收视率数量
mry在之后,您可以创建一个返回列表的函数。任何空组件都将被忽略

库(ggplot2)
图书馆(ggplot2movies)
#按电影年份总结电影收视率数量

mry为什么不改变顺序:
p+geom_line()+if(tmp.data[1]!=“no value”){geom_point()}
@shadow。只有当我的第二层是函数中的最后一个参数时,这才有效。如果我添加更多的参数,比如:
+theme(panel.background=element_rect(fill=“lightskyblue2”)
它不再起作用了为什么不改变顺序:
p+geom_line()+if(tmp.data[1]!=“no value”){geom_point()}
@shadow。只有当我的第二层是函数中的最后一个参数时,这才有效。如果我添加更多的参数,比如:
+theme(panel.background=element_rect(fill=“lightskyblue2”)
它不再起作用了,似乎您无法在
{
中使用
+
,因此如果您想有条件地向ggplot添加多个内容,我相信您需要添加另一个
if
语句(在它自己的
{
中)用于添加到绘图中的每个对象。您不能在
{
中使用
+
,但如果有多个步骤,您可以将所有内容放入
列表中。
{if(Switch)list(geom_hline(yintercept=15),geom_hline(yintercept=13))}
您似乎无法在
{
中使用
+
,因此如果您想有条件地向ggplot添加多个内容,我相信您需要为添加到绘图中的每个对象添加另一个
if
语句(在其自身的
{
中)。您不能在
中使用
+
{
,但是如果您有多个步骤,您可以将所有内容放入
列表中。
{if(Switch)list(geom_hline(yintercept=15),geom_hline(yintercept=13))}
如果试图进行面换行,则此解决方案不起作用。我得到错误:seq.default(min,max,by=by):“from”必须是一个有限的数字如果有人试图对facet_进行包装,则此解决方案不起作用。我得到错误:seq中的错误。默认值(min,max,by=by):“from”必须是一个有限的数字
mry$rating <- factor(mry$rating)
p <- ggplot(mry, aes(x=year, y=number, group=rating))
p <- p + geom_line()
p <- p + geom_point(data=mry[!(mry$rating %in% tmp.data),], 
                    aes(x=year, y=number, group=rating, color=rating), size=2)
p <- p + scale_color_brewer()
p
library(ggplot2)

df<-data.frame(x=1:10,y=11:20)
Switch=T

ggplot(df,aes(x,y))+
{if(Switch)geom_hline(yintercept=15)}+
  geom_point()
df<-data.frame(x=1:10,y=11:20)
Switch=F

ggplot(df,aes(x,y))+
{if(Switch)geom_hline(yintercept=15)}+
  geom_point()