[英]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.