ifelse()条件不适用于ggplot

时间:2018-10-02 19:40:35

标签: r ggplot2 aesthetics

我有以下要使用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的颜色为红色,反之亦然,如下图所示,这也可以从图例中看到:plot < / p>

我还想将图例标题更改为“假定标题”,并将C1的数据点的标签命名为“ Column1”,C2的数据点的标签命名为“ Column2”。这怎么可能?

我尚未在spatial ecology and R和此stackoverflow question中首次使用aes()中的ifelse()。

第二,此帖子与链接的here可能重复有所不同,因为该问题适用于时间序列数据,图不同,并且给出了多种颜色。我还可以为第三列提供类似here的颜色,但我想有一个有效的解决方案。

1 个答案:

答案 0 :(得分:2)

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

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操作是矢量化命令,可根据您上面概述的条件创建一个新变量。在绘图操作之前运行它可以使可视化变得更加容易。