El área bajo la curva ggplotly R no se representa según las expectativas

Aug 16 2020

Creé una trama con el siguiente conjunto de datos y ggplot2

Descargué el conjunto de datos en CSV desde el siguiente enlace

https://www.kaggle.com/dataset/e392d3cfbb5749653d5c82f4bec1daa03628fb06d374fad84eac319f1b3f982422

El código que he usado es el siguiente

 library(readr)
 library(ggplot2)
 library(plotly)

A continuación, creo el marco de datos a partir del archivo CSV.

DF <- read_csv("C:/Users/mysystem/Desktop/Random3.csv")####Please set your working directory here

Ahora creo una trama usando ggplot

p2<-ggplot(DF, aes(x=Col1, y=Col2, group=ID)) +
 geom_line(size=.5) +  geom_ribbon(data=subset(DF, Col1>1  ),aes(x=Col1,ymax=Col2, 
fill=ID),ymin=0,alpha=0.3 ) +
scale_fill_manual(name='Legend', values=c("green4",  "red"), labels=c("A", "B" ))+labs(x="Col1", 
y="Col2")+ xlim(0, 10000)+ theme_bw()# +theme(legend.position='none') 

El gráfico anterior muestra correctamente el área bajo las curvas. Sin embargo, cuando ejecuto ggplotly, el área bajo las curvas se invierte

ggplotly(p2)

¿Hay alguna manera de evitar esto? El área sombreada parece moverse más allá del área bajo las curvas en algunos casos y, en este caso, parece moverse hacia el inverso de la curva. Pido a alguien que eche un vistazo.

Respuestas

1 AllanCameron Aug 16 2020 at 19:25

Creo que solo estás queriendo geom_areaen lugar de geom_ribbon. También puede establecer el primer valor en 0 en lugar de omitirlo para evitar el relleno inverso que tiene el polígono resultante.

library(ggplot2)
library(plotly)

DF <- read.csv("Random3.csv")

DF$Col2[DF$Col1 == 0] <- 0

p2 <- ggplot(DF, aes(x = Col1, y = Col2, group = ID)) +
        geom_line(size = 0.5) +  
        geom_area(aes(x = Col1, fill = ID), alpha = 0.3, 
                  position = "identity") +
        scale_fill_manual(name = 'Legend', 
                          values = c("green4", "red"), 
                          labels = c("A", "B")) + 
        labs(x = "Col1", y = "Col2") + 
        xlim(0, 10000) + 
        theme_bw()

p2 

ggplotly(p2)