簡體   English   中英

ggplot2中的透明屏蔽

[英]Transparent masking in ggplot2

我對如何僅在功能區附近包含面板網格線感興趣 - 我可以手動執行此操作,這是一個簡單的例子

library(ggplot2)

d1 <- data.frame(x = seq(0, 1, length.out = 200))
d1$y1 <- -3*(d1$x-.5)^2 + 1
d1$y2 <- -3*(d1$x-.5)^2 + 2

ggplot(d1) +
 geom_ribbon(aes(x, ymin = y1, ymax = y2),
             alpha = .25) +
 geom_ribbon(aes(x, ymax = y1),
             ymin = .25, 
             fill = "white") +
 geom_ribbon(aes(x, ymin = y2),
            ymax = 2, 
            fill = "white") +
 scale_y_continuous(limits = c(.25, 2.0),
                    expand = c(0, 0))+
scale_x_continuous(limits = c(0, 1),
                   expand = c(0, 0))+
theme_bw() +
theme(panel.grid = element_line(linetype = 1, color = "black")) 

剪輯的例子

是否有一些不太常見的方法為這些網格線設置透明遮罩,所以它們只出現在一個色帶下面?

如果網格線與背景顏色相同,則可以刪除實際網格線,然后使用geom_hline()geom_vline()創建自己的“網格線”,這些網格線將顯示在色帶上但在背景中不可見

d1$y3 <- d1$x + 0.3
d1$y4 <- d1$x + 0.4

ggplot(d1) +
  geom_ribbon(aes(x, ymin = y1, ymax = y2), alpha = 0.25) +
  geom_ribbon(aes(x, ymin = y3, ymax = y4), alpha = 0.25, fill = "blue") +
  # use geom_vline and geom_hline to plot "gridlines" on top of ribbons
  geom_hline(yintercept = seq(0, 2, by = 0.25), colour = "white") +
  geom_vline(xintercept = seq(0, 1, by = 0.25), colour = "white") +
  scale_y_continuous(limits = c(.25, 2.0), expand = c(0, 0)) +
  scale_x_continuous(limits = c(0, 1), expand = c(0, 0)) +
  theme_bw() +
  theme(panel.grid.minor = element_blank(), # remove actual gridlines
        panel.grid.major = element_blank())

產生這個: 在此輸入圖像描述

這仍然是一種解決方法,並且只會使網格線與背景顏色相匹配,但它很容易使用各種圖表,例如您提到的多條色帶的情況(我添加了第二個色帶來證明這一點將工作)

暫無
暫無

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

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