3

ggplot にプロットがあり、ベース R コードで作成したマップの凡例をオーバーレイしたいと考えています。ベース R グラフィックスを ggplot の上に重ねる方法がわからないので、助けていただければ幸いです。

現在、次のような ggplot 凡例があります。 ここに画像の説明を入力

この凡例について変更したい点がいくつかあります (その結果、ベース R グラフィックスに頼った方が簡単だと思いました)。

特に、凡例のボックス間の空白を削除し、ボックス間にも目盛りを追加したいと考えています。また、1 番目と 2 番目のボックスを区切る最初の目盛りの下に「5」を配置したいと考えています。2 番目と 3 番目のボックスを区切る目盛りの下の「10」。3 番目と 4 番目のボックスを区切るチェック マークの下の「20」。また、凡例のボックスをプロットの「ビン」の 1 つと同じサイズにしたいと考えています (stat_bin2d レイヤーを使用します)。

関連コード:

ggplot()+
stat_bin2d(restaurants.df,binwidth=c(1500,2500), alpha=0.6,aes(x=X,y=Y,fill=cut(..count.., c(0,5,10,20,Inf))))+
scale_fill_manual("No. of Restaurants",labels=c("<5","5-10","10-20",">20"),values=cols, guide = guide_legend(direction = "horizontal", title.position = "top",                                      ticks=TRUE,label.position="bottom")) + 
theme(legend.background = element_rect(colour = "black"),
    legend.key = element_rect(color='black'))
4

2 に答える 2

6

@baptiste のコメントは、伝説になるプロットを作成しようとすることに興味を持ちました。これが私の試みです。geom_tile伝説になるプロットを作成するために使用します。OPはサンプルデータを提供しなかったのでmtcars、凡例を横に置くためだけに、組み込みデータを使用してプロットを作成しました。次にgrid.arrange、最終的なプロットと凡例のレイアウトを作成するために使用します。

library(ggplot2)
library(grid)
library(gridExtra) 

## Create legend

# Fake data
dat = data.frame(x=1:4, y="Group", col=factor(1:4))

# Create a plot that will become the legend
legend = ggplot(dat, aes(x,y, fill=col)) + 
  geom_tile(show.legend=FALSE) +
  scale_x_continuous(breaks=c(1.5,2.5,3.5), labels=c(5,10,20)) +
  scale_fill_manual(values=c("yellow","orange","red","darkred")) +
  labs(y="", x="") +
  ggtitle("No. of Restaurants") +
  theme_bw() +
  theme(panel.border=element_blank(),
        axis.ticks.y=element_blank(),
        axis.text.y=element_blank())

## Create a plot to put next to the legend
p1 = ggplot(mtcars, aes(mpg, wt)) + 
  geom_point() +
  theme(plot.margin=unit(c(0,0,0,0)))

# Arrange plot and legend
grid.arrange(p1, arrangeGrob(rectGrob(gp=gpar(col=NA)), 
                             legend,
                             rectGrob(gp=gpar(col=NA)),
                             heights=c(0.42,0.16,0.42)), 
             widths=c(0.8,0.2))

ここに画像の説明を入力

于 2015-09-15T03:01:04.727 に答える