Article Outline
(99%自分用メモ)RcmdrPlugin.KMggplot2にhhplotオブジェクト保持機能追加
(注意)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ではグラフが作成されると、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のメニュー作成がやりやすかったのでなんとか作ることができました。