ggplotは、スケールの異なる2つのプロットの右上に画像を追加します

ねえ

右上の2つのggplotに画像を追加したいと思います。私の問題は、スケールが異なることです。そのため、プロットごとにxminxmax...を個別に指定する必要があります

library(ggplot2)
library(png)
library(grid)

# subsetting
am0 <- subset(mtcars, am == 0)
am1 <- subset(mtcars, am == 1)

# ggplot
plt <- function(dat){
    p <- ggplot(dat, aes(mpg,disp)) + 
      geom_point()

    return(p)
}

p0 <- plt(am0)
p1 <- plt(am1)

# reading image
img <- readPNG(system.file("img", "Rlogo.png", package = "png"))

# adding image
p0 + annotation_custom(rasterGrob(img), xmin = 20, xmax = 25, ymin = 400, ymax = 450)
p1 + annotation_custom(rasterGrob(img), xmin = 30, xmax = 35, ymin = 300, ymax = 350)

次の結果につながります。 ここに画像の説明を入力してください

私の質問は、画像のサイズと位置が一定で、プロットのスケールに依存しないように画像を追加する方法はありますか?次のようになります。ここに画像の説明を入力してください

サンディパンデイ

次の例に示すように、場所とスケールを指定するプロセスを自動化できるため、場所を手動で変更する必要はありません。

get.xy <- function(p) {
  g_data <- ggplot_build(p)
  data.frame(xmax = max(g_data$data[[1]]$x),
             ymax = max(g_data$data[[1]]$y),
             xmin = min(g_data$data[[1]]$x),
             ymin = min(g_data$data[[1]]$y))
}

# this returns the dataframe with required x, y params for annotation_custom,
# ensuring the size and position of the image constant
get.params.df <- function(p0, p1, width, height) {
  df0 <- cbind.data.frame(get.xy(p0), width=width, height=height)
  df1 <- cbind.data.frame(get.xy(p1))
  df1$width <- df0$width*(df1$xmax-df1$xmin)/(df0$xmax-df0$xmin)
  df1$height <- df0$height*(df1$ymax-df1$ymin)/(df0$ymax-df0$ymin)
  df <- rbind(df0, df1)
  return(data.frame(xmin=df$xmax-df$width, xmax=df$xmax+df$width, ymin=df$ymax-df$height, ymax=df$ymax+df$height))
}

p0 <- plt(am0)
p1 <- plt(am1)

df <- get.params.df(p0, p1, width=10, height=10)

# adding image
library(gridExtra)
grid.arrange(
  p0 + annotation_custom(rasterGrob(img), xmin=df[1,1],xmax=df[1,2], ymin=df[1,3], ymax=df[1,4]),
  p1 + annotation_custom(rasterGrob(img), xmin=df[2,1],xmax=df[2,2], ymin=df[2,3], ymax=df[2,4])  
)

ここに画像の説明を入力してください

より大きな画像が必要な場合は、幅と高さのパラメータのみを変更します。それ以外はすべて変更されません。

df <- get.params.df(p0, p1, width=25, height=25)
library(gridExtra)
grid.arrange(
  p0 + annotation_custom(rasterGrob(img), xmin=df[1,1],xmax=df[1,2], ymin=df[1,3], ymax=df[1,4]),
  p1 + annotation_custom(rasterGrob(img), xmin=df[2,1],xmax=df[2,2], ymin=df[2,3], ymax=df[2,4])  
)

ここに画像の説明を入力してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

異なる長さの同じスケールで2つのシリーズをプロットします

分類Dev

2列のデータをプロットします。1つはggplotでyスケールが逆になっています

分類Dev

連続スケールでggplot2プロットに個別のラベルを追加します

分類Dev

2つの異なるパスに画像をアップロードする

分類Dev

jqueryは、スクロール時に2つの要素に1つのクラスを追加しますが、プロパティは異なります

分類Dev

ggplot2で異なるスケールで複数の図をプロットする

分類Dev

Pythonで異なるx軸とy軸のスケールを持つ1つのプロット内の2つ(またはそれ以上)のグラフ

分類Dev

ggplot2、同じプロットに2つのスケールを適用しますか?トップダウンバープロット

分類Dev

x範囲制限が異なるggplot2に2つの関数をプロットします

分類Dev

javaxパッケージには、2つの異なるプロジェクトの異なるパッケージが含まれています

分類Dev

ggplot2は、プロット全体のスケールに比例したままの特定のデータポイントを指す動的な矢印注釈を追加します

分類Dev

FullCalendar外部イベントは2つの異なるモーダルをドロップします

分類Dev

2つのプロジェクトを含む1つのソリューションファイル内に異なるバージョンのnugetパッケージをインストールします

分類Dev

x軸とy軸のスケールが異なる2つのggplotをオーバーレイします

分類Dev

複数の異なるタイプのggplotを1つのグラフにプロットします

分類Dev

1つのプロットの異なる線に対して1つの平均傾向線を追加します

分類Dev

ggplotで2つの異なるy値をプロットする方法は?

分類Dev

ggplotにテキストを追加-ggplotの各プロットの右上にあるポイントの数

分類Dev

同じ画像の2つのグレースケール画像はどのように異なりますか?

分類Dev

ggplot2の異なるバーに同じエントリをプロットします

分類Dev

2つの異なるデータフレームを1つのプロットにプロットし、ggplot2でカスタムx軸を設定します

分類Dev

AspNetMvcは、2つの異なるルート間を移動するときにURLを追加します

分類Dev

AWKはループ内の2つの異なるシーケンシャルファイルセットをマージします

分類Dev

2つの異なるMODALBODYブートストラップに同じテーブルをロードする

分類Dev

ggplot2は既存のプロットに手動バーを追加します

分類Dev

ブートストラップのウェルを 2 つの異なる列に配置する方法は?

分類Dev

2つの異なるカラースケールで2つのgeom_bin2dプロットをオーバーレイする

分類Dev

2つの異なるプロットをマージします。1つはX軸に、もう1つはY軸にあります。

分類Dev

ggplot2の2つのデータセットのスケールが異なる2つのy軸

Related 関連記事

  1. 1

    異なる長さの同じスケールで2つのシリーズをプロットします

  2. 2

    2列のデータをプロットします。1つはggplotでyスケールが逆になっています

  3. 3

    連続スケールでggplot2プロットに個別のラベルを追加します

  4. 4

    2つの異なるパスに画像をアップロードする

  5. 5

    jqueryは、スクロール時に2つの要素に1つのクラスを追加しますが、プロパティは異なります

  6. 6

    ggplot2で異なるスケールで複数の図をプロットする

  7. 7

    Pythonで異なるx軸とy軸のスケールを持つ1つのプロット内の2つ(またはそれ以上)のグラフ

  8. 8

    ggplot2、同じプロットに2つのスケールを適用しますか?トップダウンバープロット

  9. 9

    x範囲制限が異なるggplot2に2つの関数をプロットします

  10. 10

    javaxパッケージには、2つの異なるプロジェクトの異なるパッケージが含まれています

  11. 11

    ggplot2は、プロット全体のスケールに比例したままの特定のデータポイントを指す動的な矢印注釈を追加します

  12. 12

    FullCalendar外部イベントは2つの異なるモーダルをドロップします

  13. 13

    2つのプロジェクトを含む1つのソリューションファイル内に異なるバージョンのnugetパッケージをインストールします

  14. 14

    x軸とy軸のスケールが異なる2つのggplotをオーバーレイします

  15. 15

    複数の異なるタイプのggplotを1つのグラフにプロットします

  16. 16

    1つのプロットの異なる線に対して1つの平均傾向線を追加します

  17. 17

    ggplotで2つの異なるy値をプロットする方法は?

  18. 18

    ggplotにテキストを追加-ggplotの各プロットの右上にあるポイントの数

  19. 19

    同じ画像の2つのグレースケール画像はどのように異なりますか?

  20. 20

    ggplot2の異なるバーに同じエントリをプロットします

  21. 21

    2つの異なるデータフレームを1つのプロットにプロットし、ggplot2でカスタムx軸を設定します

  22. 22

    AspNetMvcは、2つの異なるルート間を移動するときにURLを追加します

  23. 23

    AWKはループ内の2つの異なるシーケンシャルファイルセットをマージします

  24. 24

    2つの異なるMODALBODYブートストラップに同じテーブルをロードする

  25. 25

    ggplot2は既存のプロットに手動バーを追加します

  26. 26

    ブートストラップのウェルを 2 つの異なる列に配置する方法は?

  27. 27

    2つの異なるカラースケールで2つのgeom_bin2dプロットをオーバーレイする

  28. 28

    2つの異なるプロットをマージします。1つはX軸に、もう1つはY軸にあります。

  29. 29

    ggplot2の2つのデータセットのスケールが異なる2つのy軸

ホットタグ

アーカイブ