R 如果在ggplot中设置else条件,则添加额外图层
假设我想在ggplot中绘制两个图层,一个包含点,另一个包含线(如果满足特定条件) 没有标准的代码可能如下所示: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)
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.datalibrary(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()