Rで解析:サイズが小さいSVGファイルを作成「svglite」パッケージ

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

サイズが小さいSVGファイルを作成するパッケージの紹介です。コマンド例ではRに収録されている「svg」コマンドと比較すると約7割ほど小さいファイルサイズとなりました。とにかくSVGファイルのサイズを小さくしたい方にお勧めなパッケージです。

パッケージのバージョンは2.1.0。実行コマンドはwindows 11のR version 4.1.2で確認しています。

スポンサーリンク

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

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

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

実行コマンド

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

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

#svgファイルの作成:svgliteコマンド
#grDevices::dev.off()コマンドと組み合わせて使用します
svglite(filename = "ここを実行しても空ファイル.svg", #出力ファイル名
        width = 10, #横幅;インチ
        height = 8, #縦幅;インチ
        bg = "white", #背景の色
        pointsize = 12, #ポイントサイズ
        system_fonts = list(), #フォントの設定
        user_fonts = list(), 
        web_fonts = list(),
        scaling = 1, #スケールの設定
        )

###ここにプロットの内容を記述#####

dev.off()

###########################################
###実行例:作業フォルダにファイルが保存#####
#環境で日本語が文字化けする可能性があるので念のため設定
#出力ファイルサイズ:90,112 バイト
svglite(filename = "Test.svg",
        system_fonts = list(sans = "Yu Gothic"))

#初期設定で利用可能:出力ファイルサイズ:319,488 バイト
#svg(filename = "Testcairo.svg", onefile = TRUE, family = "Yu Gothic")

#tidyverseパッケージがなければインストール
if(!require("tidyHeatmap", quietly = TRUE)){
  install.packages("tidyHeatmap");require("tidyHeatmap")
}

###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
set.seed(1234)
n <- 300
TestData <- tibble(Group = factor(rep(paste0("&#12464;&#12523;&#12540;&#12503;_", 1:30),
                                      each = 10),
                                  level = paste0("&#12464;&#12523;&#12540;&#12503;_", 1:30)),
                   SubGroup = factor(rep(paste0("SubGroup_", 1:10),
                                         time = 30),
                                     level = paste0("SubGroup_", 1:30)),
                   Value = sample(c(1:100), n, replace = TRUE),
                   SubValue = sample(c(1:100), n, replace = TRUE),
                   Flag_1 = factor(rep(2:3, each = 10, time = 15)),
                   Flag_2 = factor(rep(c("OK", "NG"), each = 1,
                                       time = 150)),
                   FlagValue_1 = rep(1:10, each = 10, time = 3),
                   FlagValue_2 = factor(rep(11:20, time = 30)),
                   FlagValue_3 = rep(1:10, each = 10, time = 3),
                   FlagValue_4 = rep(11:20, time = 30),
                   FlagValue_5 = rep(11:20, time = 30))
########

TestData %>%
  #heatmap&#12434;&#12464;&#12523;&#12540;&#12503;&#12391;&#20998;&#21106;&#12377;&#12427;&#12392;&#12365;&#12399;group_by&#12391;&#35373;&#23450;
  dplyr::group_by(Flag_1, Flag_2) %>%
  #heatmap&#12467;&#12510;&#12531;&#12489;
  heatmap(.row = Group, .column = SubGroup, .value = Value,
          #&#12487;&#12540;&#12479;&#12398;&#12473;&#12465;&#12540;&#12523;&#21270;;"none","row","column","both)
          .scale = "row",
          #&#12463;&#12521;&#12473;&#12479;&#12522;&#12531;&#12464;&#12398;&#36969;&#24540;&#26377;&#28961;
          cluster_rows = FALSE, cluster_columns = TRUE,
          #&#12463;&#12521;&#12473;&#12479;&#12522;&#12531;&#12464;&#25163;&#27861;
          clustering_distance_rows = "pearson",
          #&#12459;&#12521;&#12540;&#12497;&#12524;&#12483;&#12488;&#12434;&#25351;&#23450;
          palette_value = c("#4b61ba", "#A9A9A9", "#a87963"),
          #&#12464;&#12523;&#12540;&#12503;&#20998;&#21106;&#12398;&#33394;&#12434;&#25351;&#23450;
          palette_grouping = list(
            #Flag_1&#12398;&#20998;&#21106;
            c("#66C2A5", "#FC8D62"), 
            #Flag_2&#12398;&#20998;&#21106;
            c("#b58b4c", "#74a6aa")
          )) %>%
  #x,y&#26041;&#21521;&#12395;&#12464;&#12521;&#12501;&#12434;&#20184;&#19982;:add_point,add_bar,add_line&#12467;&#12510;&#12531;&#12489;
  #&#12487;&#12540;&#12479;&#20869;&#23481;&#12363;&#12425;&#20184;&#19982;&#26041;&#21521;&#12399;&#33258;&#21205;&#12391;&#21028;&#26029;
  add_point(FlagValue_3, palette = NULL,
            annotation_name_gp = grid::gpar(fontsize = 8)) %>%
  add_line(FlagValue_4, palette = NULL,
           size = unit(0.4, "cm")) %>%
  add_bar(FlagValue_5, palette = NULL, size = unit(1, "cm"),
          annotation_name_gp = grid::gpar(fontsize = 8)) %>%
  #x,y&#26041;&#21521;&#12395;&#12487;&#12540;&#12479;&#12434;&#20184;&#19982;:add_title&#12467;&#12510;&#12531;&#12489;
  #&#12487;&#12540;&#12479;&#20869;&#23481;&#12363;&#12425;&#20184;&#19982;&#26041;&#21521;&#12399;&#33258;&#21205;&#12391;&#21028;&#26029;
  add_tile(FlagValue_1, show_legend = TRUE,
           annotation_name_gp = grid::gpar(fontsize = 6)) %>%
  add_tile(FlagValue_2, show_legend = FALSE)

dev.off()
###########################################

出力例


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

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