是否可以改變個別構面圖的格式?例如,使用下面的示例代碼,是否可以更改cyl = 8圖的標題或背景的顏色?如何更改單個facet_wrap面板的格式?
library(ggplot2)
ggplot(mtcars, aes(x=gear)) +
geom_bar(aes(y=gear), stat="identity", position="dodge") +
facet_wrap(~cyl)
是否可以改變個別構面圖的格式?例如,使用下面的示例代碼,是否可以更改cyl = 8圖的標題或背景的顏色?如何更改單個facet_wrap面板的格式?
library(ggplot2)
ggplot(mtcars, aes(x=gear)) +
geom_bar(aes(y=gear), stat="identity", position="dodge") +
facet_wrap(~cyl)
可以修改GGPLOT2 grobs,例如:
library("ggplot2")
d <- ggplot(mtcars, aes(x=gear)) +
geom_bar(aes(y=gear), stat="identity", position="dodge") +
facet_wrap(~cyl)
grob <- ggplotGrob(d)
strip_bg <- grid.ls(getGrob(grob, "strip.background.rect",
grep=TRUE, global=TRUE))$name
panel_bg <- grid.ls(getGrob(grob, "panel.background.rect",
grep=TRUE, global=TRUE))$name
strip_text <- grid.ls(getGrob(grob, "strip.text.x",
grep=TRUE, global=TRUE))$name
grob <- geditGrob(grob, strip_bg[2], gp=gpar(fill="gray60"))
grob <- geditGrob(grob, panel_bg[2], gp=gpar(fill="darkolivegreen2"))
grob <- geditGrob(grob, strip_text[2], gp=gpar(col="white"))
grid.draw(grob)
更新:這應該與ggplot2 0 .9.3
grob <- ggplotGrob(d)
elem <- grob$grobs$panel2
panel_bg <- grid.ls(getGrob(elem, "panel.background.rect", grep=TRUE))$name
grob$grobs$panel2 <- editGrob(elem, panel_bg, gp=gpar(fill="darkolivegreen"), grep=TRUE)
elem <- grob$grobs$strip_t.1
strip_bg <- grid.ls(getGrob(elem, "strip.background.rect", grep=TRUE))$name
grob$grobs$strip_t.1 <- editGrob(elem, strip_bg, gp=gpar(fill="gray60"), grep=TRUE)
elem <- grob$grobs$strip_t.1
strip_text <- grid.ls(getGrob(elem, "strip.text.x.text", grep=TRUE))$name
grob$grobs$strip_t.1 <- editGrob(elem, strip_text, gp=gpar(col="white"), grep=TRUE)
grid.draw(grob)
這可以幫助你得到一點點接近你想要什麼:
mtcars2 = subset(mtcars, cyl != 8)
subs = subset(mtcars, cyl == 8)
require(ggplot2)
ggplot(mtcars2, aes(x=gear)) +
geom_bar(aes(y=gear, fill = 'black'), stat="identity", position="dodge") +
geom_bar(data = subs, aes(x = gear), fill = 'blue', binwidth = 1) +
facet_wrap(~cyl)
我知道這是一個老問題,因此原來的海報可能是長了,但我仍然認爲這是值得回答的資源對未來搜索。 rcs所接受的答案確實有用,但我發現它相當不穩定而且很冒險。最後,我決定採用更溫和但更穩定的方法。有了這個方法,你只能改變背景但足以滿足我的目的,有可能給別人,我的方法是使用geom_rect
到recolour的背景下,像這樣:
highlights <- data.frame(cyl=c(8))
ggplot() +
geom_rect(data=highlights,aes(xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf), fill='red', alpha=0.2) +
geom_bar(data = mtcars, aes(x=gear), position="dodge", fill = 'black') +
facet_wrap(~cyl)
這個問題是類似的,可能會提供靈感:http://stackoverflow.com/q/3167444/602276 – Andrie