我想使用ggplot2包并排放置两个图,即相当于par(mfrow=c(1,2)).
例如,我希望以下两个图表以相同的比例并排显示.
x <- rnorm(100)
eps <- rnorm(100,0,.2)
qplot(x,3*x+eps)
qplot(x,2*x+eps)
Run Code Online (Sandbox Code Playgroud)
我需要将它们放在相同的data.frame中吗?
qplot(displ, hwy, data=mpg, facets = . ~ year) + geom_smooth()
Run Code Online (Sandbox Code Playgroud) 我需要绘制一个显示计数的条形图和一个在一个图表中显示速率的折线图,我可以分别做两个,但是当我把它们放在一起时,我的第一层的比例(即geom_bar)与第二层重叠层(即geom_line).
我可以将轴geom_line向右移动吗?
随着grid.arrange我可以安排多个ggplot在网格中人物使用类似,实现了多屏图:
library(ggplot2)
library(grid)
library(gridExtra)
Run Code Online (Sandbox Code Playgroud)
然后生成一些ggplot2图
plot5 <- grid.arrange(plot4, plot1, heights=c(3/4, 1/4), ncol=1, nrow=2)
Run Code Online (Sandbox Code Playgroud)
如何获得"不平衡"2 col布局,其中第一个col中有一个绘图,第二个col中有三个绘图?我玩弄了一个'网格网格'方法,试图用grid.arrange一个网格(例如plot5,上面)绘制另一个图,但得到了:
在ArrangeGrob中出错(...,as.table = as.table,clip = clip,main = main,:输入必须是grobs!
更新:
感谢您的建议.我会考虑viewports和grid.与此同时,感谢@DWin,layOut'wq'包中的函数非常适合我Sweave文档中的编译图:

更新2:
该arrangeGrob命令(由@baptiste建议)也运行良好,看起来非常直观 - 至少很容易改变两列的宽度.它还具有不需要`wq'包的好处.
这是我的Sweave文件中的代码:
<<label=fig5plot, echo=F, results=hide>>=
plot5<-grid.arrange(plot4, arrangeGrob(plot1, plot2, plot3, ncol=1),
ncol=2, widths=c(1,1.2))
@
\begin{figure}[]
\begin{center}
<<label=fig5,fig=TRUE,echo=T, width=10,height=12>>=
<<fig5plot>>
@
\end{center}
\caption{Combined plots using the `arrangeGrob' command.}
\label{fig:five}
\end{figure}
Run Code Online (Sandbox Code Playgroud)
产生以下输出:

顺便说一下,有人告诉我为什么出现'> NA'?
我试图基于此表将两个ggplot2图合并为一个:
Type RatingA RatingB
1 One 3 36
2 Two 5 53
3 One 5 57
4 One 7 74
5 Three 4 38
6 Three 8 83
Run Code Online (Sandbox Code Playgroud)
我想制作两个散点图,其中y轴的等级平均值,x轴上的类型.
这是我创建每个图形的方式:
p1 <- ggplot(test, aes(x=reorder(Type, RatingA, mean), y=RatingA)) +
stat_summary(fun.y="mean", geom="point")
p2 <- ggplot(test, aes(x=reorder(Type, RatingB, mean), y=RatingB)) +
stat_summary(fun.y="mean", geom="point")
Run Code Online (Sandbox Code Playgroud)
由于p1和p2具有相同的x轴,我希望它们可以垂直排序.我看着facet_align,但我找不到能做到这一点的东西.
我一直在考虑使用par()或layout()函数来组合ggplots.是否可以使用这些功能?
假设我想绘制散点图的ggplot和直方图的ggplot.我希望将这两个图组合在一起(不是在单个画面中).适用吗?
我在R中使用简单的绘图尝试了它,而没有使用ggplot函数.它确实有效.
以下是来自Quick-R的示例链接:http://www.statmethods.net/advgraphs/layout.html
# 4 figures arranged in 2 rows and 2 columns
attach(mtcars)
par(mfrow=c(2,2))
plot(wt,mpg, main="Scatterplot of wt vs. mpg")
plot(wt,disp, main="Scatterplot of wt vs disp")
hist(wt, main="Histogram of wt")
boxplot(wt, main="Boxplot of wt")
# One figure in row 1 and two figures in row 2
attach(mtcars)
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))
hist(wt)
hist(mpg)
hist(disp)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用ggplot并组合情节时,我没有得到输出.
我用ggplo2创建了一个很好的facet_wrap密度图.我希望每个面板都有x和y轴标签,而不是只有左侧的y轴标签和底部的x标签.我现在拥有的是这样的:
library(ggplot2)
myGroups <- sample(c("Mo", "Larry", "Curly"), 100, replace=T)
myValues <- rnorm(300)
df <- data.frame(myGroups, myValues)
p <- ggplot(df) +
geom_density(aes(myValues), fill = alpha("#335785", .6)) +
facet_wrap(~ myGroups)
p
Run Code Online (Sandbox Code Playgroud)
哪个回报:
alt text http://www.cerebralmastication.com/wp-content/uploads/2009/10/3stooges.png
看起来这应该很简单,但我的Google Fu太穷了,无法找到答案.
我明天参加一个大型的编程竞赛,在那里我使用R.
时间是主要因素(7个编码问题仅2小时).问题与数学有关.
我定义一个函数时,我想写"f"而不是"function".这可以完成,我有代码这样做,但我失去了它,无法找到它.
我在哪里找到sin()函数用于度输入,而不是弧度?
(可选)是否有任何特定于算法的任务视图或库.
编程竞赛的任何提示?
我为比赛准备了以下备忘单:http: //pastebin.com/h5xDLhvg
========编辑:==========
所以我终于有时间写下我的经验教训了.
编程比赛非常有趣,但遗憾的是我得分不是很高.我排在前50%,但我的目标是进入前25%.
主要问题是编程时间很短,总共只有2个小时.但我必须阅读问题描述,而且我还需要一些时间将结果粘贴到网络表单等等,所以它更像是90分钟的编程.
希望12月的下一场比赛将延长时间,比如3-4个小时.组织者说也许会是这样的.
此外,比赛没有互联网访问,我的移动接待并没有真正起作用.
对我来说,主要的教训是你必须使用你日常使用的语言才能获得真正的机会.特别是,如果只有大约90分钟的时间来编程.由于我在日常工作中使用的是haskell而不是R,我认为R不是最好的选择.在比赛期间,我混淆了haskell和R函数定义,并且我编写了太多小错误来编程足够快.
比赛的好处在于,大约80名参赛者共获得了大约2万美元的奖金.因此,前25%的参与者每人获得500至1500美元.此外,我认为前15%的人能够立即获得一家赞助商IT公司的工作.
所以这是一个双赢的局面.这很有趣,而且你可以获得奖金.此外,IT公司非常高兴,因为他们可以访问顶级程序员.
我利用这个机会与IT决策者交流.其中一个来自一家大银行.我大胆地建议他们考虑转换到Scala进行开发(来自Java的转换).还要考虑使用R和Haskell.很有趣,他们甚至说他们已经看过Scala了!
值得注意的是,我最好的朋友之一在比赛中表现非常出色.他只有19岁,但他在前20%中排名第一,获得了500美元的奖金.他打败了我和我的6所大学,他们都拥有可敬的计算机科学学位.我的朋友程序更像是黑客风格,但他的速度非常快.
使用前10名的人:1)Java 2)C#和3)C++(前10名中没有其他编程语言!).我认为唯一合理得分的编程语言是Ruby.
对于下一次比赛,选择的编程语言可能是haskell.出于一个原因,为haskell找到2个队友比为R编程更容易.最多可以有3人组成一个团队.
我的理想情况是一个非常轻量级的框架,我可以同时使用多种编程语言进行比赛.这样,主代码可以用haskell编写(所有队友都可以编程).一些特定的函数可以用R,Mathematica,甚至其他编程语言(如python/sage)编程.
这听起来有点矫枉过正.但我认为这将是非常有用的.就像一个函数,它有一个矩阵作为参数并返回一个矩阵.然后这个框架工作从R代码自动生成RESTful服务,所以我可以从任何编程语言调用R函数.矩阵只是作为JSON数据(或其他一些序列化)传递.好的,但这不是主题......
最后一些经验教训作为子弹列表:
非常感谢'Iterator'的帮助!
从昨天开始,我正在阅读答案和网站,以便在一个图表中合并和对齐,histogram并boxplot使用ggplot2包生成.
这个问题与其他问题不同,因为boxplot chart需要减少在左边缘height和aligned左边缘histogram.
考虑以下数据集:
my_df <- structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, …Run Code Online (Sandbox Code Playgroud) 我想知道如何修复一块地块.绘图以数组排列,以便一行中的所有绘图具有相同的Y轴变量,并且列中的所有绘图具有相同的X轴变量.
当在网格中连接在一起时,这将创建一个多重绘图.我禁用大多数图表上的标签,除了外部标签,因为内部标签具有相同的变量和比例.但是,由于外部图表具有标签和轴值,因此它们会产生与其他图案不同的大小.
我想在网格中添加2个列和行,用于变量名称和轴范围值...然后仅绘制相应网格空间上的变量名称和另一个网格空间上的轴值,因此仅绘制在剩余空间中指向并获得相同的大小.
编辑1:感谢rcs指点我 align.plot
编辑align.plot接受空值(当不需要轴中的标题/文本时)
现在我更接近目标了,但由于标签的缘故,第一个columun图的宽度仍然比其余的小.
示例代码:
grid_test <- function ()
{
dsmall <- diamonds[sample(nrow(diamonds), 100), ]
#-----/align function-----
align.plots <- function(gl, ...){
# Obtained from http://groups.google.com/group/ggplot2/browse_thread/thread/1b859d6b4b441c90
# Adopted from http://ggextra.googlecode.com/svn/trunk/R/align.r
# BUGBUG: Does not align horizontally when one has a title.
# There seems to be a spacer used when a title is present. Include the
# size of the spacer. Not sure how to do this yet.
stats.row <- vector( "list", gl$nrow )
stats.col <- vector( "list", …Run Code Online (Sandbox Code Playgroud) 我想在一个循环中制作多个ggplot,并在一个绘图上显示它们。
for ( i in 1:8) {
g <- ggplot(data=mtcars, aes(x=hp, y=wt))+
geom_point()
print(g)
}
Run Code Online (Sandbox Code Playgroud)
我想将上面的图安排在一页,四行和两列上。有谁知道这是怎么做到的吗?谢谢。
ggplot2我正在使用和包制作多面板图cowplot,但我需要更改单个图的高度。最简单地用一个例子来展示
library(ggplot2)
library(cowplot)
p1 <- ggplot(iris, aes(Sepal.Width, Sepal.Length, colour = Species)) +
geom_point() +
theme(axis.text.x = element_blank(),
axis.title.x = element_blank(),
legend.position = "none")
p2 <- ggplot(iris, aes(Sepal.Width, Sepal.Length, colour = Species)) +
geom_point() +
theme(axis.text.x = element_blank(),
axis.title.x = element_blank(),
axis.text.y = element_blank(),
axis.title.y = element_blank(),
legend.position = "none")
p3 <- ggplot(iris, aes(Sepal.Width, Sepal.Length, colour = Species)) +
geom_point() +
theme(axis.text.y = element_blank(),
axis.title.y = element_blank(),
legend.position = "none")
p4 <- ggplot(iris, aes(Sepal.Width, Sepal.Length, colour = Species)) …Run Code Online (Sandbox Code Playgroud)