在ggplot2中取消设置现有的scale_fill_discrete或禁止新的比例

时间:2017-09-01 10:37:54

标签: r plot ggplot2 knitr r-markdown

我目前正在尝试将R markdown文档编织为html(或pdf),在某个chunck中我会生成多个图。我通过chunck选项中的fig.cap参数指定字幕,并使用与绘图数量相同的向量。但是,要实现此目的,cunck选项message必须为TRUE。 当chucnk中的函数生成ggplot2对象并且我想要使用viridis::scale_fill_viridis应用新填充时,问题就开始了。这很好,但不可避免地会抛出一条消息/警告,表示已经有一个填充应用于ggplot2对象,并且viridis将替换它(Scale for 'fill' is already present. Adding another scale for 'fill', which will replace the existing scale)。我不想把它变成我的markdown html的输出。使用suppressMessages显然也会抑制html(和pdf!)字幕。 所以我的问题是:有没有办法“取消设置”现有的scale属性以避免生成此消息?简而言之,我唯一的另一个选择就是深入研究首先生成对象的代码。或者:当cunck选项messages=F时,knitr是否有一种方法可以保留字幕?

亲切的问候,

FM

最小的工作示例是R markdown文档中的以下代码:

---
title: "SOtest"
author: "FM Kerckhof"
date: "1/9/2017"
output: html_document
---

```{r setup, include=FALSE}
library(ggplot2)
library(ggthemes)
library(viridis)
knitr::opts_chunk$set(echo = TRUE)
#### custom function ####
creategg <- function(x,plot=FALSE)
{
  datnam <- names(x)
  p <- ggplot(data=x,aes(x=x[,datnam[1]],
                         y=x[,datnam[2]],
                         fill=factor(x[,datnam[ncol(x)]]))) + 
              geom_bar(stat="identity") + 
              scale_fill_gdocs()
  if(plot==TRUE){
    print(p)
  }
  reslist <- list(inputdata=x,ggplotobj=p)
}
```

## Lorem ipsum

Actual report

```{r iriscars, fig.cap=c("plot with default fill","same plot with viridis fill"), echo=FALSE}
a <- creategg(iris,plot=TRUE)
a$ggplotobj + scale_fill_viridis(discrete=TRUE)
```

如果相关,我的session_info()输出是:

Session info -------------------------------------------------------------------------------------------
 setting  value                       
 version  R version 3.4.1 (2017-06-30)
 system   x86_64, linux-gnu           
 ui       RStudio (1.0.153)           
 language (EN)                        
 collate  en_US.UTF-8                 
 tz       Europe/Brussels             
 date     2017-09-01                  

Packages -----------------------------------------------------------------------------------------------
 package      * version date       source        
 ade4           1.7-8   2017-08-09 CRAN (R 3.4.1)
 ape            4.1     2017-02-14 CRAN (R 3.3.2)
 assertthat   * 0.2.0   2017-04-11 CRAN (R 3.3.3)
 backports      1.1.0   2017-05-22 CRAN (R 3.4.0)
 base         * 3.4.1   2017-07-08 local         
 bindr          0.1     2016-11-13 CRAN (R 3.4.0)
 bindrcpp       0.2     2017-06-17 CRAN (R 3.4.0)
 Biobase      * 2.36.2  2017-05-09 Bioconductor  
 BiocGenerics * 0.22.0  2017-05-04 Bioconductor  
 biomformat     1.4.0   2017-05-04 Bioconductor  
 Biostrings     2.44.2  2017-07-24 Bioconductor  
 bitops         1.0-6   2013-08-17 CRAN (R 3.2.4)
 caTools        1.17.1  2014-09-10 CRAN (R 3.2.4)
 cluster        2.0.6   2017-03-16 CRAN (R 3.4.0)
 codetools      0.2-15  2016-10-05 CRAN (R 3.3.1)
 colorspace     1.3-2   2016-12-14 CRAN (R 3.3.2)
 compiler       3.4.1   2017-07-08 local         
 data.table     1.10.4  2017-02-01 CRAN (R 3.3.2)
 datasets     * 3.4.1   2017-07-08 local         
 devtools     * 1.13.3  2017-08-02 CRAN (R 3.4.1)
 digest         0.6.12  2017-01-27 CRAN (R 3.3.2)
 dplyr        * 0.7.2   2017-07-20 CRAN (R 3.4.1)
 evaluate       0.10.1  2017-06-24 CRAN (R 3.4.0)
 extrafont    * 0.17    2014-12-08 CRAN (R 3.4.0)
 extrafontdb    1.0     2012-06-11 CRAN (R 3.4.0)
 foreach        1.4.3   2015-10-13 CRAN (R 3.2.4)
 gdata          2.18.0  2017-06-06 CRAN (R 3.4.0)
 ggplot2      * 2.2.1   2016-12-30 CRAN (R 3.3.2)
 ggthemes     * 3.4.0   2017-02-19 CRAN (R 3.3.2)
 glue           1.1.1   2017-06-21 CRAN (R 3.4.0)
 gplots       * 3.0.1   2016-03-30 CRAN (R 3.2.4)
 graphics     * 3.4.1   2017-07-08 local         
 grDevices    * 3.4.1   2017-07-08 local         
 grid           3.4.1   2017-07-08 local         
 gridExtra      2.2.1   2016-02-29 CRAN (R 3.3.1)
 gtable         0.2.0   2016-02-26 CRAN (R 3.2.4)
 gtools       * 3.5.0   2015-05-29 CRAN (R 3.2.4)
 htmltools      0.3.6   2017-04-28 CRAN (R 3.4.0)
 igraph         1.1.2   2017-07-21 CRAN (R 3.4.1)
 IRanges        2.10.2  2017-06-01 Bioconductor  
 iterators      1.0.8   2015-10-13 CRAN (R 3.2.4)
 jsonlite       1.5     2017-06-01 CRAN (R 3.4.0)
 KernSmooth     2.23-15 2015-06-29 CRAN (R 3.4.0)
 knitr          1.17    2017-08-10 CRAN (R 3.4.1)
 labeling       0.3     2014-08-23 CRAN (R 3.2.4)
 lattice      * 0.20-35 2017-03-25 CRAN (R 3.3.3)
 lazyeval       0.2.0   2016-06-12 CRAN (R 3.3.1)
 magrittr       1.5     2014-11-22 CRAN (R 3.2.4)
 MASS           7.3-47  2017-04-21 CRAN (R 3.4.0)
 Matrix         1.2-11  2017-08-16 CRAN (R 3.4.1)
 memoise        1.1.0   2017-04-21 CRAN (R 3.4.0)
 methods      * 3.4.1   2017-07-08 local         
 mgcv           1.8-19  2017-08-29 CRAN (R 3.4.1)
 multtest       2.32.0  2017-05-04 Bioconductor  
 munsell        0.4.3   2016-02-13 CRAN (R 3.2.4)
 nlme           3.1-131 2017-02-06 CRAN (R 3.3.2)
 parallel     * 3.4.1   2017-07-08 local         
 permute      * 0.9-4   2016-09-09 CRAN (R 3.3.1)
 phyloseq       1.20.0  2017-05-04 Bioconductor  
 pkgconfig      2.0.1   2017-03-21 CRAN (R 3.4.0)
 plyr         * 1.8.4   2016-06-08 CRAN (R 3.3.1)
 R6             2.2.2   2017-06-17 CRAN (R 3.4.0)
 Rcpp           0.12.12 2017-07-15 CRAN (R 3.4.1)
 reshape2     * 1.4.2   2016-10-22 CRAN (R 3.3.2)
 rhdf5          2.20.0  2017-05-04 Bioconductor  
 rlang          0.1.2   2017-08-09 CRAN (R 3.4.1)
 rmarkdown      1.6     2017-06-15 CRAN (R 3.4.0)
 rprojroot      1.2     2017-01-16 CRAN (R 3.3.2)
 Rttf2pt1       1.3.4   2016-05-19 CRAN (R 3.4.0)
 S4Vectors      0.14.3  2017-06-06 Bioconductor  
 scales         0.5.0   2017-08-24 CRAN (R 3.4.1)
 splines        3.4.1   2017-07-08 local         
 stats        * 3.4.1   2017-07-08 local         
 stats4         3.4.1   2017-07-08 local         
 stringi        1.1.5   2017-04-07 CRAN (R 3.3.3)
 stringr        1.2.0   2017-02-18 CRAN (R 3.3.2)
 survival       2.41-3  2017-04-04 CRAN (R 3.3.3)
 tibble         1.3.4   2017-08-22 CRAN (R 3.4.1)
 tools          3.4.1   2017-07-08 local         
 utils        * 3.4.1   2017-07-08 local         
 vegan        * 2.4-4   2017-08-24 CRAN (R 3.4.1)
 viridis      * 0.4.0   2017-03-27 CRAN (R 3.4.1)
 viridisLite  * 0.2.0   2017-03-24 CRAN (R 3.3.3)
 withr          2.0.0   2017-07-28 CRAN (R 3.4.1)
 XVector        0.16.0  2017-05-04 Bioconductor  
 yaml           2.1.14  2016-11-12 CRAN (R 3.3.2)
 zlibbioc       1.22.0  2017-05-04 Bioconductor 

1 个答案:

答案 0 :(得分:1)

看一下ggplot对象,这里是p

str(p)

有很多子结构。看看p$scales。它是ScalesList。以下内容可能对您有所帮助:

i <- which(sapply(p$scales$scales, function(x) 'fill' %in% x$aesthetics)) p$scales$scales[[i]] <- NULL