0

我有如下所示的数据,我想使用 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,反之亦然,如下图所示,这也可以从图例中看出:阴谋

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

我第一次没有在 aes() 中尝试过 ifelse(),它已被用于空间生态学和 R以及这个stackoverflow 问题

其次,这篇文章与此处链接的可能重复的文章不同,因为该问题适用于时间序列数据,情节不同并且给出了多种颜色。我还可以为这里显示的颜色提供第三列,我想要一个有效的解决方案。

4

1 回答 1

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

于 2018-10-02T19:57:14.630 回答