Rで解析:ggplotを塗りつぶし「ggpattern」パッケージ


「ggplot2」パッケージのプロットを色々なパターンで塗りつぶすことができるパッケージの紹介です。大変多くのコマンドが収録されていて、全てを紹介することができません。紹介ではパッケージに収録されている、プロットが塗りつぶし可能なコマンド("geom_map_pattern","geom_sf_pattern"を除く)を紹介します。

「ggpattern」パッケージ:https://coolbutuseless.github.io/package/ggpattern/index.html

実行コマンドとRmdファイルで紹介します。Rmdファイルは実行前に「パッケージのインストール」のコマンドを実行してください。なお、実行はRStudioがおすすめです。

パッケージのバージョンは0.4.1。実行コマンドはRStudioのRStudio Desktop 2021.09.2+382、windows 11のR version 4.1.2で確認しています。

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("ggpattern")
install.packages("tidyverse")
install.packages("flexdashboard")

実行コマンドとRmdファイル

詳細はコマンド、Rmdファイル(エンコード:UTF-8)、パッケージヘルプを確認してください。

---
title: "ggpatternパッケージ"
output:
  flexdashboard::flex_dashboard:
    orientation: columns
    social: menu
    source_code: embed
runtime: shiny
---

```{r global, include=FALSE}
#必要パッケージの読み込み
library("ggpattern")
library("tidyverse")
library("flexdashboard")

###データ例の作成#####
set.seed(1234)
n <- 30
TestData <- tibble("Group" = sample(paste0("Group", 1:3), n, replace = TRUE),
                   "Data1" = sample(1:10, n, replace = TRUE),
                   "Data2" = sample(1:10, n, replace = TRUE))
########
#「ggpattern」パッケージ:ggplot2 geoms:"geom_map_pattern","geom_sf_pattern"を除く
GeomName <- c("geom_rect_pattern", "geom_bar_pattern", "geom_histogram_pattern",
              "geom_bin2d_pattern", "geom_boxplot_pattern", "geom_col_pattern",
              "geom_crossbar_pattern", "geom_ribbon_pattern", "geom_area_pattern",
              "geom_density_pattern", "geom_polygon_pattern", "geom_tile_pattern",
              "geom_violin_pattern")
Pattern <- c("none", "stripe", "wave", "circle", "crosshatch")
```

Column {data-width=500}
-------------------------------------
```{r}
selectInput('GgGeom', 'Select ggplot2 geom', GeomName)
selectInput('FillPattern', 'Select Pattern', Pattern)
```

###プロット
```{r}
renderPlot({
  if(input$GgGeom %in% c("geom_rect_pattern")){
  
  ggplot(TestData,
         aes(xmin = Data1 - 3, xmax = Data1 + 3,
             ymin = Data2 - 3, ymax = Data2 + 3,
             pattern_density = Group,
             col = Group, fill = Group))  +
      eval(parse(text = paste0(input$GgGeom, "(",
                               "pattern = '", input$FillPattern,"')"))) +
      theme_bw() +
      labs(title = paste0("パレット名:", input$GgGeom))
  
  
}else{
  
  if(input$GgGeom %in% c("geom_bar_pattern", "geom_histogram_pattern",
                         "geom_density_pattern")){ 
    
  ggplot(TestData,
         aes(x = Data1, col = Group,
             pattern_density = Group,
             fill = Group, alpha = 0.5)) +
      eval(parse(text = paste0(input$GgGeom, "(",
                               "pattern = '", input$FillPattern,"')"))) +
      
      theme_bw() +
      labs(title = paste0("パレット名:", input$GgGeom))
    
  }else{
    
    if(input$GgGeom %in% c("geom_bin2d_pattern", "geom_boxplot_pattern",
                           "geom_col_pattern", "geom_tile_pattern")){
      
      ggplot(TestData,
             aes(x = Group, y = Data1,
                 pattern_density = Group,
                 col = Group, fill = Group)) +
        eval(parse(text = paste0(input$GgGeom, "(",
                               "pattern = '", input$FillPattern,"')"))) +
        theme_bw() +
        labs(title = paste0("パレット名:", input$GgGeom))
      
    }else{
        
      ggplot(TestData,
             aes(x = Data1, y = Data2,
                 xmin = Data1 - 3, xmax = Data1 + 3,
                 ymin = Data2 - 3, ymax = Data2 + 3,
                 pattern_density = Group,
                 col = Group, fill = Group, alpha = 0.5)) +
        eval(parse(text = paste0(input$GgGeom, "(",
                               "pattern = '", input$FillPattern,"')"))) +
        theme_bw() +
        facet_grid(Group~.) +
        labs(title = paste0("パレット名:", input$GgGeom))
        
  }
 }
}
})
```

出力例


少しでも、あなたの解析が楽になりますように!!

スポンサードリンク

スポンサードリンク