Fläche unter Kurve ggplotly R wird nicht wie erwartet gerendert

Aug 16 2020

Ich habe ein Diagramm mit dem folgenden Datensatz und ggplot2 erstellt

Ich habe den Datensatz in CSV über den folgenden Link heruntergeladen

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

Der Code, den ich verwendet habe, ist wie folgt

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

Als nächstes erstelle ich den Datenrahmen aus der CSV-Datei

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

Jetzt erstelle ich einen Plot mit 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') 

Das obige Diagramm zeigt die Fläche unter den Kurven richtig. Wenn ich jedoch ggplotly ausführe, wird die Fläche unter den Kurven invertiert

ggplotly(p2)

Gibt es eine Möglichkeit, dies zu vermeiden. Der schattierte Bereich scheint sich in einigen Fällen über den Bereich unter den Kurven hinaus zu bewegen und scheint sich in diesem Fall zur Umkehrung der Kurve zu bewegen. Ich bitte jemanden, sich das anzusehen.

Antworten

1 AllanCameron Aug 16 2020 at 19:25

Ich denke, du willst nur geom_areastatt geom_ribbon. Sie können den ersten Wert auch auf 0 setzen, anstatt ihn zu überspringen, um die umgekehrte Füllung des resultierenden Polygons zu verhindern.

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)