ggplot2:跨许多绘图的统一色标

时间:2018-08-23 02:10:33

标签: r ggplot2

我需要在所有图上制作多个具有相同色标的图。有什么办法告诉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特定数据值映射到特定颜色?我尝试使用“值”,但是映射随着绘制的数据值而改变。

谢谢!

0 个答案:

没有答案