簡體   English   中英

ggplot geom_point 顏色基於多個因素

[英]ggplot geom_point colour based on multiple factors

我有一個 dataframe 我正在嘗試 plot 點並根據顏色將它們分開。 如果我只設置一般邊界,例如 values = c("(-Inf,1]" = "green", "(1,2]" = "red", "(2, Inf]" = "黑色")) +

CTD <- c(3, 3,  3,  3,  3,  5,  5,  5,  7,  7,  7,  7,  12, 12, 12, 12, 12, 10, 10, 10, 10, 10, 9,  9,  9,  9,  9,  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 21)
Depth <- c(10,  30, 40, 50, 80, 10, 20, 50, 5,  20, 50, 100,    7,  15, 50, 70, 100,    7,  10, 20, 50, 70, 7,  20, 50, 70, 100,    5,  20, 40, 90, 5,  25, 70, 120,    5,  20, 40, 60, 90)
CN <- c(9.283378839,    6.346533977,    3.75246344, 5.096343091,    5.465256863,    5.424842029,    5.053200886,    1.582119456,    6.20074949, 5.79160957, 6.229882574,    2.419344034,    4.909357185,    3.93951578, 3.700415644,    2.374574914,    2.528295309,    0.825305752,    0.895049775,    2.63447744, 1.081411857,    1.26984798, 4.944151635,    4.346435626,    2.974542787,    2.574266373,    3.043154784,    3.32420804, 3.084480732,    1.576270571,    0.791589174,    3.888050262,    2.177251093,    1.627385084,    2.433798779,    3.097900,   2.749822293,    2.827167853,    1.723315947,    1.207824117)
data <- as.data.frame(CTD, Depth, CN)

(data <- ggplot(data=data, aes(x=CN, y=Depth, group=CTD)) + 
geom_point(aes(colour = cut(CN, c(-Inf, 1, 2, Inf))),
           size = 0.8) +
scale_color_manual(name = "CN",
                   values = c("(-Inf,1]" = "green",
                                            "(1,2]" = "red",
                                            "(2, Inf]" = "black")) +
geom_path(colour="grey", size=0.3) + 
 scale_y_reverse() + 
theme_bw() + 
scale_x_continuous(position = "top") +
theme(plot.background = element_blank(),
      panel.grid.major = element_blank() ,
      panel.grid.minor = element_blank(),
      axis.text = element_text(color = 'black', size=10),
      text = element_text(size=10)))

但是有一些介於 1 和 2 之間的值需要用黑色顯示,而 2.6 的值需要用紅色顯示。 所以這超出了上面設定的限制。

我試圖更具體,如下所示,但只顯示黑點,不再顯示紅點或綠點。 有沒有辦法讓這些特定的點變成紅色和綠色,除此之外的任何東西都是黑色的?

  scale_color_manual(name = "CN",
                  values = c("(1.58]" = "red",
                              "(0.82]" = "green",
                             "(0.89]" = "green",
                              "(2.63]" = "red",
                             "(1.08]" = "red",
                             "(1.26]" = "red",
                             "(1.57]" = "red",
                             "(0.79]" = "green",
                             "(1.2]" = "red",
                              "(2, Inf]" = "black")) +

對於異常值的特定 colors,您需要轉換數據以顯示所需的顏色。 使用您的示例數據,試試這個

data1 <- data.frame(CTD, Depth, CN)
  data2 <- data1 %>% mutate(mycolor1 = case_when(CN<=1 ~ "green", CN>2 ~ "black", CN>1 ~ "red"))
  wantred <- c(2.63447744,3.097900)
  wantblack <- c(1.081411857, 1.26984798, 1.723315947)
  data <- transform(data2, mycolor2 = ifelse(CN %in% wantred, "red", mycolor1)) %>% 
            mutate(mycolor = ifelse(CN %in% wantblack, "black", mycolor2) )
  
  p <- ggplot(data=data, aes(x=CN, y=Depth, group=CTD)) + 
      geom_point(aes(color=mycolor))+
      scale_color_manual(name = "CN", breaks=unique(data$mycolor), values=unique(data$mycolor)) +
      geom_path(colour="grey", size=0.3) + 
      scale_y_reverse() + 
      theme_bw() + 
      scale_x_continuous(position = "top") +
      theme(plot.background = element_blank(),
            panel.grid.major = element_blank() ,
            panel.grid.minor = element_blank(),
            axis.text = element_text(color = 'black', size=10),
            text = element_text(size=10))
 p 

  

output

在此處輸入圖像描述

暫無
暫無

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

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