ggplot rcolorbrewer扩展并应用于因子数据

时间:2017-05-30 18:43:36

标签: r ggplot2

紧迫的截止日期意味着如果之前有人问过,我已经没时间绊倒了这么多道歉。

我无法弄清楚如何(或者如果可能)将略微扩展的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

2 个答案:

答案 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 = Temperaturegroup = Temperature factor(Temperature))在代码中使用这些内容。然后使用scale_color_distiller(palette = "YrOrRd")scale_color_viridis()

enter image description here

enter image description here

enter image description here

最后,要修复标签,使用以下内容会更容易:

ggplot(...) + ... + 
  labs(x = "Wavelength (nm)",
       y = "CD Intensity (mdeg)",
       color = "Temperature",
       title = "My title")