簡體   English   中英

向R中的geom_rect添加顏色漸變

[英]Add color gradient to geom_rect in R

我正在嘗試創建一個甜甜圈圖,並且難以添加顏色漸變。 我希望能夠采用所有不同的類別,並將它們從任何顏色變成白色逐漸消失。 是否有捷徑可尋?

data<-data.frame(count=c(39,36,19,6), category=c("a","b","c","d"))
data$fraction = data$count / sum(data$count)
data = data[order(data$fraction), ]
data$ymax = cumsum(data$fraction)
data$ymin = c(0, head(data$ymax, n=-1))

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Create Plot
fill <- c("blue3","cyan3","darkgrey","forestgreen")

p1 = ggplot(data, aes(fill=category, ymax=ymax, ymin=ymin, xmax=4, xmin=3.5)) 
+ geom_rect(colour="White") +
 coord_polar(theta="y") +
 scale_fill_manual(values=fill)+
 theme_bw()+
 theme(panel.grid=element_blank())+
 theme(axis.ticks=element_blank()) +     
 xlim(c(0, 4)) +
 theme(axis.text=element_blank()) +
 labs(title="donut plot")


 print(p1)

使用alpha值控制每個category的陰影。

library(ggplot2)
library(dplyr)

N    <- 100
fill <- c("blue3","cyan3","darkgrey","forestgreen")

data          <- data.frame(count = c(39,36,19,6), category = c("a","b","c","d"))
data$fraction <- data$count / sum(data$count)
data          <- data[order(data$fraction), ]
data$ymax     <- cumsum(data$fraction)
data$ymin     <- c(0, head(data$ymax, n = -1))

data2 <-
  data.frame(count = rep(data$count, each = N),
             category = rep(data$category, each = N),
             ymin = c(0,
                      seq(0.00, 0.06, length = N),
                      seq(0.06, 0.25, length = N),
                      seq(0.25, 0.61, length = N),
                      seq(0.61, 1.00, length = N)[-N]),
             ymax = c(seq(0.00, 0.06, length = N)[-1],
                      seq(0.06, 0.25, length = N),
                      seq(0.25, 0.61, length = N),
                      seq(0.61, 1.00, length = N),
                      1.00))
data2$y <- with(data2, (ymin + ymax)/2)

data2 <- 
  data2 %>%
  group_by(category) %>%
  mutate(alpha = (y - min(y)) / max(y)) %>%
  ungroup()

ggplot(data2) +
  aes(ymax = ymax, ymin = ymin, xmax = 4, xmin = 3.5, fill = category, alpha = alpha) + 
  geom_rect() +
  coord_polar(theta = "y") +
  theme_bw()+
  theme(panel.grid=element_blank()) +
  theme(axis.ticks=element_blank()) +     
  xlim(c(0, 4)) +
  theme(axis.text=element_blank()) +
  labs(title="donut plot") +
  scale_fill_manual(values = fill) +
  guides(alpha = "none")

在此處輸入圖片說明

據我所知,不可能直接執行此操作,但是可以通過擴展數據框並根據半徑設置alpha值來達到類似的效果。 像這樣

data<-data.frame(count=c(39,36,19,6), category=c("a","b","c","d"))
data$fraction = data$count / sum(data$count)
data = data[order(data$fraction), ]
data$ymax = cumsum(data$fraction)
data$ymin = c(0, head(data$ymax, n=-1))

data <- as.data.frame(lapply(data,rep,10))
data$xmin <- rep(0:9,each=4)

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Create Plot
fill <- c("blue3","cyan3","darkgrey","forestgreen")

p1 = ggplot(data, aes(fill=category, ymax=ymax, ymin=ymin, xmin=xmin, xmax=xmin+1)) + geom_rect(aes(alpha=xmin/9)) +
  coord_polar(theta="y") +
  scale_fill_manual(values=fill)+
  scale_alpha_continuous(guide=FALSE)+
  theme_bw()+
  theme(panel.grid=element_blank())+
  theme(axis.ticks=element_blank()) +     
  theme(axis.text=element_blank()) +
  labs(title="donut plot")

print(p1)

在此處輸入圖片說明

暫無
暫無

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

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