用离散颜色绘制连续数据

时间:2018-03-26 11:21:39

标签: r ggplot2 colors

我发现了一些类似的问题,但答案并没有解决我的问题。

我尝试将变量的时间序列绘制为散点图,并使用日期为点着色。在这个例子中,我创建了一个简单的数据集(见下文),我想分别在1960年代,70年代,80年代和90年代用一种颜色绘制带有时间步长的所有数据。

使用标准绘图命令(plot(x,y,...))它的工作方式应该如此,因为我尝试使用ggplot库时会发生一些奇怪的事情,我想我想念一些东西。有谁知道如何解决这个问题并生成正确的情节?

这是我的代码使用标准plot命令和colorbar

# generate data frame with test data
x <- seq(1,40)
y <- seq(1,40)
year <- c(rep(seq(1960,1969),2),seq(1970,1989,2),seq(1990,1999))
df <- data.frame(x,y,year)

# define interval and assing color to interval
myinterval <- seq(1959,1999,10)
mycolors <- rainbow(4) 
colbreaks <- findInterval(df$year, vec = myinterval, left.open = T)

# basic plot 
layout(array(1:2,c(1,2)),widths =c(5,1)) # divide the device area in two panels 
par(oma=c(0,0,0,0), mar=c(3,3,3,3))
plot(x,y,pch=20,col = mycolors[colbreaks])

# add colorbar
ncols <- length(myinterval)-1
colbarlabs <- seq(1960,2000,10)
par(mar=c(5,0,5,5))
image(t(array(1:ncols, c(ncols,1))), col=mycolors, axes=F)
box()
axis(4, at=seq(0.5/(ncols-1)-1/(ncols-1),1+1/(ncols-1),1/(ncols-1)), labels=colbarlabs, cex.axis=1, las=1) 
abline(h=seq(0.5/(ncols-1),1,1/(ncols-1)))
mtext("year",side=3,line=0.5,cex=1)

basics scatter plot with colorbar

因为我想使用ggplot包,就像我对其他图一样,我用ggplot尝试了这个版本

# plot with ggplot
require(ggplot2)
ggplot(df, aes(x=x,y=y,color=year)) + geom_point() +
  scale_colour_gradientn(colours= mycolors[colbreaks]) 

plot with ggplot

但它没有像我想象的那样工作。显然,颜色编码有问题。此外,colorbar看起来很奇怪。我也尝试使用scale_color_manual和scale_color_gradient2,但我得到了更多的错误(continuous_scale中的错误)。

任何想法如何解决这个问题并根据包含颜色条的标准图3生成图。

0 个答案:

没有答案