线ggplot2周围的缓冲区
我想要一张图表,作为一年中某一天的函数,在x和y轴(每个轴都是一个单独的度量标准)中,从0 - > 100%前进。 根据数据相对于一年中的某一天的情况,我想说明这是好还是不好。 很简单,我可以像这样展示它:
所以上面的图表显示我们处于良好的状态,因为“小费”(最黑暗的最大分数)超过了50%的标准(并且假设我们在一年中是50%)。 但我想在水平线和垂直线周围添加渐变线以显示更多细微差别。 下面是对这些区域的解释(第一张图是解释...,第二张是我想在ggplot中显示的方式......区域完全填充。
这是我进入ggplot多远:
我遇到的问题:
问题1-2是否可以解决? 如果任何人有更好的方法不使用geom_line
,请随时提出建议。
编辑:随着线条的移动,渐变也将如此,所以静态背景在这里不起作用。
代码如下:
dff <- data.frame(x = 1:60+(runif(n = 60,-2,2)),
y = 1:60+(runif(n = 60,-2,2)),
z = 1:60)
dfgrad <- data.frame(static = c(rep(50,1000)), line = seq(0,100,length.out=100))
## To see the gradientlines thinner, change the size on the geom_line to like 200
ggplot(dff,aes(x,y)) +
geom_line(data = dfgrad, aes(x=static, y=line, color=line),size=1000,alpha=0.5) +
geom_line(data = dfgrad, aes(x=line, y=static, color=line),size=1000,alpha=0.5) +
scale_colour_gradientn( colours = c( "yellow", "darkgreen","darkred"),
breaks = c( 0, 3, 100),
limits = c( 0,100)) +
geom_hline(yintercept = 50, linetype="dashed") +
geom_vline(xintercept = 50, linetype="dashed") +
geom_point(aes(alpha=dff$z,size= (dff$z))) +
theme(legend.position="none") +
scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0))
最终编辑:提交的答案是正确的,但为了根据“今天”的线条更改渐变,我不得不再捣乱它,所以我将它粘贴到这里以防万一它对任何人都有用:
g1 <- colorRampPalette(c("darkgreen", "darkgreen","red"))(20) %>%
alpha(0.3) %>% matrix(ncol=1) %>% # up and down gradient
rasterGrob(width = 1, height = 1) # full-size (control it by ggplot2)
g2 <- colorRampPalette(c("yellow", "darkgreen","red"))(20) %>%
alpha(0.3) %>% matrix(nrow=1) %>% # left and right gradient
rasterGrob(width = 1, height = 1)
timeOfYear <- 5
maxx <- max(timeOfYear,(100-timeOfYear))
ggplot(dff,aes(x,y)) +
annotation_custom(g1, xmin = timeOfYear-maxx, xmax = timeOfYear+maxx, ymin = timeOfYear-maxx, ymax = timeOfYear+maxx) +
annotation_custom(g2, xmin = timeOfYear-maxx, xmax = timeOfYear+maxx, ymin = timeOfYear-maxx, ymax = timeOfYear+maxx) +
# annotation_custom(g1, xmin = 35, xmax = 65, ymin = -3, ymax = 100) +
# annotation_custom(g2, xmin = -3, xmax = 100, ymin = 35, ymax = 65) +
geom_hline(yintercept = timeOfYear, linetype="dashed") +
geom_vline(xintercept = timeOfYear, linetype="dashed") +
geom_point(aes(alpha=dff$z,size= (dff$z))) +
theme(legend.position="none") +
coord_cartesian(xlim = c(0, 100), ylim = c(0, 100), expand = F)
如果我是你,我会通过grid
package制作矩形, grid
使用annotation_custom()
将它们放在图上。 (你的问题1是由于重叠,尝试alpha=0.05
)
这是我的例子:
library(ggplot2); library(grid); library(dplyr)
g1 <- colorRampPalette(c("yellow", "darkgreen","darkred"))(20) %>%
alpha(0.5) %>% matrix(ncol = 1) %>% # up and down gradient
rasterGrob(width = 1, height = 1) # full-size (control it by ggplot2)
g2 <- colorRampPalette(c("cyan", "darkgreen","darkblue"))(20) %>%
alpha(0.5) %>% matrix(nrow = 1) %>% # left and right gradient
rasterGrob(width = 1, height = 1)
ggplot(dff,aes(x,y)) +
annotation_custom(g1, xmin = 35, xmax = 65, ymin = -3, ymax = 100) +
annotation_custom(g2, xmin = -3, xmax = 100, ymin = 35, ymax = 65) +
geom_hline(yintercept = 50, linetype="dashed") +
geom_vline(xintercept = 50, linetype="dashed") +
geom_point(aes(alpha=dff$z,size= (dff$z))) +
theme(legend.position="none") +
coord_cartesian(xlim = c(-3, 100), ylim = c(-3, 100), expand = F)
[EDITED]
这里是我的方法来保持相同程度的渐变为每一个年份(我提到@Amit Kohli的代码)(左图是概念);
# I added both limits colors as outside colors
# to avoid that graph becomes almost green when timeOfYear is about 50.
g1.2 <- c(rep("yellow", 5), colorRampPalette(c("yellow", "darkgreen","red"))(20), rep("red", 5)) %>%
rev() %>% alpha(0.3) %>% matrix(ncol=1) %>% rasterGrob(width = 1, height = 1)
g2.2 <- c(rep("yellow", 5), colorRampPalette(c("yellow", "darkgreen","red"))(20), rep("red", 5)) %>%
alpha(0.3) %>% matrix(nrow=1) %>% rasterGrob(width = 1, height = 1)
timeOfYear <- 5
ggplot(dff, aes(x, y)) +
annotation_custom(g1.2, timeOfYear - 100, timeOfYear + 100, timeOfYear - 100, timeOfYear + 100) +
annotation_custom(g2.2, timeOfYear - 100, timeOfYear + 100, timeOfYear - 100, timeOfYear + 100) +
geom_hline(yintercept = timeOfYear, linetype="dashed") +
geom_vline(xintercept = timeOfYear, linetype="dashed") +
geom_point(aes(alpha=dff$z,size= (dff$z))) +
theme(legend.position="none") +
coord_cartesian(xlim = c(0, 100), ylim = c(0, 100), expand = F)
如果你需要, SpaDES::divergentColors()
为你提供一个非对称范围的颜色矢量(可能有些包有类似的功能)。
library(SpaDES)
timeOfYear <- 5
# ?divergentColors(start.color, end.color, min.value, max.value, mid.value = 0, mid.color = "white")
# It makes a vector of colors (length: max.value - min.value)
# and you can define mid.color's val (i.e., position)
g3 <- divergentColors("yellow", "red", 0, 100, timeOfYear, mid.color = "darkgreen") %>%
rev() %>% alpha(0.3) %>% matrix(ncol = 1) %>% rasterGrob(width = 1, height = 1)
g4 <- divergentColors("yellow", "red", 0, 100, timeOfYear, mid.color = "darkgreen") %>%
alpha(0.3) %>% matrix(nrow = 1) %>% rasterGrob(width = 1, height = 1)
ggplot(dff,aes(x,y)) +
annotation_custom(g3, xmin = 0, xmax = 100, ymin = 0, ymax = 90) +
annotation_custom(g4, xmin = 0, xmax = 90, ymin = 0, ymax = 100) +
geom_hline(yintercept = timeOfYear, linetype="dashed") +
geom_vline(xintercept = timeOfYear, linetype="dashed") +
geom_point(aes(alpha=dff$z,size= (dff$z))) +
theme(legend.position="none") +
coord_cartesian(xlim = c(0, 100), ylim = c(0, 100), expand = F)
链接地址: http://www.djcxy.com/p/37013.html
上一篇: buffer areas around lines ggplot2
下一篇: JPA composite primary key from foreign keys with property access