美文网首页可视化
2020-02-25 增强绘图效果的gghighlight包

2020-02-25 增强绘图效果的gghighlight包

作者: iColors | 来源:发表于2020-02-25 10:13 被阅读0次

    用ggplot2绘图的时候,数据太多,图形很乱,有时候想增强显示一部分图形。比如着重显示一部分点、线...,操作起来比较繁琐。所以就有了gghighlight包,困的时候给大家递一个枕头,哈哈!

    创建数据集

    d <- purrr::map_dfr(
      letters,
      ~ data.frame(
          idx = 1:400,
          value = cumsum(runif(400, -1, 1)),
          type = .,
          flag = sample(c(TRUE, FALSE), size = 400, replace = TRUE),
          stringsAsFactors = FALSE
        )
    )
    

    先画个基本图(眼花缭乱啊)

    library(ggplot2)
    
    ggplot(d) +
      geom_line(aes(idx, value, colour = type))
    
    image.png

    gghighlight包只显示最大值大于20的线

    library(gghighlight)
    
    ggplot(d) +
      geom_line(aes(idx, value, colour = type)) +
      gghighlight(max(value) > 20)
    
    image.png

    gghighlight包可以同时设定两个条件,比如value最大值和flag平均值

    ggplot(d) +
      geom_line(aes(idx, value, colour = type)) +
      gghighlight(max(value) > 15, mean(flag) > 0.25)
    
    
    image.png

    自定义一下图形

    ggplot(d) +
      geom_line(aes(idx, value, colour = type)) +
      gghighlight(max(value) > 15, mean(flag) > 0.25) +
      theme_minimal()
    
    
    image.png

    当然ggplot所有的功能都能用,比如分面

    ggplot(d) +
        geom_line(aes(idx, value, colour = type)) +
        gghighlight(max(value) > 15,mean(flag)>0.25) +
        theme_minimal() +
        facet_wrap(~ type)
    
    image.png

    柱状图也不在话下

    ggplot(iris, aes(Sepal.Length, fill = Species)) +
      geom_histogram() +
      gghighlight()+
      facet_wrap(~ Species)
    
    image.png

    散点图

    d2 <- dplyr::sample_n(d, 20)
    
    ggplot(d2, aes(idx, value)) +
      geom_point() +
      gghighlight(value > 0, label_key = type)
    
    image.png

    有时候不知道数值大小,只想突出显示排名前几的图形,也没有问题。下面突出显示前五条线。

    ggplot(d, aes(idx, value, colour = type)) +
      geom_line() +
      gghighlight(max(value), max_highlight = 5L)
    
    image.png

    散点图手动添加标记(这个很有用)

    p <- ggplot(d2, aes(idx, value)) +
      geom_point(size = 4) +
      gghighlight(value > 0, use_direct_label = FALSE)
    p + geom_label(aes(label = type),
                   hjust = 1, vjust = 1, fill = "purple", colour = "white", alpha= 0.5)
    
    image.png

    不突出的图形样式也可以修改

    ggplot(d) +
      geom_line(aes(idx, value, colour = type), size = 5) +
      gghighlight(max(value) > 19,
                  unhighlighted_params = list(size = 1, colour = alpha("pink", 0.4)))
    
    
    image.png

    其它图形

    library(ggplot2)
    library(gghighlight)
    library(ggridges)
    
    p <- ggplot(Aus_athletes, aes(x = height, y = sport, color = sex, point_color = sex, fill = sex)) +
      geom_density_ridges(
        jittered_points = TRUE, scale = .95, rel_min_height = .01,
        point_shape = "|", point_size = 3, size = 0.25,
        position = position_points_jitter(height = 0)
      ) +
      scale_y_discrete(expand = c(0, 0)) +
      scale_x_continuous(expand = c(0, 0), name = "height [cm]") +
      scale_fill_manual(values = c("#D55E0050", "#0072B250"), labels = c("female", "male")) +
      scale_color_manual(values = c("#D55E00", "#0072B2"), guide = "none") +
      scale_discrete_manual("point_color", values = c("#D55E00", "#0072B2"), guide = "none") +
      coord_cartesian(clip = "off") +
      guides(fill = guide_legend(
        override.aes = list(
          fill = c("#D55E00A0", "#0072B2A0"),
          color = NA, point_color = NA)
        )
      ) +
      ggtitle("Height in Australian athletes") +
      theme_ridges(center = TRUE)
    
    p + 
      gghighlight(sd(height) < 5.5)
    
    image.png
    p + 
      gghighlight(sd(height) < 5.5, 
                  unhighlighted_params = list(point_colour = "grey80"))
    
    image.png

    相关文章

      网友评论

        本文标题:2020-02-25 增强绘图效果的gghighlight包

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