簡體   English   中英

Plot 帶有 geom_smooth(,) 多種顏色,雙 y 軸,ggplot2 中有四個變量

[英]Plot with geom_smooth(,) multiple colours, double y-axis with four variables in ggplot2

我的 ggplot2 繪圖系統與 R 有問題。

我想打印一個圖表,散點圖 + 平滑有兩個等級( ref )和兩個變量( Vixmonomer ),其中 vix 指的是左邊的 y 軸,單體指的是右邊的 y 軸。 我想在 130°C 時為ref使用紅色和藍色深色,在 150°C 時使用相同但較淺的顏色。 顏色如下,但對於理解來說並不重要:'#644196'、'#bba6d9'、'#f92410'、'#fca49c'。 通過這種方式,我將獲得 4 條線和 4 種不同的顏色。

我曾經根據命令定義顏色:scale_color_manual(values=c('#644196', '#bba6d9', '#f92410', '#fca49c')) +

問題是我獲得了 4 行,但只有兩種顏色,而且圖例只有兩個分配(而不是我預期的 4 個)。 看起來它改變了ref的顏色,並且它沒有為兩個變量Vixmonomer分配任何顏色變化。

下面我報告整個代碼。

Dati <- data.frame("Vix" = c(62500, 87000, 122000, 140000, 82700, 73000, 110000, 110000, 140300, 81500), "monomer" = c(0.089,0.08,0.095,0.1,0.111, 0.09, 0.094, 0.099, 0.111, 0.197), "Time" = c(30, 60, 90, 120, 135, 30, 60, 90, 120, 135), "ref" = c('130°C', '130°C', '130°C', '130°C', '130°C', '150°C', '150°C', '150°C', '150°C', '150°C'))
attach(Dati)
library(ggplot2)
library(readxl)


####Graph processing

scaleFactor <- max(Vix) / max(monomer)
Graph <- ggplot(Dati, aes(x= Time, col=(ref))) +


geom_point(aes(y= Vix, col=(ref)), shape = 1, size = 3.5) +
geom_smooth(aes(y= Vix), method="loess") +  


geom_point(aes(y= monomer * scaleFactor, col=ref), shape = 1, size = 3.5) + 
geom_smooth(aes(y=monomer * scaleFactor), method="loess") +  

scale_color_manual(values=c('#644196', '#bba6d9', '#f92410', '#fca49c')) +

  scale_y_continuous(name="Vix", sec.axis=sec_axis(~./scaleFactor, name="monomer")) +
  theme(
    axis.title.y.left=element_text(color='#f92410'),
    axis.text.y.left=element_text(color='#f92410'),
    axis.title.y.right=element_text(color='#644196'),
    axis.text.y.right=element_text(color='#644196')
  ) 

Graph

獲得output圖

有人能夠理解我可以做什么來解決這個問題嗎?

預先感謝您的每一個可能的回復。

你有 2 colors 因為你映射到顏色的變量( ref )有 2 個不同的值。 我想您希望每個ref值都有Vixmonomer曲線。 您可以通過將數據轉換為長格式並創建引用溫度和 Vix 或單體的新變量來實現:

scaleFactor <- max(Dati$Vix) / max(Dati$monomer)

第 1 步:計算monomer ,創建列,告訴您值是 Vix 還是單體(這兩個變量的長格式),然后重新創建ref

Dati <- Dati %>%
  mutate(
    monomer = monomer * scaleFactor
  ) %>%
  pivot_longer(cols = c(Vix, monomer)) %>%
  mutate(ref = str_c(ref, name, sep = "-"))

第 2步 map ref顏色美學(長格式對於ggplot2來說很整潔)

ggplot(Dati, aes(Time, value, color = ordered(ref, levels = unique(ref)))) +
  geom_point(shape = 1, size = 3.5) +
  geom_smooth(method = "loess") +
  scale_color_manual("groups", values = c('#fca49c', '#bba6d9', '#f92410', '#644196')) +
  scale_y_continuous(name = "Vix", sec.axis = sec_axis(~./scaleFactor, name = "monomer")) +
  theme(
    axis.title.y.left = element_text(color = '#f92410'),
    axis.text.y.left = element_text(color = '#f92410'),
    axis.title.y.right = element_text(color = '#644196'),
    axis.text.y.right = element_text(color = '#644196')
  ) 

結果

在此處輸入圖像描述

可能最簡單的方法是在美學規范中向變量添加信息。 在下面的示例中,我們paste0()系列是Vix還是monomer的額外信息粘貼到顏色。

Graph <- ggplot(Dati, aes(x= Time)) +
  geom_point(aes(y= Vix, col=paste0("Vix ", ref)), shape = 1, size = 3.5) +
  geom_smooth(aes(y= Vix, col = paste0("Vix ", ref)), method="loess") +  
  geom_point(aes(y= monomer * scaleFactor, col=paste0("Monomer ", ref)), shape = 1, size = 3.5) + 
  geom_smooth(aes(y=monomer * scaleFactor, col = paste0("Monomer ", ref)), method="loess") +  
  scale_color_manual(values=c('#644196', '#bba6d9', '#f92410', '#fca49c'),
                     name = "Series?") +
  scale_y_continuous(name="Vix", sec.axis=sec_axis(~./scaleFactor, name="monomer")) +
  theme(
    axis.title.y.left=element_text(color='#f92410'),
    axis.text.y.left=element_text(color='#f92410'),
    axis.title.y.right=element_text(color='#644196'),
    axis.text.y.right=element_text(color='#644196')
  ) 

Graph

在此處輸入圖像描述

暫無
暫無

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

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