ifelse() 条件对于 ggplot 无法正常工作

ifelse() condition not working correctly for ggplot

我有如下所示的数据,我想使用 ggplot 进行绘图:

> C
State        C1           C2
1   var1 -5.3458708  2.4959909437
2   var2 -5.1344963  2.4385834964
3   var3 -5.0972730  2.8425796581
4   var4  0.3743154 -0.2244166193
5   var5  0.4102937 -0.6597997849
6   var6  0.2252697 -0.2681201215
7   var7 -2.1813244  0.8744499423
8   var8 -2.1879480  0.9329252014
9   var9 -2.4635253  1.0975828789
10 var10 -3.1579603  1.3480216825
11 var11 -3.3255364  1.4333042550
12 var12 -3.0378333  1.2389625856
13 var13  4.4218140 -0.0897113458
14 var14  5.1222106  0.8949353025
15 var15  5.6032688  0.4346656081
16 var16  3.5892269 -0.1845360437
17 var17  3.9025834  0.0008319954
18 var18  3.6995580  0.1258706884
19 var19  0.4185548  0.5899289156
20 var20  0.4571535  0.1595539675
21 var21  0.6146784 -0.0438042841
22 var22  8.5871265  2.6205985329
23 var23  9.3172001  3.0164859344
24 var24  9.1885141  2.9251166107

我想以这样的方式绘制此数据:如果 C1 的值大于 C2,则图上的数据点显示绿色,如果 C2 的值大于 C1,则图上的数据点显示红色。实现此目的的代码如下:

p <- ggplot(C, aes(C1, C2,label = State)) + 
  modelr::geom_ref_line(h = 0) +
  modelr::geom_ref_line(v = 0) +
  geom_point(aes(color= ifelse(c(abs(C$C1)) > c(abs(C$C2)), "green", "red"))) +
  guides(fill = guide_legend(reverse=TRUE)) +
  xlab("First Principal Component") +
  ylab("Second Principal Component") + 
  ggtitle("First Two Principal Components of my data")

p2 <- p + geom_text_repel(segment.color = NA)

但是 ifelse() 条件是相反的,即它给出红色,其中 C1 的值大于 C2,反之亦然,如下图所示,这也可以从图例中看出:

我还想将图例标题更改为 "Suposed title",将来自 C1 的数据点的标签更改为 "Column1",将来自 C2 的数据点的标签更改为 "Column2"。这怎么可能?

我还没有第一次在 aes() 中尝试 ifelse() 它已在 spatial ecology and R and also in this Whosebug question 中使用。

其次,这个 post 与链接的 for possible duplication because that question is applied to time series data, the plot is different and there numerous colors are given. I could also come up with a third column for colors like the one shown 不同,但我想要一个有效的解决方案。

也许你可以尝试这样的事情:

library(tidyverse)
C %>% 
  mutate(color = if_else(abs(C1) > abs(C2), "Condition 1", "Condition 2")) %>% 
  ggplot(aes(x = C1, y = C2, label = State, color = color)) +
  geom_point() +
  scale_color_manual(
    values = c("Condition 1" = "green", "Condition 2" = "red"),
    name = "New title"
  ) +
  ggrepel::geom_text_repel(color = "black")

if_else 操作是一个矢量化命令,它根据您在上面概述的条件创建一个新变量。 运行 它在绘图操作之前使它更容易可视化正在发生的事情。