我使用的是geom_smooth()从ggplot2.
在Hadley Wickham的书("ggplot2 - 用于数据分析的优雅图形")中,有一个例子(第51页),其中method="lm"使用了它.在联机手册不存在的通话method参数.我看到其他人使用的Google搜索结果(以及此处的问题)method='loess'.
是否有一个详尽的清单解释了选项?
从我所看到的,'lm'绘制一条直线,'loess'绘制一条非常平滑的曲线.我假设还有其他人在参考点之间绘制了更多的锯齿线?
se示例中的参数也不在帮助或在线文档中.
FWIW这是我的代码.
p <- ggplot(output8, aes(age, myoutcome, group=id, colour=year_diag_cat2)) +
geom_line() + scale_y_continuous(limits = c(lwr,upr))
p + geom_smooth(aes(group=year_diag_cat2), method="loess", size=2, se=F)
Run Code Online (Sandbox Code Playgroud) 另一个发布的图表,另一天在ggplot2中调整了一些东西...我在唠叨?我不确定...
dat <- data.frame(x = rnorm(100), y = rnorm(100))
ggplot(dat, aes(x=x,y=y)) +
geom_point() +
labs(y=expression(Blah[1]))
dat <- data.frame(x = rnorm(100), y = rnorm(100))
ggplot(dat, aes(x=x,y=y)) +
geom_point() +
labs(y=expression(Blah[1d]))
Run Code Online (Sandbox Code Playgroud)
我正在尝试弄清楚如何在轴标签中加下标字母.第一个例子只是一个数字,只要你在方括号中有一个字符就会失败.Blah [下标(1d)]基本上就是我需要的,但我无法弄清楚如何让它让我在下标中有字母.尝试了各种变体,包括paste()等.
当然,要增加挫折......
labs(y=expression(Blah[12])) - 这很有效
labs(y=expression(Blah[d])) - 这很有效
labs(y=expression(Blah[d1])) - 这很有效
labs(y=expression(Blah[1d])) - 这失败了.
思考?
我认为这里的问题有点明显.我希望将图例放置(锁定)在"绘图区域"的左上角.出于多种原因,使用c(0.1,0.13)等不是一种选择.
有没有办法改变坐标的参考点,使它们相对于绘图区域?
mtcars$cyl <- factor(mtcars$cyl, labels=c("four","six","eight"))
ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.position = c(0, 1), title="Legend placement makes me sad")
Run Code Online (Sandbox Code Playgroud)

干杯
相同的标题,完全重写了这个问题.
为什么alpha工作在第一个图而不是第二个?我很难理解为什么使用硬编码的值在正确的位置绘制rect而不是透明但是在data.frame中它按预期工作?
mtcars$cyl <- factor(mtcars$cyl)
mtcars$am <- factor(mtcars$am)
ggplot(mtcars) +
geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
geom_rect(data=data.frame(xmin=100, xmax=200, ymin=0, ymax=Inf), aes(xmin=xmin, xmax=xmax, ymin=ymin,ymax=ymax), fill="red", alpha=0.2)
ggplot(mtcars) +
geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
geom_rect(aes(xmin=100, xmax=200, ymin=0,ymax=Inf), fill="red", alpha=0.2)
Run Code Online (Sandbox Code Playgroud) 不是'你怎么......?' 但更多'你怎么......?'
如果你有一个文件有人给你200个列,并且你想将它减少到你需要分析的几个,你怎么去做?一种解决方案是否比另一种解决方
假设我们有一个包含列col1,col2到col200的数据框.如果您只想要1-100然后125-135和150-200,您可以:
dat$col101 <- NULL
dat$col102 <- NULL # etc
Run Code Online (Sandbox Code Playgroud)
要么
dat <- dat[,c("col1","col2",...)]
Run Code Online (Sandbox Code Playgroud)
要么
dat <- dat[,c(1:100,125:135,...)] # shortest probably but I don't like this
Run Code Online (Sandbox Code Playgroud)
要么
dat <- dat[,!names(dat) %in% c("dat101","dat102",...)]
Run Code Online (Sandbox Code Playgroud)
还有什么我想念的吗?我知道这是主观的,但这是你可能会潜入并开始以一种方式进行的那些细节之一,并且当有更有效的方法时会陷入习惯.就像这个问题关于哪些.
编辑:
或者,是否有一种简单的方法来创建可行的列名称向量?name(dat)不打印它们之间的逗号,你需要在上面的代码示例中,所以如果以这种方式打印名称,你到处都有空格,必须手动输入逗号...是否有命令会给你"col1","col2","col3",...作为你的输出,这样你就可以轻松抓住你想要的东西?
如果您运行:
mod <- lm(mpg ~ factor(cyl), data=mtcars)
Run Code Online (Sandbox Code Playgroud)
它运行,因为lm知道查看mtcars以找到mpg和cyl.
然而mean(mpg)失败,因为它找不到mpg,所以你这样做mean(mtcars$mpg).
你如何编写一个函数,以便它知道在'数据'中查找变量?
myfun <- function (a,b,data){
return(a+b)
}
Run Code Online (Sandbox Code Playgroud)
这将适用于:
myfun(mtcars$mpg, mtcars$hp)
Run Code Online (Sandbox Code Playgroud)
但会失败:
myfun(mpg,hp, data=mtcars )
Run Code Online (Sandbox Code Playgroud)
干杯
我希望顶部的灰色条更宽,因为它的边缘距离字母的顶部和底部稍远一些(strip.text - A,B,C等).我本以为行高会起到填充的作用,但事实并非如此.
ggplot(diamonds, aes(carat, price, fill = ..density..)) +
xlim(0, 2) + stat_binhex(na.rm = TRUE)+
facet_wrap(~ color) +
theme(strip.text = element_text(lineheight=20))
Run Code Online (Sandbox Code Playgroud) 用一个例子可以很好地说明这一点
str(mtcars)
mtcars$gear <- factor(mtcars$gear, labels=c("three","four","five"))
mtcars$cyl <- factor(mtcars$cyl, labels=c("four","six","eight"))
mtcars$am <- factor(mtcars$am, labels=c("manual","auto")
str(mtcars)
tapply(mtcars$mpg, mtcars$gear, sum)
Run Code Online (Sandbox Code Playgroud)
这给了我每个齿轮的加总mpg.但是我说我想要一个3x3的桌子,顶部有齿轮,侧面是圆形,而且有两个总和的9个单元格,我怎么能"聪明地"得到它.
我可以去.
tapply(mtcars$mpg[mtcars$cyl=="four"], mtcars$gear[mtcars$cyl=="four"], sum)
tapply(mtcars$mpg[mtcars$cyl=="six"], mtcars$gear[mtcars$cyl=="six"], sum)
tapply(mtcars$mpg[mtcars$cyl=="eight"], mtcars$gear[mtcars$cyl=="eight"], sum)
Run Code Online (Sandbox Code Playgroud)
这看起来很麻烦.
那么我如何在混合中加入第三个变量呢?
这有点在我正在思考的空间中. 使用ddply进行汇总统计
更新这让我在那里,但它并不漂亮.
aggregate(mpg ~ am+cyl+gear, mtcars,sum)
Run Code Online (Sandbox Code Playgroud)
干杯
Standard R output looks like this
> 3
[1] 3
Run Code Online (Sandbox Code Playgroud)
To remove the prefix 1 you can use
> cat(3)
3
Run Code Online (Sandbox Code Playgroud)
Is there a way to remove this globally? Or do you have to wrap cat() around everything?
Further to that, I'm using this within knitr, so if there isn't an R global setting, there may be a knitr wide setting, I did look, but couldn't see one.
Edit: It was asked why one would want this, something like if …
抱歉,这个例子不是那么好,但确实强调了这一点.
mtcars$tran <- factor(mtcars$am, labels=c("Man","Aut"))
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_smooth(aes(colour=tran))
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_point(aes(colour=tran))
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_point(aes(colour=tran)) + geom_smooth(aes(colour=tran))
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_smooth(aes(colour=tran)) + scale_y_continuous(limits=c(12,60))
Run Code Online (Sandbox Code Playgroud)
我想要做的是绘制一条平滑的曲线,但通过限制y轴的比例来"放大".然而,在计算平滑曲线时,ggplot似乎排除了超出比例限制的任何数据.是的,这似乎合乎逻辑,但我怎么看到我想看到的?在我的实际数据中,(原始)y值的范围在5到14之间,但平滑的曲线完全在7到9之间.因此顶部有很多空的空间.当我将其设置为c(7,9)时,它不再使用该范围之外的点来计算平滑曲线,因此我得到不同的曲线.
我不能通过数据提供,但您可以在此示例中看到这一点.看看在最后一个图中,两个点是否被丢弃,"Man"曲线的后半部分与原始图形中的不同.
题
如果scale_y_continuous限制用于构造平滑曲线(逻辑)的数据值,那么如何使用所有数据绘制曲线,然后在其上"放大"(与y轴相对).
如果不清楚,请告诉我.
谢谢