1

我正在可视化一个 4 维数据集。让我们将变量表示为x, y1, y2y3,其中x是日期,y是一个连续变量并且y2, y3是二维向量 的分量(y2, y3)。现在我想为xand绘制一个线图,另外为at pointsy1附加箭头。(y2, y3)(x, y1)

我试过了

ggplot(data=data,aes(x=x,y=y1)) + geom_line() +
      geom_segment(aes(xend=x+y2,yend=y1+y3), arrow = arrow())

但它效果不佳,所以我想我可能需要做一些重新调整。我该怎么做ggplot

更新:我附上了一个示例数据集(连同它的列定义)。该数据集包含从位于整个赤道太平洋的一系列浮标中获取的海洋学和地表气象读数。预计这些数据将有助于理解和预测厄尔尼诺/南方涛动 (ENSO) 周期(来自储存库的描述)。现在,例如,我想x=day, y1=humidity, y2=zon.winds, y3=mer.winds用上面描述的符号进行可视化。

UPDATE2:例如,我想为一个特定的浮标绘制这个 在此处输入图像描述

4

1 回答 1

2

我无法确定您要显示的内容。据我所知,您的数据集有 50 个浮标,每个浮标每天都会进行一次测量。

library(ggplot2)
elnino <- read.table('elnino.txt', col.names=c('buoy','day','latitude','longitude','zon.winds','mer.winds','humidity','air.temp','ss.temp'), as.is=TRUE, na='.')
elnino <- elnino[elnino$humidity > 40,]  # removing a single point that seems to be an outlier.

ggplot(elnino, aes(x=day,y=humidity, group=buoy)) + geom_point()
ggplot(elnino, aes(x=day,y=humidity, group=buoy)) + geom_line()

这给出了这两个结果。 在此处输入图像描述 在此处输入图像描述

我看不到的是你想如何显示 ''zon.winds'' 和 ''mer.winds'' 变量?我认为这些组合给出了一个向量,但是你想把它们放在哪里?你会得到大约 700 个箭头填充你的情节。

更新 在这种情况下,您做对了,您必须使用 geom_segment 并计算 ''x''、''xend''、''y'' 和 ''yend'',请参阅geom_segment

# We select a single buoy
el <- subset(elnino, buoy==1)

library(grid)
ggplot(el, aes(x=day,y=humidity, group=buoy)) + geom_line() + geom_segment(aes(yend=humidity+zon.winds, xend=day+mer.winds), arrow = arrow(length = unit(0.1,"cm")))

然而,这看起来不太好,因为 ''zon.winds'' 和 ''mer.winds'' 中的坐标被视为绝对坐标!因此,要使用它们,我们需要对它们进行一些手动转换。我的价值观是绝对任意的。

el <- transform(el, zon.winds = zon.winds * -0.3, mer.winds=mer.winds * -0.3)

在此处输入图像描述

于 2013-05-31T11:49:03.917 回答