R ggplot2 - 共享颜色刻度的多图绘制

3
我有两个数据框,它们分别给出了相同坐标的两个不同时刻的温度。我想将两个数据框绘制在一起,并使用相同的颜色表示两个图之间相同温度的点;也就是说,我想要一个图例来表示两个数据框的温度范围不同的情况。
我认为我可以使用 scale_colour_manual(),但是我不确定如何在这种情况下实现它(因为我的真实数据有成千上万个观测值)。以下是我目前所拥有的内容的示例:
# Create sample data

dat1 <- data.frame(c(-158.28, -158.27, -158.26),
                   c(21.57, 21.56, 21.57), c(24, 22, 25))
names(dat1) <- c('x', 'y', 'Temp.')


dat2 <- data.frame(c(-158.28, -158.27, -158.26),
                   c(21.57, 21.56, 21.57), c(22, 20, 23))
names(dat2) <- c('x', 'y', 'Temp.')


# Create plots

plot1 <- ggplot(dat1, aes(x,y)) + geom_point(aes(color = Temp.)) +
         scale_colour_gradientn(colours = rev(rainbow(4))) +
         theme(
         title = element_text('January 1, 1990 at 00:00'),
         legend.position = 'none') +
         ggtitle('Jan. 1, 1990 00:00')


plot2 <- ggplot(dat2, aes(x,y)) + geom_point(aes(color = Temp.)) +
         scale_colour_gradientn(colours = rev(rainbow(4))) + theme(
         title = element_text('August 18, 2007 at 02:00'),
         legend.position = 'none') +
         ggtitle('Aug. 18, 2007 14:00')


# Combine plots

grid.arrange(plot1, plot2, ncol = 2, nrow = 1, respect = T)

我想改变颜色比例尺,使其相对于两个图形的组合温度而不是各自的温度。 这段代码不能工作,但它展示了我想要做什么:

Code output

scale_colour_gradientn(colours = rev(rainbow(4, 
    start = min(c(dat1$Temp.,dat2$Temp.)),
    end = max(c(dat1$Temp.,dat2$Temp.)))))
1个回答

4

在ggplot2中,如果您使用多个面板制作单个图表,则此类内容会变得更加容易 - 请尝试以下操作:

# Add identifiers to each set
dat1$dtime <- 'Jan. 1, 1990 00:00'
dat2$dtime <- 'Aug. 18, 2007 14:00'

# Stack them
dat_all <- rbind(dat1, dat2)


# Plot all at once
ggplot(dat_all, aes(x = x, y = y, color = `Temp.`)) +
    geom_point() +
    facet_wrap( ~ dtime) +
    scale_colour_gradientn(colours = rev(rainbow(4)))

非常好,谢谢!然而,将“Temp.”放在重音符号内会出现错误。一旦它们被移除,就可以完美运行了。 - ndem763

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接