【问题标题】:R ggplot2 for loopR ggplot2 for 循环
【发布时间】:2015-05-12 07:07:22
【问题描述】:

我正在尝试对 ggplot 中的 for 循环执行操作,在该循环中,我正在替换一个变量,该变量应指示对数据进行子集化的现有变量的名称

这是循环,但出现错误:

list1=c("name1","name2",...)
list2=c("name1","name2",...)

for (name in 1:2) {
g=ggplot(data=data[paste("data$MEPS %in% list",name,sep=""),], 
     aes(x=Year, y=RR, colour=MEPS, group=MEPS 
       ))+
geom_line()+geom_point()+scale_y_continuous(breaks=seq(0, 100, 10))+
print(g)
}

但是我收到以下错误:

Error in seq.default(h[1], h[2], length = n) : 
'to' cannot be NA, NaN or infinite 

这看起来应该很容易——基本上我想绘制折线图,​​其中每个图都包含list1list2中命名的某些区域的信息

编辑:为了澄清,这段代码“应该”做的是生成两个 ggplot 对象,一个有 3 行,另一个有 2 行。这 3 行代表我想要显示的项目,它们是 %in% list1,对于 list2 也是如此。这就是这里混乱的原因。

【问题讨论】:

  • 这可能更容易通过在数据框中定义一个新的因子变量来实现,该变量将 MEPS 映射到 listx。然后尝试将该变量用作一个组。
  • 你能更好地解释一下吗?我是 R 新手,虽然你的回答可能很好,但我不确定我是否知道我需要做什么。
  • 嗨,如果你必须那样做,那么你应该像这样评估你的表达式 data=data[eval(parse(text = paste("data$MEPS %in% list" ,name,sep=""))),]
  • 我试过这样做,但我仍然遇到同样的错误......想法?
  • 实际上您提供的第一行有效!这是最终的解决方案:

标签: r loops ggplot2


【解决方案1】:

@Mamoun Benghezal 提供的代码运行良好!

for (name in 1:2) {
png(paste("plot",name,".png",sep=""),width=800, height=600)
g=ggplot(data=data[eval(parse(text = paste("data$MEPS %in% list",name,sep=""))),],
     aes(x=Year, y=RR, colour=MEPS, group=MEPS))+
geom_line(size=.8)+scale_y_continuous(breaks=seq(0, 100, 10))+labs(y="Response Rate")+
coord_cartesian(ylim=c(0, 100))
print(g)
dev.off()
}

【讨论】:

    【解决方案2】:

    将以下示例视为解决问题的原型。我们有mtcars 数据,并且想要每个原产国的 mpg 与 wt 的线图。

    我可以遍历国家并选择德国车,绘制它们,然后是日本车等等。相反,我为国家/地区定义了一个新因素并根据row.names 进行分配。使用组美学,ggplot 将继续为每个国家绘制一条单独的线。这个特定数据的可视化效果不是很好,但它确实为您提供了一个可以遵循的原型。

    data(mtcars)
    mymtcars<-mtcars
    
    mymtcars$country<- c(rep("JP",3),rep("US",4),rep("DE",7),rep("US",3),"IT",rep("JP",3),rep("US",4),"IT","DE","UK","US",rep("IT",2),"SE")
    
    ggplot(mymtcars, aes(x=wt, y=mpg, group=country)) + geom_line(aes(colour=country))
    

    【讨论】:

    • 感谢@vpipkt,但是如果我想在一个情节中将“DE”和“US”汽车作为两条单独的线绘制在一起,然后再将“IT”和“JP”作为另一个情节中有两条单独的线?这就是我遇到的问题。
    猜你喜欢
    • 2022-08-18
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 2016-07-19
    • 1970-01-01
    相关资源
    最近更新 更多