u-genoma / BioinfinvRepro

Curso de introducción a la bioinformática e investigación reproducible
GNU General Public License v3.0
25 stars 38 forks source link

Error con legend en Rmarkdown al compilar con knit #3

Open cata-aranda opened 4 years ago

cata-aranda commented 4 years ago

Hola! Tuve el siguiente error al tratar de compilar el siguiente gráfico en Rmarkdown:

### Cargar datos 
```{r}
data <- read.delim("../data/reads.txt")
head(data)
### Colores para graficar
palette(c("#bf5746","#9559b7","#668f43" ))

Construir barplot de número de lecturas por muestra

barplot(data$nreads, 
        names.arg = data$sample, 
        xlab = "Muestras", 
        ylab = "Número de lecturas",
        col= data$Library,
        main = "Número de lecturas por librería")

Agregar leyenda

legend(x="topleft",legend=levels(data$Library),fill=palette())

Error in strwidth(legend, units = "user", cex = cex, font = text.font) : plot.new has not been called yet

El error estaba en agregar en un chunk de código aparte la leyenda, por lo que R no encontraba el gráfico para agregar la leyenda. Finalmente esa parte del código queda así

```{r}
barplot(data$nreads, 
        names.arg = data$sample, 
        xlab = "Muestras", 
        ylab = "Número de lecturas",
        col= data$Library,
        main = "Número de lecturas por librería")
legend(x="topleft",legend=levels(data$Library),fill=palette())

Espero que se de utilidad mi aprendizaje :) Saludos

AliciaMstt commented 4 years ago

Hola,

El problema es que estás corriendo legend() en otro chunck de código, independiente del plot. Entonces, como Rmarkdown corre chunck por chunk de forma idependiente, ya hizo la gráfica en el chunck de arriba, entonces como legend() no crea un plot por si mismo, sino que pone una leyenda en un plot en construcción, no puede funcionar en un chunk separado. Se arregla si pones el comando de la leyenda en el chunck de código anterior, o si repites el código de plot en el chunk de código de la leyenda.