12

を使用して散布図行列をプロットしていggpairsます。次のコードを使用しています。

# Load required packages
require(GGally)

# Load datasets
data(state)
df <- data.frame(state.x77,
                 State = state.name,
                 Abbrev = state.abb,
                 Region = state.region,
                 Division = state.division
) 
# Create scatterplot matrix
p <- ggpairs(df, 
             # Columns to include in the matrix
             columns = c(3,5,6,7),

             # What to include above diagonal
             # list(continuous = "points") to mirror
             # "blank" to turn off
             upper = "blank",
             legends=T,

             # What to include below diagonal
             lower = list(continuous = "points"),

             # What to include in the diagonal
             diag = list(continuous = "density"),

             # How to label inner plots
             # internal, none, show
             axisLabels = "none",

             # Other aes() parameters
             colour = "Region",
             title = "State Scatterplot Matrix"
) 

# Show the plot
print(p)

そして、私は次のプロットを取得します:

ここに画像の説明を入力

これで、マトリックス内のすべてのプロットの凡例を取得していることを簡単に確認できます。プロット全体で唯一の普遍的な伝説を持ちたい. それ、どうやったら出来るの?どんな助けでも大歓迎です。

4

2 に答える 2

8

うまくいけば、誰かが でこれを行う方法を示してくれるでしょうggpairs(...)。私はそれを自分で見たいです。それまでは、 を使用せず、ファセットを備えggpairs(...)た単純なバニラを使用するソリューションを次に示します。ggplot

library(ggplot2)
library(reshape2)   # for melt(...)
library(plyr)       # for .(...)
library(data.table)

xx <- with(df, data.table(id=1:nrow(df), group=Region, df[,c(3,5,6,7)]))
yy <- melt(xx,id=1:2, variable.name="H", value.name="xval")
setkey(yy,id,group)
ww <- yy[,list(V=H,yval=xval),key="id,group"]
zz <- yy[ww,allow.cartesian=T]
setkey(zz,H,V,group)
zz <- zz[,list(id, group, xval, yval, min.x=min(xval),min.y=min(yval),
               range.x=diff(range(xval)),range.y=diff(range(yval))),by="H,V"]
d  <- zz[H==V,list(x=density(xval)$x,
                   y=min.y+range.y*density(xval)$y/max(density(xval)$y)),
         by="H,V,group"]
ggplot(zz)+
  geom_point(subset= .(xtfrm(H)<xtfrm(V)), 
             aes(x=xval, y=yval, color=factor(group)), 
             size=3, alpha=0.5)+
  geom_line(subset= .(H==V), data=d, aes(x=x, y=y, color=factor(group)))+
  facet_grid(V~H, scales="free")+
  scale_color_discrete(name="Region")+
  labs(x="", y="")

基本的な考え方はmelt(...)、( )dfの適切な形式に変換し、2 つのコピー ( and ) を作成し、 and (ここでは、は単なる行番号で、は変数) に基づいてデカルト結合を実行し、 を作成することです。密度を外部で (データ テーブルで) 計算してスケーリングする必要があります。それにもかかわらず、それでも よりも高速に実行されます。ggplotxxyywwidgroupidgroupRegionzzdggpairs(...)

于 2014-04-08T20:07:30.867 に答える