我一直在阅读这ggplot2两个功能的文档.我想知道使用每个函数(facet_wrap()和facet_grid())的差异和正确的情况是什么.
library(ggplot2)
p <- qplot(displ, hwy, data = mpg)
p + facet_wrap(~ cyl)
p + facet_grid(~ cyl)
Run Code Online (Sandbox Code Playgroud)
我提供这个小例子作为起点.差异似乎是包裹使得情节更加自主,并且网格使得一个情节全部在一起.
有没有办法根据随数据框提供的变量填充使用facet_wrap创建的facet条?
示例数据:
MYdata <- data.frame(fruit = rep(c("apple", "orange", "plum", "banana", "pear", "grape")), farm = rep(c(0,1,3,6,9,12), each=6), weight = rnorm(36, 10000, 2500), size=rep(c("small", "large")))
示例图:
p1 = ggplot(data = MYdata, aes(x = farm, y = weight)) + geom_jitter(position = position_jitter(width = 0.3), aes(color = factor(farm)), size = 2.5, alpha = 1) + facet_wrap(~fruit)
我知道如何更改条带的背景颜色(例如橙色):
p1 + theme(strip.background = element_rect(fill="orange"))

有没有办法转嫁值的变量size中MYdata的参数fill的element_rect?
基本上,对于所有条带而不是1种颜色,我希望小水果(苹果,李子,梨)的条带背景颜色为绿色,大果实(橙色,香蕉,葡萄)的背景颜色为红色.
我和这个用户有同样的问题- 我有一个'锯齿状'刻面图,其中底行的面板比其他行少,我想在每列的底部有x轴刻度.
该问题的建议解决方案是设置scales="free_x".(在ggplot 0.9.2.1中;我相信我正在寻找的行为在早期版本中是默认的.)在我的情况下,这是一个糟糕的解决方案:我的实际轴标签会相当长,所以将它们放在每一行下会占用太多房间.结果是这样的:
x <- gl(3, 1, 15, labels=paste("this is a very long axis label ", letters[1:5]))
y <- rnorm(length(x))
l <- gl(5, 3, 15)
d <- data.frame(x=x, y=y, l=l)
ggplot(d, aes(x=x, y=y)) + geom_point() + facet_wrap(~l, scales="free_x") +
theme(axis.text.x=element_text(angle=90, hjust=1))
Run Code Online (Sandbox Code Playgroud)

在这里的评论中,Andrie建议可以手动完成,grid但我不知道如何开始.
通常希望最小化图中的墨水.我有一个刻面的情节(facet_wrap),并希望删除尽可能多的墨水,但保持可读性.我已按照我的意愿进行设置,除非在小平面(子图)中不存在x和y轴,除非在最左侧或底部.如此大量的墨水被移除,我相信眼睛需要这些暗示,并且正在询问如何将x和y轴放在a中的所有图中facet_wrap.下面是我的代码到目前为止,当前输出和所需的输出(红线是所需的加入):
library(ggplot); library(grid)
ggplot(mtcars, aes(mpg, hp)) +
geom_point() +
facet_wrap(~carb) +
theme(panel.grid = element_blank(),
panel.background = element_rect(fill = "white", colour = "black"),
panel.border = element_rect(fill = NA, colour = "white"),
axis.line = element_line(),
strip.background = element_blank(),
panel.margin = unit(2, "lines"))
Run Code Online (Sandbox Code Playgroud)
当前情节

期望的情节

我有这个数据框:
Date Server FileSystem PercentUsed
1 12/1/2011 A / 60
2 1/2/2012 A /var 50
3 2/1/2012 A tmp 90
4 2/10/2012 A /db 86
5 2/13/2012 A /app 90
6 12/1/2011 B C: 67
7 1/2/2012 B D: 67
8 2/1/2012 B F: 34
9 2/10/2012 B /restore 89
10 2/13/2012 B G: 56
11 12/1/2011 C / 90
12 1/2/2012 C /tmp 78
13 2/1/2012 C /data 67
14 2/10/2012 C /Storage 34
15 2/13/2012 C /database 12 …Run Code Online (Sandbox Code Playgroud) 可以帮我改变这些图的标题文字大小.即使它们变大?
脚本
ggplot(NMPSCMOR, aes(Length, fill=Year)) +
geom_histogram(position="dodge", binwidth=60, colour="black") + xlim(0, 600) +
scale_fill_grey(start = 1, end = 0)+
geom_vline(data=ddply(NMPSCMOR, Year~Morphology~Sector2, numcolwise(mean)),
mapping=aes(xintercept=Length,color=Year), linetype=2, size=1) +
scale_color_grey(start=1,end=0)+
xlab("Length Class") +
ylab(expression(paste("Total Count"))) + #( ", m^2, ")", sep =
facet_wrap( ~ Morphology + Sector2, ncol=3, scales = "free") +
theme(
panel.grid.minor = element_blank(), #removes minor grid lines
panel.grid.major = element_blank())
Run Code Online (Sandbox Code Playgroud) 我使用facet_wrap将我的散点图分割为
facet_wrap(x~y+z)
Run Code Online (Sandbox Code Playgroud)
根据需要,这会在我的案例中生成22个图.但是,这22个图中的每一个的标签显示为3行(x,y和z),这不必要地消耗窗口中的空间并将图块拼成一个小区域.我宁愿希望我的情节更大.由于变量y和z很短,我想将它们显示在同一行而不是两行中.
我查看了贴标机选项,但它们似乎都没有做我想要的.我很感激这里有任何建议.
我试图理解为什么输出facet_grid()和输出facet_wrap()是不同的,即使输入是相同的:
ggplot(temp, aes(x = valor)) +
geom_histogram(binwidth = 5, fill = NA, color = "black") +
facet_grid(estratificacao ~ referencia, scales = "free") +
scale_x_continuous(breaks = seq(0, 100, 10)) + theme_classic()
Run Code Online (Sandbox Code Playgroud)
ggplot(temp, aes(x = valor)) +
geom_histogram(binwidth = 5, fill = NA, color = "black") +
facet_wrap(estratificacao ~ referencia, scales = "free") +
scale_x_continuous(breaks = seq(0, 100, 10)) + theme_classic()
Run Code Online (Sandbox Code Playgroud)
请参阅,该参数scales = "free"对于facet_grid()和没有相同的行为facet_wrap().有什么可以解释的?
我一直在寻找解决方案,但似乎大多数处理单独生成的图表被合并为PDF格式,而不是将使用分面生成的图表分离到PDF的单独页面上.
在上面的数据中使用以下代码,选择生成列表中的所有项目:
Ex<-read.csv("StackOverflowEx (3).csv")
library(ggplot2)
library(reshape2)
vars <- select.list(names(Ex),multiple=TRUE,graphics=TRUE)
Cases<-subset(Ex,select=vars)
gg<-melt(Cases,id=c("Item","Total","Admin"))
print(ggplot(gg, aes(x=Total,y=Admin))+
geom_point(colour="dark green",size=1.5)+
geom_point(aes(y=value,color=variable))+
geom_smooth(aes(y=value,fill=variable),
method=loess,size=1,linetype=1,se=T)+
facet_wrap(~variable,ncol=2,nrow=1000)+
ylim(0,1)+
labs(x="Expected",y="Admin",title=vars))
Run Code Online (Sandbox Code Playgroud)
......应该生成所有8个(AH)案例的小平面包装.然而,生成这种情况往往会破坏图表并使它们的可读性降低,并且在实践中,我打算在500多个案例中使用它(它只返回标有列名称的条形图,没有可读图表).
是否可以指定转换为PDF时在单个页面上显示的构面图表数量,而不是将所有图表压缩到单个页面中?例如,使用上述数据,在单独包含所有8个案例的单独页面上生成两个2x2图(即第1页上的案例AD,第2页上的案例EH).
我可以通过突出显示4个案例+"项目","总计"和"管理员"并重复接下来的4个案例并组合生成的PDF来完成此操作.然而,在实践中有超过500个案例,这意味着超过100次迭代,有很多人为错误的可能性.一些帮助自动化过程将是很好的.
考虑以下ggplot2图形,其中长小平面/条形文本分为两行.该文字超出了专门用于分面标题的区域.
library(ggplot2)
x <- c(1:3, 1:3)
y <- c(3:1, 1:3)
grp <- c(0, 0, 0, 1, 1, 1)
p <- qplot(x=x, y=y) + geom_line() + facet_wrap(~ grp)
grob <- ggplotGrob(p)
strip.elem.y <- grid.ls(getGrob(grob, "strip.text.x",
grep=TRUE, global=TRUE))$name
grob <- geditGrob(grob, strip.elem.y[1],
label="First line and\n second line" )
grid.draw(grob)
Run Code Online (Sandbox Code Playgroud)
有没有办法增加条带文本区域的高度?