我需要在所有图上制作多个具有相同色标的图。有什么办法告诉scale_color_gradientn,例如,即使数据不包含这些值,-10映射为绿色,10映射为红色?
这是一个显示问题的示例。在第一个图中,绿色表示5,在第二个图中,绿色表示15。我希望绿色在两个图中都表示相同的值,例如10。
library( ggplot2)
xa <- ya <- za <- 0:9
xb <- yb <- zb <- 10:19
fma <- data.frame( xa, ya, za)
fmb <- data.frame( xb, yb, zb)
ggplot( fma) +
geom_point( aes( xa, ya, col=za), size=5) +
scale_colour_gradientn(
name='someName',
colours=c('#0000ff', '#00ff00', '#ff0000'))
dev.new()
ggplot( fmb) +
geom_point( aes( xb, yb, col=zb), size=5) +
scale_colour_gradientn(
name='someName',
colours=c('#0000ff', '#00ff00', '#ff0000'))
以下是解决该问题的方法:
# Have fmlim contain the overall min,max, and
# plot fmlim using geom_blank.
library( ggplot2)
xa <- ya <- za <- 0:9
xb <- yb <- zb <- 10:19
fma <- data.frame( xa, ya, za)
fmb <- data.frame( xb, yb, zb)
fmlim <- data.frame(
xa=rep(xa[1], 2),
ya=rep(ya[1], 2),
xb=rep(xb[1], 2),
yb=rep(yb[1], 2),
zlims=c( min( za, zb), max( za, zb)))
ggplot( fma) +
geom_point( aes( xa, ya, col=za), size=5) +
geom_blank( aes( xa, ya, col=zlims), data=fmlim) +
scale_colour_gradientn(
name='someName',
colours=c('#0000ff', '#00ff00', '#ff0000'))
dev.new()
ggplot( fmb) +
geom_point( aes( xb, yb, col=zb), size=5) +
geom_blank( aes( xb, yb, col=zlims), data=fmlim) +
scale_colour_gradientn(
name='someName',
colours=c('#0000ff', '#00ff00', '#ff0000'))
现在绿色在两个图中都表示10,非常好。但这是一团糟。
是否可以告诉scale_colour_gradientn特定数据值映射到特定颜色?我尝试使用“值”,但是映射随着绘制的数据值而改变。
谢谢!