我正在尝试使用ggplot复制此图
pacman::p_load(tidyverse, pls, remotes)
install_github("rwehrens/ChemometricsWithR")
data(gasoline)
wavelengths <- seq(900,1700, 2)
matplot(wavelengths, t(gasoline$NIR), type = "l", lty = 1, xlab = "Wavelength (nm)", ylab = "1/R")
,但似乎无法使其工作。gasoline
数据集是一个棘手的数据集:两个变量中有一个是我从未遇到过的矩阵。2我该如何清理这个数据集以使其整洁?3我尝试了以下方法:
gasoline2 <- as.data.frame(as.matrix(gasoline)) %>%
pivot_longer(cols = -c(octane),
names_to = "wavelength",
values_to = "1/R")
但似乎无法执行此代码:
ggplot(gasoline, mapping = aes(x = wavelengths, y = t(gasoline$NIR)))+
geom_line(mapping = aes(color = octane))
正在返回此错误:
Error in `geom_line()`:
! Problem while computing aesthetics.
ℹ Error occurred in the 1st layer.
Caused by error in `check_aesthetics()`:
! Aesthetics must be either length 1 or the same as the data (60)
✖ Fix the following mappings: `x` and `y`
Backtrace:
1. base (local) `<fn>`(x)
2. ggplot2:::print.ggplot(x)
4. ggplot2:::ggplot_build.ggplot(x)
5. ggplot2:::by_layer(...)
12. ggplot2 (local) f(l = layers[[i]], d = data[[i]])
13. l$compute_aesthetics(d, plot)
14. ggplot2 (local) compute_aesthetics(..., self = self)
15. ggplot2:::check_aesthetics(evaled, n)
3条答案
按热度按时间njthzxwz1#
@user7264给出的答案是正确的,只是在添加新变量 wavelength 时有一点错误,它应该是一个数值变量,而不是一个字符。因此,考虑到这个响应和颜色问题,我建议的答案如下:
这就产生了这个图。
我希望这是有用的!😃
kt06eoxx2#
这是非常接近的。如果你关心特定的颜色,你可以使用
scale_color_manual()
或其他一些scale_color_*()
函数。iyfamqjs3#
**但是,我无法找出scale_color_gradient语法来匹配颜色
编辑:感谢前两张海报,这里是我最后的复制品!