データの特徴を円で表現するパッケージの紹介です。なお、グラフの作成はggplot2パッケージと組み合わせて利用します。実行コマンドでは「ggiraph」パッケージとの組み合わせでインタラクティブなグラフの作成例も紹介しています。
パッケージバージョンは0.3.4。実行コマンドはwindows 11のR version 4.1.2で確認しています。
パッケージのインストール
下記コマンドを実行してください。
#パッケージのインストール install.packages("packcircles")
実行コマンド
詳細はコマンド、パッケージのヘルプを確認してください。
#パッケージの読み込み library("packcircles") ###データ例の作成##### #tidyverseパッケージがなければインストール if(!require("tidyverse", quietly = TRUE)){ install.packages("tidyverse");require("tidyverse") } n <- 300 TestData1 <- data.frame(Value = 1:n, id = 1:n, Name = sample(LETTERS[1:24], n, replace = TRUE)) %>% mutate(Col = if_else(Value %% 2 == 0, "#9e323a", "#7edbf2")) TestData2 <- data.frame(Value = n:1, id = 1:n, Name = sample(LETTERS[1:24], n, replace = TRUE)) %>% mutate(Col = if_else(Value %% 2 == 0, "#df6d68", "#f6adad")) ######## #サークルの重なりを避けてレイアウトを作成:circleProgressiveLayoutコマンド #サークルサイズデータを指定:sizecolオプション #サイズの指定方法:sizetypeオプション;"area","radius"から選択 CPData <- circleProgressiveLayout(TestData1, sizecol = 1, sizetype = "area") ggplot(data = CPData, aes(x, y, size = radius)) + geom_point(col = "black", show.legend = FALSE) #反復ペアワイズを利用して重複しないレイアウトを作成:circleRepelLayoutコマンド #データがcentre x,centre y,radius順で無い場合 #xysizecolsオプションはc(NA, NA, 1)と設定する #反復回数を指定:maxiterオプション;大きいほど精度が良い CRData <- circleRepelLayout(TestData1, xysizecols = c(NA, NA, 1), sizetype = "area", maxiter = 1500) ggplot(data = CRData$layout, aes(x, y, size = radius)) + geom_point(col = "black", show.legend = FALSE) #レイアウトをggplot2で利用する形式へ変換:circleLayoutVerticesコマンド #geom_polygonコマンドでの利用が可能になります GGCPData <- circleLayoutVertices(CPData) ggplot(data = GGCPData, aes(x, y, group = id)) + geom_polygon(col = "red", fill = "blue", show.legend = FALSE) ###参考例:インタラクティブなグラフ##### #install.packages("ggiraph") library("ggiraph") #中心からデータサイズ_昇順 GetLayout1 <- circleProgressiveLayout(TestData1, sizecol = 1, sizetype = "radius") TestPlotData1 <- circleLayoutVertices(GetLayout1) %>% left_join(TestData1[, c(2, 3:4)], by = "id") #中心からデータサイズ_降順 GetLayout2 <- circleProgressiveLayout(TestData2, sizecol = 1, sizetype = "radius") TestPlotData2 <- circleLayoutVertices(GetLayout2) %>% left_join(TestData2[, c(2, 3:4)], by = "id") #facetを適応するためにデータを結合 PlotData <- rbind(cbind(TestPlotData1, set = 1), cbind(TestPlotData2, set = 2) ) #プロット準備 IntGg <- ggplot(data = PlotData, aes(x, y, group = id)) + geom_polygon_interactive(fill = PlotData$Col, col = "black", tooltip = PlotData$Name, show.legend = FALSE) + facet_wrap(~ set, labeller = as_labeller(c("1" = "中心からデータサイズ_昇順", "2" = "中心からデータサイズ_降順"))) + theme_void() + coord_equal() #プロット ggiraph(ggobj = IntGg, width_svg = 5, height_svg = 3, zoom_max = 10)
出力例
・circleProgressiveLayoutコマンド
・circleRepelLayoutコマンド
・circleLayoutVerticesコマンド
・参考例:インタラクティブなグラフ
プロット内虫眼鏡のメニュー選択後、マウスのホイール操作で拡大が可能です。
少しでも、あなたの解析が楽になりますように!!