我有两个数据帧,为同一组坐标提供两个不同时间的温度。我想在两个地块之间使用相同的颜色绘制两个相同的温度;也就是说,我想在两个地块上有一个图例,考虑到两个地块的温度范围不同的事实。
我认为我可以使用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)
我想改变色标,使其相对于两个数字的组合温度,而不是个别数字。这段代码不起作用,但它显示了我想要做的事情:
scale_colour_gradientn(colours = rev(rainbow(4,
start = min(c(dat1$Temp.,dat2$Temp.)),
end = max(c(dat1$Temp.,dat2$Temp.)))))
答案 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)))