![](/img/trans.png)
[英]ggplot2 colour geom_point by factor but geom_smooth based on all data
[英]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.