Je travaille en R et j'ai un tibble de trois colonnes :

  • Date, une colonne de dates
  • pnl, une colonne continue de double. Néanmoins, cette colonne est la plupart du temps = 0 et quelques fois != 0.
Date <- structure(c(16636, 16667, 16698, 16728,16759, 16789, 16820, 16851), class = "Date") 
pnl = structure(c(0, 0, 5, 0, 10, 2.2, 0, 0))          
df <- cbind(Date,pnl) %>% as_tibble()

Je veux tracer avec ggplot :

  • Date, on the x axis
  • cumsum(pnl), sur l'axe des y sous forme de tracé linéaire
  • Je souhaite ajouter un point au-dessus du tracé linéaire cumsum(pnl) chaque fois que la valeur pnl est différente de 0.

J'ai essayé ce qui suit:

ggplot(data = df) + 
    geom_line(aes(x = Date, y = cumsum(pnl)), color = "blue") +
    geom_point(aes(x = Date, y = ifelse(pnl != 0, cumsum(pnl),0), color = ifelse(pnl != 0,1,0)))

Mais cela me donne une erreur. Une idée de comment régler ça ? Merci beaucoup.

0
Vitomir 8 oct. 2020 à 23:10

1 réponse

Meilleure réponse

Essayez de créer une variable pour la couleur comme ceci :

library(tidyverse)
#Data
Date <- structure(c(16636, 16667, 16698, 16728,16759, 16789, 16820, 16851), class = "Date") 
pnl = structure(c(0, 0, 5, 0, 10, 2.2, 0, 0))          
df <- data.frame(Date,pnl)
#Color
df$Color=ifelse(df$pnl!= 0,1,0)
#Plot
ggplot(data = df) + 
  geom_line(aes(x = Date, y = cumsum(pnl)), color = "blue") +
  geom_point(aes(x = Date, y = ifelse(pnl != 0, cumsum(pnl),0),color=factor(Color)))+
  scale_x_date(date_labels = '%Y-%m-%d')

Production:

enter image description here

Ou plus personnalisé :

#Plot 2
ggplot(data = df) + 
  geom_line(aes(x = Date, y = cumsum(pnl)), color = "blue") +
  geom_point(aes(x = Date, y = ifelse(pnl != 0, cumsum(pnl),0),color=factor(Color)))+
  scale_x_date(date_labels = '%Y-%m-%d')+
  scale_color_manual('Value',values=c('red','blue'))

Production:

enter image description here

Pour la couleur transparente :

#Plot 3
ggplot(data = df) + 
  geom_line(aes(x = Date, y = cumsum(pnl)), color = "blue") +
  geom_point(aes(x = Date, y = ifelse(pnl != 0, cumsum(pnl),0),color=factor(Color)))+
  scale_x_date(date_labels = '%Y-%m-%d')+
  scale_color_manual('Value',values=c('transparent','blue'))+
  theme(legend.position = 'none')

Production:

enter image description here

2
Duck 8 oct. 2020 à 20:26