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

Rの解析に役に立つ記事
スポンサーリンク

データの特徴を円で表現するパッケージの紹介です。なお、グラフの作成は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"))
########

#&#12469;&#12540;&#12463;&#12523;&#12398;&#37325;&#12394;&#12426;&#12434;&#36991;&#12369;&#12390;&#12524;&#12452;&#12450;&#12454;&#12488;&#12434;&#20316;&#25104;:circleProgressiveLayout&#12467;&#12510;&#12531;&#12489;
#&#12469;&#12540;&#12463;&#12523;&#12469;&#12452;&#12474;&#12487;&#12540;&#12479;&#12434;&#25351;&#23450;:sizecol&#12458;&#12503;&#12471;&#12519;&#12531;
#&#12469;&#12452;&#12474;&#12398;&#25351;&#23450;&#26041;&#27861;:sizetype&#12458;&#12503;&#12471;&#12519;&#12531;;"area","radius"&#12363;&#12425;&#36984;&#25246;
CPData <- circleProgressiveLayout(TestData1, sizecol = 1, sizetype = "area")
ggplot(data = CPData, aes(x, y, size = radius)) +
  geom_point(col = "black", show.legend = FALSE)

#&#21453;&#24489;&#12506;&#12450;&#12527;&#12452;&#12474;&#12434;&#21033;&#29992;&#12375;&#12390;&#37325;&#35079;&#12375;&#12394;&#12356;&#12524;&#12452;&#12450;&#12454;&#12488;&#12434;&#20316;&#25104;:circleRepelLayout&#12467;&#12510;&#12531;&#12489;
#&#12487;&#12540;&#12479;&#12364;centre x,centre y,radius&#38918;&#12391;&#28961;&#12356;&#22580;&#21512;
#xysizecols&#12458;&#12503;&#12471;&#12519;&#12531;&#12399;c(NA, NA, 1)&#12392;&#35373;&#23450;&#12377;&#12427;
#&#21453;&#24489;&#22238;&#25968;&#12434;&#25351;&#23450;:maxiter&#12458;&#12503;&#12471;&#12519;&#12531;;&#22823;&#12365;&#12356;&#12411;&#12393;&#31934;&#24230;&#12364;&#33391;&#12356;
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)

#&#12524;&#12452;&#12450;&#12454;&#12488;&#12434;ggplot2&#12391;&#21033;&#29992;&#12377;&#12427;&#24418;&#24335;&#12408;&#22793;&#25563;:circleLayoutVertices&#12467;&#12510;&#12531;&#12489;
#geom_polygon&#12467;&#12510;&#12531;&#12489;&#12391;&#12398;&#21033;&#29992;&#12364;&#21487;&#33021;&#12395;&#12394;&#12426;&#12414;&#12377;
GGCPData <- circleLayoutVertices(CPData)
ggplot(data = GGCPData, aes(x, y, group = id)) +
  geom_polygon(col = "red", fill = "blue", show.legend = FALSE)

###&#21442;&#32771;&#20363;:&#12452;&#12531;&#12479;&#12521;&#12463;&#12486;&#12451;&#12502;&#12394;&#12464;&#12521;&#12501;#####
#install.packages("ggiraph")
library("ggiraph")
#&#20013;&#24515;&#12363;&#12425;&#12487;&#12540;&#12479;&#12469;&#12452;&#12474;_&#26119;&#38918;
GetLayout1 <- circleProgressiveLayout(TestData1, sizecol = 1, sizetype = "radius") 
TestPlotData1 <- circleLayoutVertices(GetLayout1) %>%
  left_join(TestData1[, c(2, 3:4)], by = "id")
#&#20013;&#24515;&#12363;&#12425;&#12487;&#12540;&#12479;&#12469;&#12452;&#12474;_&#38477;&#38918;
GetLayout2 <- circleProgressiveLayout(TestData2, sizecol = 1, sizetype = "radius") 
TestPlotData2 <- circleLayoutVertices(GetLayout2) %>%
  left_join(TestData2[, c(2, 3:4)], by = "id")
#facet&#12434;&#36969;&#24540;&#12377;&#12427;&#12383;&#12417;&#12395;&#12487;&#12540;&#12479;&#12434;&#32080;&#21512;
PlotData <- rbind(cbind(TestPlotData1, set = 1),
                     cbind(TestPlotData2, set = 2) )
#&#12503;&#12525;&#12483;&#12488;&#28310;&#20633;
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" = "&#20013;&#24515;&#12363;&#12425;&#12487;&#12540;&#12479;&#12469;&#12452;&#12474;_&#26119;&#38918;",
                                             "2" = "&#20013;&#24515;&#12363;&#12425;&#12487;&#12540;&#12479;&#12469;&#12452;&#12474;_&#38477;&#38918;"))) +
  theme_void() +
  coord_equal()
#&#12503;&#12525;&#12483;&#12488;
ggiraph(ggobj = IntGg, width_svg = 5,
        height_svg = 3, zoom_max = 10)

出力例

・circleProgressiveLayoutコマンド

・circleRepelLayoutコマンド

・circleLayoutVerticesコマンド


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



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

タイトルとURLをコピーしました