小编nzc*_*ops的帖子

geom_smooth()有哪些方法?

我使用的是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)

r ggplot2

87
推荐指数
2
解决办法
11万
查看次数

ggplot轴标签中的下标字母

另一个发布的图表,另一天在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])) - 这失败了.

思考?

r ggplot2

60
推荐指数
2
解决办法
6万
查看次数

图例放置,ggplot,相对于绘图区域

我认为这里的问题有点明显.我希望将图例放置(锁定)在"绘图区域"的左上角.出于多种原因,使用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)

在此输入图像描述

干杯

r ggplot2

58
推荐指数
4
解决办法
4万
查看次数

geom_rect和alpha - 这是否适用于硬编码值?

相同的标题,完全重写了这个问题.

为什么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)

r ggplot2

54
推荐指数
2
解决办法
3万
查看次数

如何从data.frame中删除列?

不是'你怎么......?' 但更多'你怎么......?'

如果你有一个文件有人给你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",...作为你的输出,这样你就可以轻松抓住你想要的东西?

r dataframe

38
推荐指数
5
解决办法
11万
查看次数

你如何编写一个R函数,以便它"知道"在其他参数中查找变量的'data'?

如果您运行:

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)

干杯

r

20
推荐指数
2
解决办法
630
查看次数

有没有办法增加一个方面的strip.text栏的高度?

我希望顶部的灰色条更宽,因为它的边缘距离字母的顶部和底部稍远一些(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)

r ggplot2

14
推荐指数
1
解决办法
3236
查看次数

两个或多个因子变量的汇总统计数据?

用一个例子可以很好地说明这一点

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)

干杯

r summary

13
推荐指数
2
解决办法
5万
查看次数

How can I remove the prefix (index indicator) [1] in knitr output?

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 …

r knitr

13
推荐指数
1
解决办法
8148
查看次数

geom_smooth() - 并缩放y轴,从平滑中丢失数据

抱歉,这个例子不是那么好,但确实强调了这一点.

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轴相对).

如果不清楚,请告诉我.

谢谢

r ggplot2

11
推荐指数
1
解决办法
3105
查看次数

标签 统计

r ×10

ggplot2 ×6

dataframe ×1

knitr ×1

summary ×1