#r #ggplot2
#r #ggplot2
Вопрос:
Я работаю в R, и у меня есть таблица из трех столбцов:
Date
, столбец датpnl
, непрерывный столбец double. Тем не менее, этот столбец в основном = 0 и несколько раз ! = 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()
Я хочу построить график с помощью ggplot:
Date, on the x axis
cumsum(pnl)
, на оси y в виде линейного графика- Я хочу добавлять точку поверх
cumsum(pnl)
линейного графика всякийpnl
раз, когда значение отличается от0
.
Я попробовал следующее:
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)))
Но это выдает ошибку. Есть идеи, как решить эту проблему? Большое спасибо.
Комментарии:
1. Пожалуйста, предоставьте некоторые примеры данных
Ответ №1:
Попробуйте создать переменную для цвета следующим образом:
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')
Вывод:
Или более настраиваемый:
#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'))
Вывод:
Для прозрачного цвета:
#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')
Вывод:
Комментарии:
1. Это здорово, тем не менее, есть ли способ не иметь цвета вместо красного, когда pnl == 0? Или цвет, который не был бы виден, например, белые точки на белом фоне, когда pnl == 0 и синие точки в противном случае?
2. @Vitomir Позвольте мне настроить серый цвет на ноль!
3. @Vitomir Я добавил обновление. Я надеюсь, что это может быть полезно для того, что вы хотите!