ggplot2で作成されたプロットの下にデータに関する情報を表示しようとしています。プロットの X 軸座標を使用して N 変数をプロットしたいのですが、Y 座標は画面の下部から 10% である必要があります。実際、目的の Y 座標は、y_pos 変数としてデータ フレームに既に含まれています。
ggplot2を使用して 3 つのアプローチを考えることができます。
1) 実際のプロットの下に空のプロットを作成し、同じスケールを使用してから、geom_text を使用して空白のプロットにデータをプロットします。このアプローチは機能しますが、非常に複雑です。
2)geom_text
データをプロットするために使用しますが、何らかの方法で y 座標を画面のパーセント (10%) として使用します。これにより、数値がプロットの下に表示されます。適切な構文がわかりません。
3) grid.text を使用してテキストを表示します。画面の下部から 10% に簡単に設定できますが、X 座標をプロットに合わせて設定する方法がわかりません。grconvert を使用して最初の X 位置をキャプチャしようとしましたが、それも機能しませんでした。
以下は、ダミー データを使用した基本的なプロットです。
graphics.off() # close graphics windows
library(car)
library(ggplot2) #load ggplot
library(gridExtra) #load Grid
library(RGraphics) # support of the "R graphics" book, on CRAN
#create dummy data
test= data.frame(
Group = c("A", "B", "A","B", "A", "B"),
x = c(1 ,1,2,2,3,3 ),
y = c(33,25,27,36,43,25),
n=c(71,55,65,58,65,58),
y_pos=c(9,6,9,6,9,6)
)
#create ggplot
p1 <- qplot(x, y, data=test, colour=Group) +
ylab("Mean change from baseline") +
geom_line()+
scale_x_continuous("Weeks", breaks=seq(-1,3, by = 1) ) +
opts(
legend.position=c(.1,0.9))
#display plot
p1
以下の変更された gplot は被験者の数を表示しますが、それらはプロット内に表示されます。Yスケールを強制的に拡張します。これらの数値をプロットの下に表示したいと思います。
p1 <- qplot(x, y, data=test, colour=Group) +
ylab("Mean change from baseline") +
geom_line()+
scale_x_continuous("Weeks", breaks=seq(-1,3, by = 1) ) +
opts( plot.margin = unit(c(0,2,2,1), "lines"),
legend.position=c(.1,0.9))+
geom_text(data = test,aes(x=x,y=y_pos,label=n))
p1
数値を表示する別の方法では、実際のプロットの下にダミー プロットを作成します。コードは次のとおりです。
graphics.off() # close graphics windows
library(car)
library(ggplot2) #load ggplot
library(gridExtra) #load Grid
library(RGraphics) # support of the "R graphics" book, on CRAN
#create dummy data
test= data.frame(
group = c("A", "B", "A","B", "A", "B"),
x = c(1 ,1,2,2,3,3 ),
y = c(33,25,27,36,43,25),
n=c(71,55,65,58,65,58),
y_pos=c(15,6,15,6,15,6)
)
p1 <- qplot(x, y, data=test, colour=group) +
ylab("Mean change from baseline") +
opts(plot.margin = unit(c(1,2,-1,1), "lines")) +
geom_line()+
scale_x_continuous("Weeks", breaks=seq(-1,3, by = 1) ) +
opts(legend.position="bottom",
legend.title=theme_blank(),
title.text="Line plot using GGPLOT")
p1
p2 <- qplot(x, y, data=test, geom="blank")+
ylab(" ")+
opts( plot.margin = unit(c(0,2,-2,1), "lines"),
axis.line = theme_blank(),
axis.ticks = theme_segment(colour = "white"),
axis.text.x=theme_text(angle=-90,colour="white"),
axis.text.y=theme_text(angle=-90,colour="white"),
panel.background = theme_rect(fill = "transparent",colour = NA),
panel.grid.minor = theme_blank(),
panel.grid.major = theme_blank()
)+
geom_text(data = test,aes(x=x,y=y_pos,label=n))
p2
grid.arrange(p1, p2, heights = c(8.5, 1.5), nrow=2 )
ただし、これは非常に複雑で、さまざまなデータに合わせて変更するのは困難です。理想的には、Y 座標を画面のパーセントとして渡すことができるようにしたいと考えています。