HOME/Articles/

(99%自分用メモ)RcmdrPlugin.KMggplot2にggplotオブジェクト保持機能追加

Article Outline

(99%自分用メモ)RcmdrPlugin.KMggplot2にhhplotオブジェクト保持機能追加

">Hits

(注意)OSはLinux。/home/(ユーザー名)/R/x86_64-pc-linux-gnu-library/(Rバージョン)にインストール。

(windowsならRtoolsが必要。)

  • Rcmdr : 2.7.2
  • RcmdrPlugin.KMggplot2 : 0.2.6
  • ggplot2 : 3.3.5
  • ggmosaic : 0.3.3

RcmdrPlugin.KMggplot2(Package source:https://cran.r-project.org/src/contrib/RcmdrPlugin.KMggplot2_0.2-6.tar.gz)

RcmdrPlugin.KMggplot2ではグラフが作成されると、rm(.df, .plot)と作成されたggplotオブジェクト(.plot)が削除されてしまいます。

print(.plot)rm(.df, .plot)の間に例えば、g <- .plotを実行するようにすれば、ggplotオブジェクトが保持できるようになります。

手っ取り早い方法は、plot****.rに4箇所書き加えて、plot-aaa.rに1箇所(4行)書き加える。

plot****.r

例として、plot-gpie.rの場合。3箇所目のtclvalue(lbbox1$fields[[3]]$value)[[3]]はplot****.rで異なります。

1,2箇所目 : lbbox

  • ggplotオブジェクト名の箇所は空でもかまいません。以下ではpieとしています。
  • list記入の際「,」を入れる箇所注意
      lbbox1 <<- textfields$new()
      lbbox1$front(
        top        = top,
# initValuesにggplotオブジェクト名の入力箇所追加(1)
        initValues = list("<auto>", "","pie"),     
        titles     = list(
          gettextKmg2("Legend label"),
          gettextKmg2("Title"),
# ggplotオブジェクト保持 listに追加(2)
          gettextKmg2("ggplot object name")
        )
      )

3箇所目 : getParms

      main   <- tclvalue(lbbox1$fields[[2]]$value)
# パラメータhold(名前はなんでもいい)追加。mainが2番めでその次だから`[[3]]` (3)
      hold   <- tclvalue(lbbox1$fields[[3]]$value)

4箇所目 : getParmsのlist

# 「,」も忘れないように (4)
hold = hold

plot-aaa.r

.plotが作られるタイミングはOKがクリックされたときとプレビュはクリックされたときです。
ここでは「OKがクリックされたとき」に保持することとします。

      onOK <- function() {

########## 略 ##########

          if (parms$save == "1") .self$savePlot(.plot)

          pos <- 1
          assign(".lastcom", paste0(codes, "\n"), envir = as.environment(pos))

        }
########## この部分を追加 ################
      if (nchar(parms$hold)==0 || is.null(parms$hold)) {
      } else {
        commandDoIt(paste0(parms$hold,"<- .plot"))
      }
#############################################        
        removeRmlist()

        activateMenus()
        tkfocus(CommanderWindow())

      }

      setBack()

最後に

公開はしませんが、他にもRcmdrPlugin.KMggplot2にメニューを追加しました。 (グラフを並べる、保存する、対数軸の散布図、時系列グラフなど、標準作図関数(hist,barplot)を使ったりもした) ggmosaic , cowplot , ggrepel , ggpmisc ,xts , ggfortify などggplotを拡張したり、 使いやすくするパッケージも数多くあるのでそれらを使い、 なによりRcmdrPlugin.KMggplot2のメニュー作成がやりやすかったのでなんとか作ることができました。