Rで解析:データの特徴を円で表現「packcircles」パッケージ


データの特徴を円で表現するパッケージの紹介です。色々な使い道があるのではと考えます。ggiraphパッケージとの組み合わせでインタラクティブなグラフが作成可能です。

パッケージバージョンは0.3.0。windows 10のR version 3.4.2で動作を確認しています。


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

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

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



コマンドの紹介

詳細はコマンド、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("packcircles")

###データ例の作成#####
#install.packages("tidyverse")
library("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コマンド

・参考例:インタラクティブなグラフ
 プロット内虫眼鏡のメニュー選択後、マウスのホイール操作で拡大が可能です。


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

スポンサードリンク

関連コンテンツ


スポンサードリンク