代码之家  ›  专栏  ›  技术社区  ›  Ammar Sabir Cheema

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

  •  0
  • Ammar Sabir Cheema  · 技术社区  · 6 年前

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

    >c
    状态C1 C2
    1个变量1-5.3458708 2.4959909437
    2变量2-5.1344963 2.4385834964
    3个变量3-5.0972730 2.8425796581
    4变量4 0.3743154-0.2244166193
    5变量5 0.4102937-0.6597997849
    6变量6 0.2252697-0.2681201215
    7变量7-2.1813244 0.8744499423
    88-2.1879480 0.9329252014
    99-2.4635253 1.0975828789
    1010-3.1579603 1.3480216825
    11 var11-3.3255364 1.4333042550
    1212-3.0378333 1.2389625856
    13变量13 4.4218140-0.0897113458
    1414 5.1222106 0.8949353025
    1515 5.6032688 0.4346656081
    16 var16 3.5892269-0.1845360437
    17变量17 3.9025834 0.0008319954
    1818 3.6995580 0.1258706884
    1919 0.4185548 0.5899289156
    2020 0.4571535 0.1595539675
    2121 0.6146784-0.0438042841
    22 var22 8.5871265 2.6205985329
    2323 9.3172001 3.0164859344
    24 var24 9.1885141 2.9251166107
    < /代码> 
    
    

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

    p<-ggplot(c,aes(c1,c2,label=state))。+
    模型:几何参考线(H=0)+
    模型:几何参考线(V=0)+
    几何点(aes(颜色=ifelse(c(abs(c$c1))>c(abs(c$c2)),“绿色”,“红色”))+
    参考线(填充=参考线图例(反向=真))。+
    XLAB(“第一主成分”)。+
    依拉布(“第二主成分”)。+
    ggtitle(“我的数据的前两个主要组成部分”)
    
    p2<-p+geom_文本排斥(segment.color=na)
    < /代码> 
    
    

    但是ifelse()条件的工作方式与之相反,如下图所示,在c1的值大于c2的情况下,它会给出红色,反之亦然,从图例中也可以看出这一点:

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

    我第一次在aes()中尝试ifelse(),它已经在空间生态和r中使用了。

    其次,此文章与链接的文章有所不同here=>a>对于可能的重复,因为该问题应用于时间序列数据,绘图不同,并且给出了许多颜色。我还可以在这里找到第三列颜色,如所示的颜色。

    我想以这样的方式绘制数据:如果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

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

    我第一次在aes()中尝试ifelse()是在spatial ecology and R还有这个stackoverflow question.

    第二,这篇文章与链接的不同here由于该问题适用于时间序列数据,因此对于可能的重复,绘图是不同的,并且给出了许多颜色。我也可以提出第三列的颜色,如所示here但我想有一个有效的解决方案。

    1 回复  |  直到 6 年前
        1
  •  1
  •   cardinal40    6 年前

    也许你可以尝试这样的方法:

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