r - 如何在ggplot2中显示obs的方向(标题)
问题描述
如何使用 ggplot2 显示观察的方向(航向)?有没有办法调整shape=17
(三角形)使其“指向”下一次观察?
示例代码
library(ggplot2)
dat <- data.frame(id = c(1, 1, 2, 2, 3, 3),
time = c(1, 2, 1, 2, 1, 2),
x = c(.1, .2, .3, .4, .5, .6),
y = c(.6, .25, .4, .33, .2, .51))
ggplot(dat, aes(x, y, color=factor(id))) +
geom_point(shape=17) +
# geom_line() +
NULL
解决方案
我们可以在使用andggplot2::geom_segment
重塑数据后使用
:dplyr
tidyr::pivot_wider
dat <- data.frame(id = c(1, 1, 2, 2, 3, 3),
time = c(1, 2, 1, 2, 1, 2),
x = c(.1, .2, .3, .4, .5, .6),
y = c(.6, .25, .4, .33, .2, .51))
library(dplyr)
library(tidyr)
library(ggplot2)
dat %>%
pivot_wider(names_from = time, values_from = c(x, y)) %>%
ggplot(aes(x=x_1, y=y_1, color=factor(id))) +
geom_segment(aes(xend = x_2, yend = y_2),
arrow = arrow(length = unit(.3,"cm"))) +
labs(x="x", y="y", color="id")
编辑:
但我只希望箭头指向没有线条。
我不确定我们应该如何处理每个 id 的第二点(因为它没有方向)但是如果我们想从图中省略它们,我们可以这样做:
library(dplyr)
library(tidyr)
library(ggplot2)
dat %>%
group_by(id) %>%
arrange(id, time) %>%
mutate(x_2 = x + 0.0001 * (lead(x) - x),
y_2 = y + 0.0001 * (lead(y) - y)) %>%
filter(!is.na(x_2)) %>%
ggplot(aes(x=x, y=y, color=factor(id))) +
geom_segment(aes(xend = x_2, yend = y_2),
arrow = arrow(length = unit(.3,"cm"))) +
labs(x="x", y="y", color="id")
或者,如果我们希望箭头指向下一个测量值,与颜色无关,我们可以使用下面的代码(现在由于没有方向,只缺少最后一个点):
library(dplyr)
library(tidyr)
library(ggplot2)
dat %>%
arrange(id, time) %>%
mutate(x_2 = x + 0.0001 * (lead(x) - x),
y_2 = y + 0.0001 * (lead(y) - y)) %>%
filter(!is.na(x_2)) %>%
ggplot(aes(x=x, y=y, color=factor(id))) +
geom_segment(aes(xend = x_2, yend = y_2),
arrow = arrow(length = unit(.3,"cm"))) +
labs(x="x", y="y", color="id")
如果我们想保留“最后”的措施,我们可以将它们添加到geom_point
另一层......
推荐阅读
- c# - 来自 grpc AsyncServerStreamingCall 的高 CPU 使用率
- android-jetpack-compose - 在 DrawScope 中绘制文本 - Jetpack Compose Desktop
- node.js - Express 应用程序中的随机 socket.io 请求
- android - 自定义列表视图未出现在对话框中
- django - 尽管创建了独特的 slug 函数,但 blog_post.slog 上的 IntegrityError UNIQUE
- python - 从列中的唯一值创建一个较小的数据框
- python - 如何设置 Django 模型的每日更新限制
- javascript - jQuery- 使用 ajax 发送不同的 data-id 属性
- javascript - 从缓存中删除查询而不重新获取反应查询
- java - 调试 Java 程序以从列出的特征中找到正确的人