如何为两个不同的图形设置相同的色阶?

时间:2015-06-23 03:46:14

标签: r ggplot2

我有这种数据集

lat        long       val
41.69   -71.566389    0.25756813
41.69   -71.566389    0.325883146
42.86   -71.959722    0.897783941
42.86   -71.959722    0.621170816
42.37   -71.234167    0.224426988
41.84   -71.143333    0.048329645

我的完整数据集中val的范围是0-1。 我想创建两个数字,一个绘制0-1的所有值,另一个绘制0.5-1的值。 但两者必须采用相同的色标

我知道我可以将它们分组并创建两个数字。但我不知道如何以相同的色标制作它们。

目前,我有这段代码:

library(ggplot2)
library(maps)
usamap <- map_data("state")
myPalette <- colorRampPalette(rev(brewer.pal(10, "Spectral")))
ggplot(data=df,aes(x=long,y=lat,color=val)) + 
  geom_polygon( data=usamap, aes(x=long, y=lat,group=group),colour="black", fill="white" )+
  geom_point(size = 0.01)+
  scale_colour_gradientn(name = "Range",colours = myPalette(10))+
  xlab('Longitude')+
  ylab('Latitude')+
  theme_bw()

1 个答案:

答案 0 :(得分:4)

您只需将limits选项添加到scale_colour_gradientn即可。例如:

#Simulate some example data
set.seed(1123)
df = data.frame(lon = rnorm(100), lat = rnorm(100), val = runif(100))

# Define colour palette
library(RColorBrewer)
myPalette <- colorRampPalette(rev(brewer.pal(10, "Spectral")))

# Make plots
library(ggplot2)

## All points
ggplot(df, aes(x = lon, y = lat, colour = val)) + geom_point() + 
  scale_colour_gradientn(name = "Range",colours = myPalette(10), limits = c(0, 1)) +
  theme_bw() + xlim(-3, 3) + ylim(-3, 3)

## Subset
ggplot(subset(df, val >= 0.5), aes(x = lon, y = lat, colour = val)) + geom_point() + 
  scale_colour_gradientn(name = "Range",colours = myPalette(10), limits = c(0, 1)) +
  theme_bw() + xlim(-3, 3) + ylim(-3, 3)

结果:

Example colour scale