簡體   English   中英

如何將漸變填充應用於ggplot2中的geom_rect對象?

[英]How can I apply a gradient fill to a geom_rect object in ggplot2?

我正在使用ggplot2構建時間序列折線圖,該圖使用geom_rect對象來突出顯示特定的時間序列事件。

出於純粹的美學原因,我有興趣將漸變應用於geom_rect對象,以便在y增加時漸變為白色/透明。

我已經閱讀了其他答案,其中有人建議geom_tile或geom_raster可以提供解決方案。 我對此沒有運氣......對我來說geom_rect似乎是明顯的選擇,因為我可以將時間序列的開頭和結尾指定為邊界。 但是,我希望我被證明是錯的! 如果有人有任何指導,將非常感謝。 我到目前為止的嘗試是:

## READ DATA

file = "Data.csv"
timeSeries <- read.csv(file, header=TRUE)

## CONVERT DATA TO DATE CLASS

timeSeries$Date <- as.Date(timeSeries$Date, "%d/%m/%y")
timeSeries$Date <- as.Date(format(timeSeries$Date, "19%y-%m-%d"))

## SET GEOM_RECT DATA FRAME

event <- c("Event1", "Event2", "Event3")
startDate <- c("15/06/15", "12/07/17", "6/09/18")
finishDate <- c("9/01/16", "18/11/17", "5/11/18")

dates <- cbind(event, startDate, finishDate)
dates <- as.data.frame(dates, rownames=NULL, stringsAsFactors=FALSE)

dates$startDate <- as.Date(dates$startDate, "%d/%m/%y")
dates$startDate <- as.Date(format(dates$startDate, "19%y-%m-%d"))

dates$finishDate <- as.Date(dates$finishDate, "%d/%m/%y")
dates$finishDate <- as.Date(format(dates$finishDate, "19%y-%m-%d"))

## PLOT USING GGPLOT

plot <- ggplot(timeSeries) +
            geom_rect(data=dates, aes(xmin=startDate, xmax=finishDate, ymin=0,     ymax=25), fill="blue", alpha=0.4) +
            geom_line(aes(x=Date, y=Event)) +
            scale_x_date(labels=date_format("19%y")) +
            ggtitle("") +
            xlab("Time Series") +
            ylab("Number") +
theme_minimal()
plot

上面的代碼應該產生這個圖。 數據可以從這里下載。

時間序列

這是我對@ baptiste的想法的實現。 看起來很花哨!

ggplot_grad_rects <- function(n, ymin, ymax) {
  y_steps <- seq(from = ymin, to = ymax, length.out = n + 1)
  alpha_steps <- seq(from = 0.5, to = 0, length.out = n)
  rect_grad <- data.frame(ymin = y_steps[-(n + 1)], 
                          ymax = y_steps[-1], 
                          alpha = alpha_steps)
  rect_total <- merge(dates, rect_grad)
  ggplot(timeSeries) +
    geom_rect(data=rect_total, 
              aes(xmin=startDate, xmax=finishDate,
                  ymin=ymin, ymax=ymax, 
                  alpha=alpha), fill="blue") +
    guides(alpha = FALSE)
}

ggplot_grad_rects(100, 0, 25) + 
  geom_line(aes(x=Date, y=Event)) +
  scale_x_date(labels=date_format("19%y")) +
  ggtitle("") +
  xlab("Time Series") +
  ylab("Number") +
  theme_minimal()

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM