R ggplot2 - 具有共同色标的多个图

时间:2016-03-17 19:25:28

标签: r ggplot2

我有两个数据帧,为同一组坐标提供两个不同时间的温度。我想在两个地块之间使用相同的颜色绘制两个相同的温度;也就是说,我想在两个地块上有一个图例,考虑到两个地块的温度范围不同的事实。

我认为我可以使用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 个答案:

答案 0 :(得分: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)))