1

カスタムの凡例として使用したい画像があります - grid.arrange と組み合わせた 1 つの図に 3 つのプロットの普遍的な凡例:

カスタム凡例

これをpngまたはそのようなパッケージでRにロードし、grid.arrangeを使用してグラフの隣に配置できると思います。結合されたチャートを作成するための関数が既に含まれているパッケージにそのような画像を含めることは可能ですか?もしそうなら、それをどこに置き、どのようにRコード内から呼び出し、パッケージ内の場所から呼び出しますか? この凡例でこの種のグラフを頻繁に使用するつもりです。

アップデート:

パッケージ構造のルートに「img」というフォルダーを作成し、その中にファイルを配置しました。

私のRコードには次の行があります: legend <- readPNG(system.file("img", "rgblegend.png", package="HybRIDS"), TRUE) ただし、バイナリをビルドし、ローカルのzipファイルからインストールすると、プロットに移動して:

Error in readPNG(system.file("img", "rgblegend.png", package = "HybRIDS"), : unable to open ライブラリを確認すると、「img」フォルダがありません

編集:

パッケージのソース バージョンを確認しました。'img' フォルダーが含まれていますが、ソースからインストールしてもフォルダーをディレクトリに配置できません。だから私は今、私の質問は、バイナリパッケージを作成すると img フォルダーが含まれないのはなぜで、ソースパッケージにはそれが含まれているのにライブラリにインストールされないのはなぜですか?これを修正するにはどうすればよいですか?

4

2 に答える 2

2

agstudy's answerは、パッケージがインストールされた場所を知らなくても、インストールされたパッケージ内のファイルを参照する方法を説明しています。問題の他の部分は、インストールされたパッケージにイメージ ファイルを取得することです。

Writing R Extensions の「Package subdirectories」の 2 番目から、関心のあるセクションはinstサブディレクトリに関するものです。

サブディレクトリの内容は、inst再帰的にインストール ディレクトリにコピーされます。のサブディレクトリは、 Rで使用されるもの (現在、、、、、、、、、および、および以前のバージョンで使用されている、)と干渉instしないようにする必要があります。のコピーはビルド後に行われるため、インストールするファイルを作成できます。RdatademoexeclibsmanhelphtmlMetalatexR-exinstsrcMakefile

したがって、ファイルがインストールされたパッケージのルートから離れたディレクトリに表示されるには、ソースimgのディレクトリに表示される必要があります。inst/imgだから移動rgblegend.pngimginst/imgから

legend <- readPNG(system.file("img", "rgblegend.png", package="HybRIDS"), TRUE)

動作するはずです。

于 2013-03-15T15:20:32.297 に答える
1

質問が理解できれば、パッケージ内の画像を確実に見つける方法です。png をimgパッケージのフォルダーの下に置くことができます。次のようなものを使用して呼び出します。

img <- readPNG(system.file("img", "Zwrch.png", package=package_name))

完全なソリューションは次のようになります。

library(ggplot2)     
library(grid)        ## to create the image grobe
library(png)         ## to read the png
library(gridExtra)   ## to arrange the plots
bp <- ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot()
img <- readPNG(system.file("img", "Zwrch.png", package=package_name))
legend <- rasterGrob(image=img)
grid.arrange(bp,legend)
于 2013-03-15T11:43:32.003 に答える