Kısıtlı bir kübik spline ana çizim olarak çizim yapmak ve X değişkeninin varyasyonunu göstermek için bir kutu-ve-bıyık grafiği eklemek istiyorum. Bununla birlikte, alt menteşe (x = 42), medyan (x = 51) ve üst menteşe (x = 61) ana grafiğin ilgili ızgara çizgisine tam olarak uymamıştır.Ggplot2 arsada mükemmel uyum
library(Hmisc)
library(rms)
library(ggplot2)
library(gridExtra)
data(pbc)
d <- pbc
rm(pbc)
d$status <- ifelse(d$status != 0, 1, 0)
dd = datadist(d)
options(datadist='dd')
f <- cph(Surv(time, status) ~ rcs(age, 4), data=d)
p <- Predict(f, fun=exp)
df <- data.frame(age=p$age, yhat=p$yhat, lower=p$lower, upper=p$upper)
### 1st PLOT: main plot
(g <- ggplot(data=df, aes(x=age, y=yhat)) + geom_line(size=1))
# CI
(g <- g + geom_ribbon(data=df, aes(ymin=lower, ymax=upper), alpha=0.5, linetype=0, fill='#FFC000'))
# white background
(g <- g + theme_bw())
# X-axis
(breaks <- round(boxplot.stats(p[,"age"])$stats))
(g <- g + scale_x_continuous(breaks=breaks, limits=range(p[,"age"]), labels=round(breaks)))
(g <- g + xlab("Age"))
# Y-Achse
(g <- g + ylab("Hazard Ratio"))
# size and color of axis
(g <- g + theme(axis.line = element_line(color='black', size=1)))
(g <- g + theme(axis.ticks = element_line(color='black', size=1)))
(g <- g + theme(plot.background = element_blank()))
#(g <- g + theme(panel.grid.major = element_blank()))
(g <- g + theme(panel.grid.minor = element_blank()))
(g <- g + theme(panel.border = element_blank()))
### 2nd PLOT: box whisker plot
describe(df$age, digits=0)
round(range(df$age))
(gg <- ggplot(data=df, aes(x=1, y=age)) + geom_boxplot(outlier.shape=NA, size=1) + coord_flip())
(gg <- gg + theme(axis.line=element_blank())) #
(gg <- gg + theme(axis.text.x=element_blank()))
(gg <- gg + theme(axis.text.y=element_blank()))
(gg <- gg + theme(axis.ticks=element_blank()))
(gg <- gg + theme(axis.title.x=element_blank()))
(gg <- gg + theme(axis.title.y=element_blank()))
(gg <- gg + theme(panel.background=element_blank()))
(gg <- gg + theme(panel.border=element_blank())) #
(gg <- gg + theme(legend.position="none")) #
(gg <- gg + theme(panel.grid.major=element_blank())) #
(gg <- gg + theme(panel.grid.minor=element_blank()))
(gg <- gg + theme(plot.background=element_blank()))
(gg <- gg + theme(plot.margin = unit(c(0,0,0,0), "in")))
(gg <- gg + scale_x_continuous(breaks=c(70,77,84), expand=c(0,0)))
### FINAL PLOT: put box whisker plot in main plot
(final.gg <- g + annotation_custom(ggplotGrob(gg), ymin=2.4, ymax=2.6))
- Ben mükemmel bir uyum için değiştirmek için ne var?
- kutu ve bıçağının y pozisyonunun otomatik olarak hizalanması için daha iyi bir yöntem var mı? Cevabınız için
GÜNCELLEME 1. teşekkürler! Aşağıda benim örneğinizi kodunuzla görebilirsiniz. Ancak, gördüğünüz gibi, alt menteşe, medyan ve üst menteşe hala uymuyor. Neyin yanlış gidiyor?
library(Hmisc)
library(rms)
library(ggplot2)
library(gridExtra)
data(pbc)
d <- pbc
rm(pbc, pbcseq)
d$status <- ifelse(d$status != 0, 1, 0)
dd = datadist(d)
options(datadist='dd')
f <- cph(Surv(time, status) ~ rcs(age, 4), data=d)
p <- Predict(f, fun=exp)
df <- data.frame(age=p$age, yhat=p$yhat, lower=p$lower, upper=p$upper)
### 1st PLOT: main plot
(breaks <- boxplot.stats(p[,"age"])$stats)
g <- ggplot(data=df, aes(x=age, y=yhat)) + geom_line(size=1) +
geom_ribbon(data=df, aes(ymin=lower, ymax=upper), alpha=0.5, linetype=0, fill='#FFC000') +
theme_bw() +
scale_x_continuous(breaks=breaks) +
xlab("Age") +
ylab("Hazard Ratio") +
theme(axis.line = element_line(color='black', size=1),
axis.ticks = element_line(color='black', size=1),
plot.background = element_blank(),
# panel.border = element_blank(),
panel.grid.minor = element_blank())
### 2nd PLOT: box whisker plot
gg <- ggplot(data=df, aes(x=1, y=age)) +
geom_boxplot(outlier.shape=NA, size=1) +
scale_y_continuous(breaks=breaks) +
ylab(NULL) +
coord_flip() +
# theme_bw() +
theme(axis.line=element_blank(),
# axis.text.x=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank(),
axis.title=element_blank(),
# panel.background=element_blank(),
panel.border=element_blank(),
# panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
# plot.background=element_blank(),
plot.margin = unit(c(0,0,0,0), "in"),
axis.ticks.margin = unit(0, "lines"),
axis.ticks.length = unit(0, "cm"))
### FINAL PLOT: put box whisker plot in main plot
(final.gg <- g + annotation_custom(ggplotGrob(gg), ymin=2.4, ymax=2.6))
resim ekleme için teşekkürler kullanılarak ayarlanabilir! – Gurkenhals