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