美文网首页R语言做图作图ggplot2
ggplot2绘制高端散点图

ggplot2绘制高端散点图

作者: R语言数据分析指南 | 来源:发表于2021-01-12 09:26 被阅读0次

    让我们用R中臭名昭著的鸢尾花数据来进行实际效果的展示各位看官老爷们请细细品味,喜欢的小伙伴可以关注个人公众号R语言数据分析指南,持续分享更多实用教程

    绘制箭头的基础语法

    geom_segment()在点(x,y)和(xend,yend)之间绘制一条直线
    geom_curve画一条曲线

    直线箭头

    library(tidyverse)
    ggplot(mtcars, aes(wt, mpg))+
      geom_point()+
      geom_segment(aes(x = 5,y = 30,xend = 3.5,yend = 25),
      arrow = arrow(length = unit(0.4,"cm")))
    

    曲线箭头

    df <- data.frame(x1 = 2.62, x2 = 3.57, y1 = 21.0, y2 = 15.0)
    
    ggplot(mtcars, aes(wt, mpg)) +
      geom_point() + geom_curve(
      aes(x = x1, y = y1, xend = x2, yend = y2),
      data = df,size=1,color="red",angle = 90,
      arrow = arrow(length = unit(0.03, "npc"),type="closed"))
    

    改变箭头方向

    ggplot(mtcars,aes(wt, mpg)) +
      geom_point()+
      geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2),
      data = df,size=1,color="black",curvature = 1,
      arrow = arrow(length = unit(0.03,"npc"),ends="first"))
    
    • curvature 曲线弯曲程度
    • ends="first"改变箭头方向
    • type="closed"对箭头进行填充

    实际案例展示

    自定义主题
    rm(list=ls())
    pacman::p_load(tidyverse,reshape2,ggsci)
    
    theme_niwot <- function(){
      theme_bw() +
        theme(text = element_text(family = "Times"),
              axis.line.x = element_line(color="black"), 
              axis.line.y = element_line(color="black"),
              axis.text.x = element_text(family = "Times",size=12,face="plain"),
              axis.text.y = element_text(family = "Times",size=12,face="plain"),
              panel.border = element_blank(),
              axis.title.x = element_text(margin = margin(t = 10),size=13,
                                          family = "Times",color="black"),
              axis.title.y = element_text(margin = margin(r = 10),size=13,
                                          family = "Times",color="black"),
              panel.grid.major.x = element_blank(),                                          
              panel.grid.minor.x = element_blank(),
              panel.grid.minor.y = element_blank(),
              panel.grid.major.y = element_blank(),  
              plot.margin = unit(c(1, 1, 1, 1), units = ,"cm"),
              legend.text = element_text(size = 12,family ="Times"),          
              legend.title = element_blank(),                          
              legend.key = element_blank(),
              panel.background = element_rect(fill = "white"),
              legend.background = element_rect(color = "black", 
             fill = "transparent",size = 2, linetype = "blank"))
    }
    

    数据整合

    iris_mean <- iris %>% melt() %>% 
      summarize(avg = mean(value,na.rm = T)) %>% pull(avg)
    
    mean <- iris %>% melt() %>% 
      group_by(variable) %>% summarise(mean=mean(value)) %>%
      mutate(y1=iris_mean)
    
    #pull 提取单列
    

    可视化操作

    iris %>% melt() %>% 
      ggplot(aes(variable,value))+
      geom_point(aes(color = Species), 
                 position = position_jitter(width = 0.2),
                 size =2,alpha = 0.5)+
      scale_color_npg()+theme_niwot()+
      theme(legend.position = "none")+
      geom_point(data=mean,aes(x=variable,y=mean),size=5,
                 color=c("#E41A1C","#1E90FF","#FF8C00","#4DAF4A"))+
      geom_hline(aes(yintercept=iris_mean),
                 color = "gray70",size = 1)+coord_flip()+
      geom_segment(data=mean,aes(x = variable, xend = variable,
                       y =y1,yend =mean),size=0.8,
                   color=c("#E41A1C","#1E90FF","#FF8C00","#4DAF4A"))+
      annotate("text", x =4.3, y = 7, family = "Times",
        size = 4, color = "gray20",
        label = "The mean number of\niris observations was 3.46")+
      annotate("text", x = 3.8, y = 6, family = "Times",
        size = 4, color = "gray20",
        label ="The mean number of\nPetal.Length observations was 3.76")+
      annotate(
        "text", x = 1, y = 1.2,
        family = "Times", size =4, color = "gray20",
        label="The mean number of\nPetal.Length observations was 3.06")+
      geom_curve(aes(x =4.1,y = 7,yend =3.46,xend = 3.6),
                 arrow = arrow(length = unit(0.03, "npc"),type="closed"),
                 size = 0.5,curvature=0.2,
                 color = "grey30")
    

    可以通过创建数据框的方式添加曲线,在此就不一一展示了

    参考:https://mp.weixin.qq.com/s/vR_wNHLrEnWG13wa0pcThA

    相关文章

      网友评论

        本文标题:ggplot2绘制高端散点图

        本文链接:https://www.haomeiwen.com/subject/kshdaktx.html