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

サイズが小さい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()
###########################################

出力例


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

Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.
タイトルとURLをコピーしました