是否有转换或指示ggplot将Dates列解释为连续变量?
我的数据(df
)如下所示:
Location Date Value
56.28,-36.57 2011-01-10 32
56.28,-36.57 2010-02-08 40
52.24,-36.58 2010-03-22 18
52.24,-36.58 2011-06-14 39
52.25,-36.59 2012-04-10 41
52.25,-36.59 2010-04-09 38
我尝试使用以下命令绘制数据:
g=ggplot(df) + geom_boxplot(aes(factor(Location),Value, col=Date))+ geom_jitter(aes(factor(Location),Value),size=1) + scale_colour_gradient(low='red',high='green')
但收到以下错误消息:
Error: Discrete value supplied to continuous scale
如果我将Date转换为Date对象(例如col=as.Date(Date)
),则会收到以下错误:
Error in unit(tic_pos.c, "mm") : 'x' and 'units' must have length > 0
目标是让Date列指示点的颜色,最早的日期颜色为红色,后面的日期颜色渐变为绿色。
答案 0 :(得分:5)
一个选项是将日期列包装在as.numeric
中。但是,正如@Hadley在评论中指出的那样,trans
中的scale_colour_gradient
参数的值可以为date
。这具有显示日期值而非数字的图例的附加好处(相对于我之前发布的内容)。
这是完全的:
另请注意,我已将col
参数移至geom_jitter
(不是geom_boxplot
)
ggplot(df) + geom_boxplot(aes(factor(Location),Value)) +
geom_jitter(aes(factor(Location),Value, col=Date),size=2) + # <~~~ col
scale_colour_gradient(trans="date", low="red", high="green") +
xlab("Location")
之前的回复,使用as.numeric
保留进行比较
您可以将列包裹在as.numeric
中。此外,我将col
参数移至geom_jitter
(不是geom_boxplot
)。
ggplot(df) + geom_boxplot(aes(factor(Location),Value))+
geom_jitter(aes(factor(Location),Value, col=as.numeric(Date)),size=2) +
scale_colour_gradient(low='red',high='green') +
theme(legend.position="none") + xlab("Location")
答案 1 :(得分:1)
您可以尝试获取Date列的最小值和最大值,并将日期映射到0到1范围内的刻度。
df$Date=as.POSIXct(df$Date)
min=min(df$Date)
max=max(df$Date)
as.numeric(difftime(df$Date,min,units='days'))/as.numeric(difftime(max,min,units='days'))
[1] 0.42426474 0.00000000 0.05298048 0.61992950 1.00000000 0.07570895
将其添加到您的数据框中,您应该开展业务。