Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中使用ggplot在设定坐标处放置标签?_R_Ggplot2 - Fatal编程技术网

如何在R中使用ggplot在设定坐标处放置标签?

如何在R中使用ggplot在设定坐标处放置标签?,r,ggplot2,R,Ggplot2,我试图在ggplot中手动设置geom_标签的坐标。问题是我的图是一个圆(不是以零为中心)…我试图找出一种方法来“扩展”标签的x&y位置,所以它们被推出。。。希望下面的例子能解释我的意思 旁白:有一个类似的答案。。。哪一个有用。。。但是我不太确定这个答案的代码中到底发生了什么。我希望找到一个相对简单的解决方案。这是我的问题 如果我有一个如下所示的数据帧: df <- data.frame( x = c(5.000000e-01, 8.090170e-01, 1.000000e+00,

我试图在ggplot中手动设置
geom_标签的坐标。问题是我的图是一个圆(不是以零为中心)…我试图找出一种方法来“扩展”标签的x&y位置,所以它们被推出。。。希望下面的例子能解释我的意思

旁白:有一个类似的答案。。。哪一个有用。。。但是我不太确定这个答案的代码中到底发生了什么。我希望找到一个相对简单的解决方案。这是我的问题

如果我有一个如下所示的数据帧:

df <- data.frame(
  x = c(5.000000e-01, 8.090170e-01, 1.000000e+00, 1.000000e+00, 8.090170e-01,
        5.000000e-01, 1.909830e-01, 5.836788e-17, 0.000000e+00, 1.909830e-01),
  y = c(1.0000000, 0.9045085, 0.6545085, 0.3454915, 0.0954915, 
        0.0000000, 0.0954915, 0.3454915, 0.6545085, 0.9045085)
)

labels <- paste0("A", 1:10)
然而,上面的代码是错误的。。。因为,目前,
LmatX
LmatY
中的零值被一减去(而它们应该保持零!)。 我的想法是,我可以使用通过
LmatX
LmatY
获得的值,并将其与原始
df$x
df$y
相乘(或添加…不确定哪个)以创建一组新的坐标来放置标签


关于如何实现这一点,有什么建议吗?

我想出了解决这个问题的办法。根据我在问题中提出的方法。。。我第一次在-1和1之间缩放(我在问题中缩放不正确)

然后我用标签的坐标创建了一个新的数据框:

df_2 <- data.frame(newX, newY)
其结果是:

LmatX <- (-1 - 1) * ((df$x - min(df$x)) / (max(df$x) - min(df$x))) +1
LmatY <- (-1 - 1) * ((df$y - min(df$y)) / (max(df$y) - min(df$y))) +1
LmatX <- ifelse(LmatX > 0, LmatX + 1, LmatX - 1)
LmatY <- ifelse(LmatY > 0, LmatY + 1, LmatY - 1)
LmatX <- (1 - -1) * ((df$x - min(df$x)) / (max(df$x) - min(df$x))) + -1
LmatY <- (1 - -1) * ((df$y - min(df$y)) / (max(df$y) - min(df$y))) + -1
newX <- ifelse(LmatX > 0, df$x + 0.05, ifelse(LmatX < 0, df$x - 0.05, df$x))
newY <- ifelse(LmatY > 0, df$y + 0.05, ifelse(LmatY < 0, df$y - 0.05, df$y))
df_2 <- data.frame(newX, newY)
p <- ggplot(df, aes(x, y)) +
  geom_point() +
  geom_label(data =  df_2, aes(x = newX, y = newY, label = labels)) +
  theme_void()
p