小编jsl*_*che的帖子

ggplot2 - 线上方的阴影区域

我有一些数据限制在1:1以下.我想在一个图上通过对线上方区域进行轻微阴影来展示这一点,以吸引观众注意线下方的区域.

我正在使用qplot生成图表.很快,我有;

qplot(x,y)+geom_abline(slope=1)

但对于我的生活,无法弄清楚如何在不绘制单独物体的情况下轻松遮挡上述区域.这有一个简单的解决方案吗?


编辑

好的,Joran,这是一个示例数据集:

 df=data.frame(x=runif(6,-2,2),y=runif(6,-2,2),
   var1=rep(c("A","B"),3),var2=rep(c("C","D"),3))
 df_poly=data.frame(x=c(-Inf, Inf, -Inf),y=c(-Inf, Inf, Inf))
Run Code Online (Sandbox Code Playgroud)

这是我用来绘制它的代码(我接受了你的建议并一直在查找ggplot()):

ggplot(df,aes(x,y,color=var1))+
 facet_wrap(~var2)+
 geom_abline(slope=1,intercept=0,lwd=0.5)+
 geom_point(size=3)+
 scale_color_manual(values=c("red","blue"))+
 geom_polygon(data=df_poly,aes(x,y),fill="blue",alpha=0.2)
Run Code Online (Sandbox Code Playgroud)

踢回的错误是:"找不到对象'var1'"有事告诉我,我正在错误地实现参数...

r fill ggplot2

6
推荐指数
4
解决办法
5804
查看次数

错误栏通过打开的符号显示

我有一对点略有偏移的点.每对点都有相关的误差线.我已经指定该对中第一个点的符号与第二个点的符号不同(闭合圆与开圆).我希望它可以通过打开的符号显示错误栏.

这是一个模拟数据集:

x = runif(4,-2,2)
x_1 = runif(4,-1,3)
dfr <- data.frame(
 x = c(x, x_1),
 y = rep(c("A","B","C","D"), 2),
 upper = c(x+2, x_1+1),
 lower = c(x-2, x_1-2),
 type = rep(c("alpha", "beta"), each = 4))
Run Code Online (Sandbox Code Playgroud)

这是情节:

dodge=position_dodge(width=0.5)  
ggplot(dfr,aes(x=y,y=x,colour=type)) + 
    geom_point(size=8,aes(shape=type),position=dodge) +
    geom_errorbar(aes(ymax=upper,ymin=lower),position = dodge) + 
    scale_colour_manual(values = c('gray','black')) +
    scale_shape_manual(values = c(19,21)) +
    coord_flip() + 
    opts(legend.position="none")
Run Code Online (Sandbox Code Playgroud)

rplot

感谢您的任何帮助,您可以提供!

symbols r ggplot2

6
推荐指数
1
解决办法
1068
查看次数

R - 使用匹配运算符时保留顺序(%in%)

我正在使用匹配运算符从单独的数据框中获取矩阵中出现的值.但是,生成的矩阵的值按照它们出现在数据帧中的顺序而不是原始矩阵中的值.有没有办法使用匹配运算符保留原始矩阵的顺序?

这是一个简单的例子:

vec=c("b","a","c"); vec

df=data.frame(row.names=letters[1:5],values=1:5); df

df[rownames(df) %in% vec,1]
Run Code Online (Sandbox Code Playgroud)

这会产生数据框中出现> [1] 1 2 3的顺序"a" "b" "c".但是,我想生成>[1] 2 1 3哪个是它们出现在原始向量中的顺序.

谢谢!

r operators

6
推荐指数
1
解决办法
1862
查看次数

子集SpatialPolygonsDataFrame

我有一个SpatialPolygonsDataFrame通过readOGRrgdal包中使用shapefile读取而创建的。我正在尝试使用它来生成采样网格spsample在该sp包中,以便从该区域收集的调查数据进行插值。但是,SpatialPointsDataFrame所包含的区域比调查范围大得多,因此,插值法预测的值远离进行任何调查的地方。调查数据和shapefile都使用相同的proj4string投影。

我想使用由测量站设置的坐标来对SpatialPolygonsDataFrame进行子集设置,但是我不确定相关值在对象中的存储位置。

恐怕我无法提供相关数据,因为shapefile不是在线托管的。但是,我将从Paul Hiemstra对此荷兰的帖子的回复中借用一些代码:

library(ggplot2)
library(sp)
library(automap)
library(rgdal)

#get the spatial data for the Netherlands
con <- url("http://gadm.org/data/rda/NLD_adm0.RData")
print(load(con))
close(con)

class(gadm)
bbox(gadm)
>         min      max
>r1  3.360782  7.29271
>r2 50.755165 53.55458
Run Code Online (Sandbox Code Playgroud)

假设调查是在以下领域进行的:

bbox(surveys)
    >         min      max
    >r1     4.000    7.000
    >r2    51.000   53.000
Run Code Online (Sandbox Code Playgroud)

如何裁剪SpatialPolygonsDataFrame的该区域?


编辑:这个问题似乎回答了我。很抱歉,没有进行足够的搜索(尽管这些评论确实使我对使用rgeos有了一些了解)。但是,gIntersection 导致R崩溃...

mapping r

5
推荐指数
1
解决办法
3494
查看次数

从R中的模型公式中删除函数包含的变量

我有一个带变换变量的模型,例如:

 data = data.frame(y = runif(100,0,10), x1 = runif(100,0,10), x2 =   runif(100, 0, 10))
 mod = lm(y ~ scale(x1) + scale(x2), data)
Run Code Online (Sandbox Code Playgroud)

我想从公式中删除一个完整的变量,如下所示:

mod = lm(y ~ scale(x1), # x2 is gone! 
 data)
Run Code Online (Sandbox Code Playgroud)

但我想使用用户提供的变量字符串来删除它(换句话说,我将它包装在一个函数中,并且不可能手动编辑公式,就像我在这里一样).

如果变量未转换,这将很简单gsub:

remove.var = "x2"
update(mod, formula. = as.formula(gsub(remove.var, "", format(formula(mod)))))
Run Code Online (Sandbox Code Playgroud)

但同样,它返回完全可预测的错误:

 > Error in as.matrix(x) : argument "x" is missing, with no default
Run Code Online (Sandbox Code Playgroud)

因为scale()还在公式中!

有没有办法做到这一点regexpr,或者某种方式,我没有看到这是完全明显的?我想它可扩展到其他类型的转换,如:log,log10等等.

作为另一层复杂性,假设要删除的变量也出现在交互中:

 mod = lm(y ~ scale(x1) * scale(x2), data)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,人们也必须删除交互* …

regex r

5
推荐指数
1
解决办法
1839
查看次数

通过不同的向量乘以数据帧的各种子集

我想用数值向量乘以数据框中的几列.值的特定向量根据另一列中的值而变化.

- 编辑 -

如果我使数据集更复杂,即超过2个条件并且条件在数据集周围随机混乱,该怎么办?

以下是我的数据集示例:

df=data.frame(
  Treatment=(rep(LETTERS[1:4],each=2)),
  Species=rep(1:4,each=2),
  Value1=c(0,0,1,3,4,2,0,0),
  Value2=c(0,0,3,4,2,1,4,5),
  Value3=c(0,2,4,5,2,1,4,5),
  Condition=c("A","B","A","C","B","A","B","C")
  )
Run Code Online (Sandbox Code Playgroud)

看起来像:

 Treatment Species Value1 Value2 Value3 Condition
     A       1      0      0      0         A
     A       1      0      0      2         B 
     B       2      1      3      4         A
     B       2      3      4      5         C
     C       3      4      2      2         B
     C       3      2      1      1         A
     D       4      0      4      4         B
     D       4      0      5      5         C
Run Code Online (Sandbox Code Playgroud)

如果Condition=="A",我想将第3-5列乘以向量c(1,2,3).如果Condition=="B",我想将第3-5列乘以向量c(4,5,6).如果Condition=="C",我想将第3-5列乘以向量 …

r vector subset multiplying

4
推荐指数
1
解决办法
5030
查看次数

ggplot2 - 使用上标注释文本

我想在我的情节中添加一个R ^ 2值.我将标签传递给geom_text(),如下所示;

 geom_text(aes(x,y,label=caption),parse=T,
        data.frame(x=-2,y=80,caption=("R^2=0.43"))))
Run Code Online (Sandbox Code Playgroud)

但它绘制为=(R ^ 2,0.43).有任何想法吗?

r subscript ggplot2

4
推荐指数
1
解决办法
2946
查看次数

用列循环ggplot2

我试图循环数据框和列以产生多个图.我有一个数据框列表,对于每个数据框,我想绘制对几个预测变量之一的响应.

例如,我可以轻松地循环数据框:

df1=data.frame(response=rpois(10,1),value1=rpois(10,1),value2=rpois(10,1))
df2=data.frame(response=rpois(10,1),value1=rpois(10,1),value2=rpois(10,1))

#Looping across data frames
lapply(list(df1,df2), function(i) ggplot(i,aes(y=response,x=value1))+geom_point())
Run Code Online (Sandbox Code Playgroud)

但是我在数据框中的列之间循环时遇到问题:

lapply(list("value1","value2"), function(i) ggplot(df1,aes_string(x=i,y=response))+geom_point())
Run Code Online (Sandbox Code Playgroud)

我怀疑它与我对待美学的方式有关.

最终我想串起来lapply生成数据帧和列的所有组合.

任何帮助表示赞赏!


编辑:Joran有它!在使用时必须将非列表响应放在引号中aes_string

lapply(list("value1","value2"), function(i) ggplot(df1,aes_string(x=i,y="response"))+geom_point())
Run Code Online (Sandbox Code Playgroud)

作为参考,这里是串联lapply函数以生成所有组合:

lapply(list(df1,df2), function(x)
  lapply(list("value1","value2"), function(i) ggplot(x,aes_string(x=i,y="response"))+geom_point() ) )
Run Code Online (Sandbox Code Playgroud)

r ggplot2

4
推荐指数
1
解决办法
2468
查看次数

ggplot2 - 在同一个图上绘制多个模型

我有一个线性和非线性模型列表,这些模型来自不同的数据集,它们测量相同的两个变量x,y并且我想在同一个图上绘制stat_smooth.这是为了能够轻松地比较数据集之间xy之间关系的形状.

我正试图找出最有效的方法来做到这一点.现在我正在考虑创建一个空的ggplot对象,然后使用某种循环或lapply顺序添加到该对象,但这比我想象的要困难.当然,简单地提供模型是最容易的,ggplot但据我所知,这是不可能的.有什么想法吗?

这是一个简单的示例数据集,仅使用两个模型,一个是线性的,一个是指数的:

df1=data.frame(x=rnorm(10),y=rnorm(10))
df2=data.frame(x=rnorm(15),y=rnorm(15))

df.list=list(lm(y~x,df1),nls(y~exp(a+b*x),start=list(a=1,b=1),df2))
Run Code Online (Sandbox Code Playgroud)

以及两个单独的示例图:

ggplot(df1,aes(x,y))+stat_smooth(method=lm,se=F)
ggplot(df2,aes(x,y))+stat_smooth(method=nls,formula=y~exp(a+b*x),start=list(a=1,b=1),se=F)
Run Code Online (Sandbox Code Playgroud)

r ggplot2

4
推荐指数
1
解决办法
8772
查看次数

从nlme对象中提取随机公式

我试图从使用构造的模型中提取随机结构lme,但除了固定的公式之外,我似乎无法得到任何其他结构.例如,

library(nlme)
fm1 <- lme(distance ~ age, Orthodont, random = ~ age | Subject)
deparse(terms(fm1))
# "distance ~ age"
Run Code Online (Sandbox Code Playgroud)

这可以lmer使用findbars():

library(lmerTest)
fm2 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
findbars(formula(fm2))
# [[1]]
# Days | Subject
Run Code Online (Sandbox Code Playgroud)

我希望能够提取:

# ~ age | Subject
# (Days | Subject)
Run Code Online (Sandbox Code Playgroud)

我可能会使用这个,regexpr但我也希望这适用于更复杂的结构(多个随机斜率,嵌套随机变量等),并且可能包括加法或随机斜率.谢谢!

r lme4 mixed-models nlme

4
推荐指数
1
解决办法
337
查看次数

标签 统计

r ×10

ggplot2 ×5

fill ×1

lme4 ×1

mapping ×1

mixed-models ×1

multiplying ×1

nlme ×1

operators ×1

regex ×1

subscript ×1

subset ×1

symbols ×1

vector ×1