2017-03-18 61 views
1

我想獨立使用色標,即連續和分類比例。ggplot2 - 使用不同類型的色標

我心裏有一個特定的應用程序,其中我有一個簡單的情節像這裏

mtcars %>% 
    mutate(cylcol = factor(if_else(cyl == 6, "six", "not six"))) %>% 
    ggplot(aes(x = mpg, y = wt)) + 
    geom_point(aes(color = drat)) + 
    facet_wrap(~ cyl) 

enter image description here

但我也想highlight border, like in the answer of Seth_P, of a specific condition(我dont't想用填充面的背景!)。例如

mtcars %>% 
    mutate(cylcol = factor(if_else(cyl == 6, "six", "not six"))) %>% 
    ggplot(aes(x = mpg, y = wt)) + 
    geom_point() + 
    geom_rect(xmin = -Inf, xmax = Inf, show.legend = FALSE, 
      ymin = -Inf, ymax = Inf, aes(col = cylcol), fill = "#00000000") + 
    facet_wrap(~ cyl) 

enter image description here

現在我想以 「合」 這兩個,像例如:

mtcars %>% 
    mutate(cylcol = factor(if_else(cyl == 6, "six", "not six"))) %>% 
    ggplot(aes(x = mpg, y = wt)) + 
    geom_point(aes(color = drat)) + 
    geom_rect(xmin = -Inf, xmax = Inf, show.legend = FALSE, 
      ymin = -Inf, ymax = Inf, aes(col = cylcol), fill = "#00000000") + 
    facet_wrap(~ cyl) 

這就產生了一個錯誤Error: Discrete value supplied to continuous scale。這使得一方面感覺到,但另一方面,因爲兩者都使用自變量,所以我想使用「不同的顏色比例」。我可以使用覆蓋圖,如here, where facet colors are plotted over the plot,但我會非常感謝一個更簡單的解決方案。我知道specifying fill and color separately - 但這不是目標。我真的想在不同的尺度上使用顏色。有什麼建議麼 ?

回答

1

我不知道有任何方式同時具有離散和連續的尺度。但是,你可以解決它通過使用geom_point形狀由fill而不是colour填充:

library(ggplot2) 
library(dplyr) 
mtcars %>% 
    mutate(cylcol = factor(if_else(cyl == 6, "six", "not six"))) %>% 
    ggplot(aes(x = mpg, y = wt)) + 
    geom_point(aes(fill = drat), shape = 21) + 
    geom_rect(aes(colour = cylcol), xmin = -Inf, xmax = Inf, 
    ymin = -Inf, ymax = Inf, fill = NA) + 
    facet_wrap(~ cyl) 

demo plot

下面是第二種方式,這可能是有點過於複雜,但通過拆分工作數據並有效地進行手動分割。寬度需要根據y軸標籤大小,圖例大小和繪圖大小進行手動調整。

library(ggplot2) 
library(dplyr) 
library(purrr) 
lims <- list(x = range(mtcars$mpg), y = range(mtcars$wt)) 

make_plot <- function(data) { 
    cyl <- data$cyl[1] 
    if (cyl == 6) { 
    rec_col <- "light blue" 
    } else { 
    rec_col <- "red" 
    } 
    p <- data %>% 
    ggplot(aes(x = mpg, y = wt)) + 
    geom_point(aes(colour = drat)) + 
    geom_rect(xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf, 
       fill = NA, colour = rec_col) + 
    xlim(lims$x) + ylim(lims$y) + 
    facet_wrap(~ cyl) 
    if (cyl != 4) { 
    p <- p + theme(axis.title.y = element_blank(), axis.ticks.y = element_blank(), 
        axis.text.y = element_blank()) 
    } 
    if (cyl != 8) { 
    p <- p + theme(legend.position = "none") 
    } 
    if (cyl != 6) { 
    p <- p + theme(axis.title.x = element_text(colour = "white")) 
    } 
    p 
} 

mtcars %>% 
    split(.$cyl) %>% 
    map(make_plot) %>% 
    grid.arrange(grobs = ., layout_matrix = matrix(1:3, nrow = 1), 
       widths = c(0.32, 0.28, 0.4)) 

demo plot 2

最後,值得一提的,這是considered three years ago但哈德利感到沒有足夠的帶寬發展。

+0

謝謝。在這篇文章中,我已經寫道,我知道使用填充和顏色電子音。但是,在我的實際情節中(這裏沒有顯示),我已經使用填充來填充其他類型的信息。此解決方法也可以工作,但對我無效。 – Drey

+0

對不起@Drey。我知道你知道單獨的美學,只是人們常常不知道'geom_point'的一些形狀使用填充顏色而不是顏色。 –

相關問題