穿过轮廓线的小箭头

问题描述 投票:0回答:1

我正在使用 R 版本 4.3.2 (2023-10-31)。

我正在为函数的特定级别的 2 个变量的函数绘制等高线。我这样做是为了同一块地块上的两个不同的函数。我想在靠近每条轮廓线的某个点添加一个小箭头,显示函数增加的方向。任何方向都可以,但梯度方向(在该点)将是最好的。

这里是一些示例代码,可以创建我想要的轮廓线。现在,我如何在靠近轮廓线的某一点为每条线添加一个箭头,以显示函数增加的方向?

library(tidyverse)
x <- seq(1,2,length.out=100)
y <- seq(1,2,length.out=100)
myf <- function(x,y) {x*y}
myg <- function(x,y) {x^2 + y^2}
d1 <- expand.grid(X1 = x, X2 = y) %>%
  mutate(Z = myf(X1,X2)) %>%
  as.data.frame()
d2 <- expand.grid(X1 = x, X2 = y) %>%
  mutate(Z = myg(X1,X2)) %>%
  as.data.frame()
ggplot(data = d1, aes(x=X1,y=X2,z=Z))+
  stat_contour(breaks = c(2)) +
  stat_contour(data=d2, aes(x=X1,y=X2,z=Z), breaks=c(6))
r ggplot2 contour
1个回答
0
投票

您可以使用

geom_segment
在绘图中创建自定义箭头线。您可以像这样指定坐标:

library(tidyverse)
ggplot(data = d1, aes(x=X1,y=X2,z=Z))+
  stat_contour(breaks = c(2)) +
  stat_contour(data=d2, aes(x=X1,y=X2,z=Z), breaks=c(6)) +
  geom_segment(data = data.frame(x = c(1.25, 1.75),
                                 xend = c(1.5, 1.5),
                                 y = c(1.5, 1.75),
                                 yend = c(1.25, 2)), 
               aes(x = x, y = y, xend = xend, yend = yend),
               inherit.aes = FALSE,
               arrow = arrow(length = unit(0.5, "cm")))

创建于 2024-01-11,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.