58

ggplotで強調表示されたサイトの座標の表を追加したいと思います。

前の質問をサンプルデータとして使用する:

set.seed(1)
mydata <- data.frame(a=1:50, b=rnorm(50))
ggplot(mydata,aes(x=a,y=b)) + 
    geom_point(colour="blue") + 
    geom_point(data=mydata[10:13, ], aes(x=a, y=b), colour="red", size=5)

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

プロット領域内のプロットの右下隅に次の表を追加したいと思います。何かアドバイス?

table<-cbind(sites=c("site 1","site 2","site 3","site 4"),mydata[10:13,])
table

    sites  a          b
    site 1 10 -0.3053884
    site 2 11  1.5117812
    site 3 12  0.3898432
    site 4 13 -0.6212406
4

4 に答える 4

93

パッケージのaでggplot2's を使用できます。annotation_customtableGrobgridExtra

library(ggplot2)
library(gridExtra)
set.seed(1)
mydata <- data.frame(a=1:50, b=rnorm(50))
mytable <- cbind(sites=c("site 1","site 2","site 3","site 4"),mydata[10:13,])
k <- ggplot(mydata,aes(x=a,y=b)) + 
  geom_point(colour="blue") + 
  geom_point(data=mydata[10:13, ], aes(x=a, y=b), colour="red", size=5) + 
  annotation_custom(tableGrob(mytable), xmin=35, xmax=50, ymin=-2.5, ymax=-1)

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

于 2012-09-07T12:57:07.090 に答える
21

'ggplot2'3.0.0 および'ggpmisc'0.3.0のリリースにより 、新しいより簡単な答えが可能になります。

library(ggplot2)
library(ggpmisc)

set.seed(1)
mydata <- data.frame(a = 1:50, b = rnorm(50))
table <- cbind(sites=c("site 1", "site 2", "site 3", "site 4"), mydata[10:13, ])

ggplot(mydata, aes(x = a, y = b)) + 
  geom_point(colour = "blue") + 
  geom_point(data = mydata[10:13, ], aes(x = a, y = b), colour = "red", size = 5) +
  annotate(geom = "table", x = 37, y = -0.8, label = list(table), 
           vjust = 1, hjust = 0)

'ggplot2' 3.0.0はtibblesを完全にサポートし(リリースアナウンスを参照)、データフレームのリストをlabel美的感覚にマッピングすることを可能にします。新しいgeom_table()パッケージ'ggpmisc0.3.0'はこれを利用して、geom_label()可能な構文と同様の構文でテーブルを追加します(ドキュメントを参照)。ここでは、テーブルを注釈として追加するのが最も適切であるように見えましたが、もちろん、他のジオメトリgeom_table()と同様に直接使用することもできます。ggplot

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

于 2018-07-24T15:36:37.190 に答える
13

@ user3206440、@Punintended行番号を削除する簡単な方法があります。rows = NULLへの呼び出しに追加しtableGrobます。

library(ggplot2)
library(gridExtra)
set.seed(1)
mydata <- data.frame(a=1:50, b=rnorm(50))
mytable <- 
   cbind(sites=c("site 1","site 2","site 3","site 4"), mydata[10:13,])
k <- ggplot(mydata,aes(x=a,y=b)) + 
  geom_point(colour="blue") + 
  geom_point(data=mydata[10:13, ], aes(x=a, y=b), colour="red", size=5) + 
  annotation_custom(tableGrob(mytable, rows=NULL), 
                    xmin=35, xmax=50, ymin=-2.5, ymax=-1)

画像をプロット

gridExtraWikiを参照してください。

于 2017-05-22T20:21:00.270 に答える
1

@ user3206440:行番号を削除する回避策を見つけました。データをマトリックスとしてフォーマットし、列名を割り当ててから、tableGrobに直接呼び出しさせました。tableGrobにデータフレームとして呼び出させると、行名が保持されました。

以下に例を示します。chisq.testの出力を処理する簡単な方法があると確信しています

chivalues <- chisq.test(chitable)
chidf <- matrix(c(unlist(c(round(as.numeric(chivalues[1]), 2),
                    chivalues[2], round(as.numeric(chivalues[3]), 5), numcells))),
                   nrow = 1, ncol = 4, byrow = FALSE)
colnames(chidf) <- c("Chi-Squared", "DF", "P Value", "Total Cells")

そして後で...

annotation_custom(tableGrob(chidf), xmin=2, xmax=6, ymin=700, ymax=800)
于 2017-03-06T19:48:36.973 に答える