首页 > 解决方案 > 用 geom_smooth(,) 绘制多种颜色,在 ggplot2 中有四个变量的双 y 轴

问题描述

我对带有 R 的 ggplot2 绘图系统有疑问。

我想打印一个图表,散点图 + 平滑,两个等级 ( ref) 和两个变量 ( Vix, monomer),vix 指的是左 y 轴,单体指的是右 y 轴。我想ref在 130°C 时有红色和蓝色的深色,在 150°C 时有相同但浅色的颜色。颜色如下,但对于理解它并不重要:'#644196'、'#bba6d9'、'#f92410'、'#fca49c'。通过这种方式,我将获得 4 条具有 4 种不同颜色的线条。

我曾经根据命令定义颜色: scale_color_manual(values=c('#644196', '#bba6d9', '#f92410', '#fca49c')) +

问题是我获得了 4 行但只有两种颜色,而且图例只有两个分配(而不是我预期的 4 个)。看起来它改变了 的颜色,ref并且没有为两个变量Vix和分配任何颜色变化monomer

下面我报告整个代码。

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

得到的输出图

有人能够理解我可以做什么来解决这个问题吗?

预先感谢您的每一个可能的友好答复。

标签: rggplot2colors

解决方案


可能最简单的方法是按照美学规范将信息添加到变量中。在下面的示例中,我们提供了系列是颜色还是颜色paste0()的额外信息。Vixmonomer

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

在此处输入图像描述


推荐阅读