紧迫的截止日期意味着如果之前有人问过,我已经没时间绊倒了这么多道歉。
我无法弄清楚如何(或者如果可能)将略微扩展的RColorBrewer调色板应用于ggplot线图中的因子数据。
我在已经融化的数据框中有以下3个可变数据(很多数据点,所以我不会在这里全部粘贴)。
> head(spec.melt)
Temperature Wavelength CD_Intensity
1 20 260 0.0807910
2 25 260 0.3019320
3 30 260 0.1363325
4 35 260 0.0000000
5 40 260 0.1354045
6 45 260 0.0000000
... # tail(spec.melt)
Temperature Wavelength CD_Intensity
5635 65 185 0.2499200
5636 70 185 2.5051893
5637 75 185 0.4399785
5638 80 185 4.4368350
5639 85 185 2.0015100
5640 90 185 2.8696540
对于每个温度(25-90),进行波长扫描(260nm-190nm),收集CD强度,因此在该df中有15个260-190nm测量值的光谱崩溃。
到目前为止我可以绘制这个图表,并且应用了默认的ggplot主题。由于系列数据将是温度,我想用显示它的主题(例如RColorBrewers“RdYlBu”)为它们着色。
我有15个温度,默认情况下“RdYlBu”是11色谱。
这是我的代码:
# Import spectrum data
spectrum.obj <- read.table(spectrum,
sep = ",",
header = TRUE,
row.names = 1,
check.names = FALSE)
spec.melt <- melt(t(spectrum.obj), value.name = "CD_Intensity", varnames=c("Temperature","Wavelength"))
# # Plot and customise spectrum space
spectrum.img <- ggplot(spec.melt, aes(x=Wavelength, y=CD_Intensity, group=factor(Temperature)))
spectrum.img <- spectrum.img + geom_line(aes(color=factor(Temperature)))
# Axis titles
spectrum.img <- spectrum.img + ylab("CD Intensity (mdeg)") +
xlab("Wavelength (nm)") +
guide_legend(title="my awesome title")
# Make transparent
spectrum.img <- spectrum.img + theme_bw()
spectrum.img <- spectrum.img + theme(legend.position = "bottom",
legend.title = element_text("test"),
plot.background = element_blank(),
panel.background = element_blank(),
legend.background = element_blank())
spectrum.img
目前,如果我将geom_line(aes(color=factor(Temperature)))
更改为其他内容,则会中断。
对于奖励积分,如果有人能告诉我为什么legend.title
没有产生任何太棒的东西,就像目前一样,我仍然坚持“因素(温度)”
编辑: 这是原始数据(以CSV格式) https://pastebin.com/ZwtvU8Kq
答案 0 :(得分:2)
这并不能回答您的确切问题,但如果您要查找的只是三种颜色之间的渐变,则可以生成手动缩放:
colours <- colorRampPalette(c("blue", "yellow", "red"))(15)`
您可以修改颜色的确切版本(深色与红色)以稍微调整此比例。然后,只需使用通常的:
scale_color_manual("Awesome title",
labels = as.character(seq(20, 90, length.out = 15)),
values = colours)
我无法在没有数据的情况下运行您的代码,但如果您删除了其他图例标题代码,则应该修复您的图例标题。
<强>更新强>
以下内容适用于您的代码(ggplot2 2.2.1):
library(reshape)
library(ggplot2)
# Import spectrum data
spectrum.obj <- read.table('test.csv',
sep = ",",
header = TRUE,
row.names = 1,
check.names = FALSE)
spec.melt <- melt(t(spectrum.obj), varnames=c("Temperature","Wavelength"))
# # Plot and customise spectrum space
spectrum.img <- ggplot(spec.melt, aes(x=Wavelength, y=value, group=factor(Temperature)))
spectrum.img <- spectrum.img + geom_line(aes(color=factor(Temperature)))
# Changing colour
colours <- colorRampPalette(c("blue", "yellow", "red"))(15)
spectrum.img <- spectrum.img +
scale_color_manual("Awesome title",
labels = as.character(seq(20, 90, length.out = 15)),
values = colours)
# Axis titles
spectrum.img <- spectrum.img + ylab("CD Intensity (mdeg)") +
xlab("Wavelength (nm)")
# Make transparent
spectrum.img <- spectrum.img + theme_bw()
spectrum.img <- spectrum.img + theme(legend.position = "bottom",
plot.background = element_blank(),
panel.background = element_blank(),
legend.background = element_blank())
答案 1 :(得分:2)
我特别建议不要使用 RdYlBu ,因为它是一个不同的调色板。这会使您偏向规模的高端和低端。而是尝试一个感知统一的调色板,如 YlOrRd ,甚至更好,一个来自viridis
包。
您可以通过colour = Temperature
和group = Temperature
(不 factor(Temperature)
)在代码中使用这些内容。然后使用scale_color_distiller(palette = "YrOrRd")
或scale_color_viridis()
。
最后,要修复标签,使用以下内容会更容易:
ggplot(...) + ... +
labs(x = "Wavelength (nm)",
y = "CD Intensity (mdeg)",
color = "Temperature",
title = "My title")