首页 > 解决方案 > 在 R 中生成图形时出错:“x”和“y”长度不同

问题描述

你能帮我从下面的代码生成图表吗?它给出以下错误: Error in xy.coords(x, y) : 'x' and 'y' lengths differ. 需要在图形生成中进行一些调整!

谢谢你的帮助!

library(dplyr)

df <- structure(
  list(date = c("2021-06-30","2021-06-30","2021-07-07","2021-07-07","2021-07-09","2021-07-09","2021-07-09","2021-07-16"),
       Code = c("ABC","BCD","ABC","BCD","DCE","CDE","DCE","CDE"),
       Week= c("Wednesday","Wednesday","Wednesday","Wednesday","Friday","Friday","Friday","Friday"),
       DR1 = c(4,1,4,3,3,4,3,5)),
  class = "data.frame", row.names = c(NA, -8L))

dmda<-"2021-06-30"
CodeChosse<-"ABC"

datas <- structure(
  list(Code = c("ABC","ABC"),
       Days = c(11,12),
       Numbers = c(11,12)),
  class = "data.frame", row.names = c(NA, -2L))

f1 <- function(dat, code_nm) {
  dat <- subset(dat,  Code == code_nm)
  
  mxrange <-  range(datas$Numbers) 
  mxrange[2] <- mxrange[2] - (mxrange[2] %%10) + 10
  max<-max(datas$Days, na.rm = TRUE)+1
  dmda<-paste(rev(unlist(strsplit(dmda, "-", fixed = TRUE))), collapse = "/")
  
  plot(Numbers ~ Days,  xlim= c(0,max), ylim= c(0,mxrange[2]),
       xaxs='i',data = dat,main = paste0(dmda, "-", code_nm))

    if (nrow(dat)<=2){
    
  m<-df %>%
    group_by(Code,Week) %>%
    summarize(across(starts_with("DR1"), mean))
  
  m <- subset(m, Week == df$Week[match(dmda, df$date)] & Code == CodeChosse)$DR1
  
   abline(h=m,lwd=2) 
   
    points(0, m, col = "red", pch = 19, cex = 2, xpd = TRUE)
    text(.1,m+ .5, round(m,1), cex=1.1,pos=4,offset =1,col="black")
  }
  
  }

f1(datas, CodeChosse)
> f1(datas, CodeChosse)
 Error in xy.coords(x, y) : 'x' and 'y' lengths differ 

如果你m在函数之外做,它可以工作,据我所见,但我想把它留在函数内。

m<-df %>%
  group_by(Code,Week) %>%
  summarize(across(starts_with("DR1"), mean))

m <- subset(m, Week == df$Week[match(dmda, df$date)] & Code == CodeChosse)$DR1


f1 <- function(dat, code_nm) {
  dat <- subset(dat,  Code == code_nm)
  
  mxrange <-  range(datas$Numbers) 
  mxrange[2] <- mxrange[2] - (mxrange[2] %%10) + 10
  max<-max(datas$Days, na.rm = TRUE)+1
  dmda<-paste(rev(unlist(strsplit(dmda, "-", fixed = TRUE))), collapse = "/")
  
  plot(Numbers ~ Days,  xlim= c(0,max), ylim= c(0,mxrange[2]),
       xaxs='i',data = dat,main = paste0(dmda, "-", code_nm))
  
  if (nrow(dat)<=2){

    abline(h=m,lwd=2) 
    
    points(0, m, col = "red", pch = 19, cex = 2, xpd = TRUE)
    text(.1,m+ .5, round(m,1), cex=1.1,pos=4,offset =1,col="black")
  }
  
}

f1(datas, CodeChosse)

在此处输入图像描述

标签: rplot

解决方案


问题似乎在创建的subset级别-并且“df”的“日期”列中的格式是. 如果我们更改其中任何一个的格式,它可以在dmdaformatdd/mm/YYYYYYYY-MM-DD==

f1 <- function(dat, code_nm) {
  dat <- subset(dat,  Code == code_nm)
  
  mxrange <-  range(datas$Numbers) 
  mxrange[2] <- mxrange[2] - (mxrange[2] %%10) + 10
  max<-max(datas$Days, na.rm = TRUE)+1
  dmda<-paste(rev(unlist(strsplit(dmda, "-", fixed = TRUE))), collapse = "/")
  
  plot(Numbers ~ Days,  xlim= c(0,max), ylim= c(0,mxrange[2]),
       xaxs='i',data = dat,main = paste0(dmda, "-", code_nm))

    if (nrow(dat)<=2){
    
  m<-df %>%
    group_by(Code,Week) %>%
    summarize(across(starts_with("DR1"), mean), .groups = 'drop')
  
  
  m <- subset(m, Week == df$Week[match(dmda, format(as.Date(df$date), "%d/%m/%Y"))] & Code == CodeChosse)$DR1
 
   abline(h=m,lwd=2) 
   
    points(0, m, col = "red", pch = 19, cex = 2, xpd = TRUE)
    text(.1,m+ .5, round(m,1), cex=1.1,pos=4,offset =1,col="black")
  } 
  
  }

-测试

f1(datas,  CodeChosse)

-输出

在此处输入图像描述


推荐阅读