带有 ggplot2 的散点图按 r 中的特定日期间隔着色

Posted

技术标签:

【中文标题】带有 ggplot2 的散点图按 r 中的特定日期间隔着色【英文标题】:Scatter plot with ggplot2 colored by specific dates interval in r 【发布时间】:2021-09-29 15:45:14 【问题描述】:

我正在尝试根据散点图的日期(更具体地说是年份)为散点图分配不同的颜色。 这是我的数据集的样子:

> dput(head(CORt_r100_stack_join_fspec,10))
structure(list(Date = structure(c(16779, 16834, 16884, 16924, 
16973, 16997, 17031, 17184, 17214, 17254), class = "Date"), meanNDVIN_int = c(0.677501157246889, 
0.632728796482024, 0.578636981692124, 0.547002029242488, 0.632635423362751, 
NA, 0.699596252720458, 0.670059391804396, 0.643347941166436, 
0.674034259709311), meanNDVIW_int = c(0.784142418592418, 0.652437451242156, 
0.648319814752948, 0.593432266488189, 0.767890365415717, NA, 
0.779249089832163, 0.71974944410843, 0.715777992826006, 0.685045115352089
), meanNDVIE_int = c(0.703614512017928, 0.701963337684803, 0.488628353756438, 
0.631309466083632, 0.781589421376217, NA, 0.799663418920722, 
0.78910564747191, 0.710962969930836, 0.715644011856453), meanNDVINr_int_f = c(0.677501157246889, 
0.632728796482024, 0.578636981692124, 0.547002029242488, 0.632635423362751, 
0.687343078509066, 0.699596252720458, 0.670059391804396, 0.643347941166436, 
0.674034259709311), meanNDVIWr_int_f = c(0.784142418592418, 0.652437451242156, 
0.648319814752948, 0.593432266488189, 0.767890365415717, 0.749505859407419, 
0.779249089832163, 0.71974944410843, 0.715777992826006, 0.685045115352089
), meanNDVIEr_int_f = c(0.703614512017928, 0.701963337684803, 
0.488628353756438, 0.631309466083632, 0.781589421376217, 0.625916155640988, 
0.799663418920722, 0.78910564747191, 0.710962969930836, 0.715644011856453
), NDVI_N = c(0.17221248, 0.644239685, 0.57222623, 0.558666635, 
0.51654034, 0.42053949, 0.396706695, 0.641767447, 0.641008268, 
0.662841949), NDVI_W = c(0.08182944, 0.69112807, 0.637699375, 
0.629429605, 0.658829525, 0.60621678, 0.57186129, 0.72636742, 
0.724193596, 0.738424976), NDVI_E = c(0.17135712, 0.659222803, 
0.58665977, 0.573081253, 0.533498035, 0.437643585, 0.412841468, 
0.652057206, 0.651854988, 0.670345511), NDVI_U = c(0.40520304, 
0.578414833, 0.455746833, 0.428289893, 0.208847548, 0, 0, 0.475193691, 
0.478691084, 0.505043773)), row.names = c(NA, 10L), class = "data.frame")

我一直在使用此代码针对NDVI_N 绘制meanNDVIN_int

ggplot(CORt_r100_join_fspec_2NDVIday,aes(x=NDVI_N)) + 
  geom_point(aes(y=meanNDVIN_int), colour="red")
  theme_bw()+
  ylab("meanNDVIN_int")+
  xlab("NDVI_N") 

现在我想根据年份、2015 年、2016 年和 2017 年对每个点进行不同的着色(无论颜色如何)。 我已经使用scale_color_manual 函数来介绍日期,但到目前为止没有成功。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我用lubridate 创建了一个year 变量并将其存储为factor 用于discrete 着色。你只是错过了在aes() 中移动color 以通过year 对其进行着色。

# Add year Variable;
CORt_r100_stack_join_fspec <- CORt_r100_stack_join_fspec %>% mutate(
        year = as.factor(lubridate::year(Date))
)


# Plot;
ggplot(CORt_r100_stack_join_fspec,aes(x=NDVI_N)) + 
        geom_point(aes(y=meanNDVIN_int, color = year)) +
        theme_bw() +
        ylab("meanNDVIN_int")+
        xlab("NDVI_N") 

注意:您提供的data 与您的plot-call 中的名称不同。所以我将CORt_r100_join_fspec_2NDVIday 更改为CORt_r100_join_fspec_2NDVIday 以使plotmutate 正常工作。

【讨论】:

【参考方案2】:

这是一个替代方法,您可以在substring Datecolor 中的前 4 个字符

df
ggplot(df,aes(x=NDVI_N)) + 
  geom_point(aes(y=meanNDVIN_int, color=substring(Date,1,4))) +
  labs(color="Year")+
theme_bw()+
  ylab("meanNDVIN_int")+
  xlab("NDVI_N") 

【讨论】:

以上是关于带有 ggplot2 的散点图按 r 中的特定日期间隔着色的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化散点图实战:绘制基础散点图为所有散点添加标签只为大于阈值的散点添加标签

R语言ggplot2可视化:ggplot2可视化分组散点图并使用geom_smooth函数在散点图图中为不同的散点簇添加对应的回归曲线

R语言ggplot2可视化:ggplot2可视化分组散点图并使用geom_smooth函数在散点图图中为不同的散点簇添加对应的回归曲线并使用se参数设置拟合回归线的置信区间

R语言ggplot2可视化散点图并添加平滑曲线WVPlots包BinaryYScatterPlot函数可视化一起中一个变量为二元离散变量的散点图(随着年龄变化是否有健康保险的客户的比例)

带有误差条的散点图

R语言ggplot2可视化数据点重合的散点图数据点有重合使用geom_smooth函数基于lm方法拟合数据点之间的趋势关系曲线自定义数据点的大小色彩添加主标题副标题题注信息