r - 用 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
有人能够理解我可以做什么来解决这个问题吗?
预先感谢您的每一个可能的友好答复。
解决方案
可能最简单的方法是按照美学规范将信息添加到变量中。在下面的示例中,我们提供了系列是颜色还是颜色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
推荐阅读
- jpeg - 使用采样因子将柯达 PNG 图像转换为 JP2
- jwt - 无法使用应用令牌对 api.github.com 进行身份验证
- linux - 需要 Jenkins 管道建议
- javascript - Uncaught (in promise) TypeError: Cannot read property 'filter' of undefined in Javascript
- parsing - ANTLR:如何优先考虑解析器规则替代
- zooming - 缩放(开放层)
- java - apache camel-kafka bridgeErrorHandler 不工作
- python - 如果我像人类一样行事(Selenium、Python),网站可以检测到网络抓取吗?
- javascript - 如何在 jQuery 的 $(document).ready() 方法中使用 div id 和 class?
- python-3.x - 如何从csv中删除多个符号