Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.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:如何从scale\u fill\u manual()调用中获取ScaleDiscrete对象的字符表示形式,以便在ggplot2中正确解析_R_Ggplot2 - Fatal编程技术网

R:如何从scale\u fill\u manual()调用中获取ScaleDiscrete对象的字符表示形式,以便在ggplot2中正确解析

R:如何从scale\u fill\u manual()调用中获取ScaleDiscrete对象的字符表示形式,以便在ggplot2中正确解析,r,ggplot2,R,Ggplot2,我的问题的数据集: set.seed(1) dfr2 <- tibble(x1 = factor(sample(letters[1:3], 50, replace = T), levels=letters[1:3]), x2 = factor(sample(letters[1:2], 50, replace = T), levels=letters[1:2]), x3 = factor(sample(letters[1:3], 50, r

我的问题的数据集:

set.seed(1)
dfr2 <- tibble(x1 = factor(sample(letters[1:3], 50, replace = T), levels=letters[1:3]),
             x2 = factor(sample(letters[1:2], 50, replace = T), levels=letters[1:2]),
             x3 = factor(sample(letters[1:3], 50, replace = T), levels=letters[1:3]),
             grpA = factor(sample(c("grp1","grp2"),50, prob=c(0.3, 0.7) ,replace=T), levels = c("grp1", "grp2")),
             grpB = factor(sample(c("grp1","grp2"),50, prob=c(0.6, 0.4) ,replace=T), levels = c("grp1", "grp2"))
             )

head(dfr2)


为三级因子(“x1”、“x3”)和二级因子(“x2”)创建自定义颜色比例:

在色阶的字符串表示形式上调用class函数会显示这些对象是字符对象:

class(col_scales2[1])
class(col_scales2[2])

因此,它们是不相同的:

identical(factor_3lev_col_scale, col_scales2[1])
identical(factor_2lev_col_scale, col_scales2[2])

当我尝试将自定义颜色比例的字符串表示形式指定给“col_scal”,然后将“col_scal”与ggplot2::ggplot()一起使用时,它失败了:

for(gvar in names(dfr2)[4]){
  for(mvar in names(dfr2)[1:3])  {
    
    if (mvar %in% names(dfr2[c(1,3)])) {
      col_scal <- col_scales2[1]
    } else {
      col_scal <- col_scales2[2]
    }   
    print(ggplot(plot_data_prepr(dfr2, gvar, mvar),
                 aes(x = !!sym(mvar), y = pct2, fill = !!sym(mvar))) +
      geom_bar(stat = 'identity') +
      ylim(0,1) +
      geom_text(aes(label=pct_lab, y = pct_pos + .02)) +
      col_scal +  
      facet_grid(as.formula(paste0(".~", gvar))) +
      ggtitle(paste0(mvar, " by ", gvar)))
  }
}

for(名称中的gvar(dfr2)[4]){
用于(名称中的mvar(dfr2)[1:3]){
如果(mvar%在%名称中(dfr2[c(1,3)]){

请用这个。它很好用

if (mvar %in% names(dfr2[c(1,3)])) {
      col_scal <- eval_tidy(as.name(col_scales2[2]))
    } else {
      col_scal <- eval_tidy(as.name(col_scales2[1]))
    } 
if(mvar%in%names(dfr2[c(1,3)]){
col_scal
class(factor_3lev_col_scale)
class(factor_2lev_col_scale)

class(col_scales2[1])
class(col_scales2[2])

identical(factor_3lev_col_scale, col_scales2[1])
identical(factor_2lev_col_scale, col_scales2[2])

for(gvar in names(dfr2)[4]){
  for(mvar in names(dfr2)[1:3])  {
    
    if (mvar %in% names(dfr2[c(1,3)])) {
      col_scal <- col_scales2[1]
    } else {
      col_scal <- col_scales2[2]
    }   
    print(ggplot(plot_data_prepr(dfr2, gvar, mvar),
                 aes(x = !!sym(mvar), y = pct2, fill = !!sym(mvar))) +
      geom_bar(stat = 'identity') +
      ylim(0,1) +
      geom_text(aes(label=pct_lab, y = pct_pos + .02)) +
      col_scal +  
      facet_grid(as.formula(paste0(".~", gvar))) +
      ggtitle(paste0(mvar, " by ", gvar)))
  }
}

for(gvar in names(dfr2)[4]){
  for(mvar in names(dfr2)[1:3])  {
    
    if (mvar %in% names(dfr2[c(1,3)])) {
      col_scal <- factor_3lev_col_scale
    } else {
      col_scal <- factor_2lev_col_scale
    }   
    print(ggplot(plot_data_prepr(dfr2, gvar, mvar),
                 aes(x = !!sym(mvar), y = pct2, fill = !!sym(mvar))) +
      geom_bar(stat = 'identity') +
      ylim(0,1) +
      geom_text(aes(label=pct_lab, y = pct_pos + .02)) +
      col_scal +  
      facet_grid(as.formula(paste0(".~", gvar))) +
      ggtitle(paste0(mvar, " by ", gvar)))
  }
}

if (mvar %in% names(dfr2[c(1,3)])) {
      col_scal <- eval_tidy(as.name(col_scales2[2]))
    } else {
      col_scal <- eval_tidy(as.name(col_scales2[1]))
    }