首页 > 解决方案 > R - ggplot 忽略多变量图中的一个变量中的 NA 值

问题描述

我试图在一个图上表示 2 个时间序列变量,以便比较它们;一个在一年内有 365 个值(2016 年的降雨量值),另一个在同一年有 28 个值(从卫星图像中提取的值)。问题是我不知道如何在同一个图上用正确的 x 和 y 轴表示两者。

我通过在 NA 中为只有 28 个值的变量添加行来合并包含我的 2 个变量的两个数据框;现在我有一个包含两个变量的数据框。

这是我的数据框:

> head(VH_meteo_2016, 20)
         date pmm_cat bati_VH_2016
1  2016-01-01   0.000               NA
2  2016-01-02   0.254               NA
3  2016-01-03   0.000     -23.51970255
4  2016-01-04   1.270               NA
5  2016-01-05   4.572               NA
6  2016-01-06   1.016               NA
7  2016-01-07   1.270               NA
8  2016-01-08   0.000               NA
9  2016-01-09   0.000               NA
10 2016-01-10   0.000               NA
11 2016-01-11   0.000               NA
12 2016-01-12   0.000               NA
13 2016-01-13   0.000               NA
14 2016-01-14   0.000               NA
15 2016-01-15   0.000     -18.11035861
16 2016-01-16   3.556               NA
17 2016-01-17   9.652               NA
18 2016-01-18   5.080               NA
19 2016-01-19   0.000               NA
20 2016-01-20   0.000               NA

但是当我尝试绘制一个图时,我只得到了 365 个值变量表示(我不知道为什么),如下所示:

ylim.prim <- c(0, 125)
ylim.sec <- c(-25, -4)

b <- diff(ylim.prim)/diff(ylim.sec)
a <- b*(ylim.prim[1] - ylim.sec[1])

ggplot(VH_meteo_2016, aes(x=date)) +
  geom_bar(aes(y=pmm_cat), stat = "identity", fill="blue") +
  geom_line(aes(y = a + VH_meteo_2016$bati_VH_2016 * b), color = "orange", size=1.25) +
  scale_y_continuous(name="Precipitations (mm)",
                     sec.axis = sec_axis(~ . * -52/125, name = "Backscatter (Sigma0 in dB)"),
                     limits = c(0,150)) +
  ggtitle("Precipitations and backscatter over 2016") +
  xlab("Time") +
  theme_light()

结果 :

来自 https://imgur.com/l6yvXuC

然后我尝试忽略 28 values 变量中的 NA 值,但它也删除了 365 values 变量中的相应值:

ylim.prim <- c(0, 125)
ylim.sec <- c(-25, -4)

b <- diff(ylim.prim)/diff(ylim.sec)
a <- b*(ylim.prim[1] - ylim.sec[1])

VH_meteo_2016=na.omit(VH_meteo_2016)

ggplot(VH_meteo_2016, aes(x=date)) +
  geom_bar(aes(y=pmm_cat), stat = "identity", fill="blue") +
  geom_line(aes(y = a + VH_meteo_2016$bati_VH_2016 * b), color = "orange", size=1.25) +
  scale_y_continuous(name="Precipitations (mm)",
                     sec.axis = sec_axis(~ . * -52/125, name = "Backscatter (Sigma0 in dB)"),
                     limits = c(0,150)) +
  ggtitle("Precipitations and backscatter over 2016") +
  xlab("Time") +
  theme_light()

结果 :

来自 https://imgur.com/AdWmiIk

有没有办法获得第一个结果,但第二个结果的橙色线(对应于 28 个值变量),例如忽略 NA 但仅适用于 28 个值变量?

标签: rggplot2na

解决方案


推荐阅读