我是R的新手并且一直在使用谷歌(主要是指导我到这个网站)来摸索我为项目制作可通过的图表.我无法找出要搜索的内容,找到与我有同样问题的其他人,所以我决定提出要求.
我有一个看起来像这样的数据集:
ATM TEMP PARENT variable value
1 1 5 1 DEAD 2
2 1 5 2 DEAD 0
3 1 5 3 DEAD 1
4 1 20 1 DEAD 1
55 1 5 1 LIVE 47
56 1 5 2 LIVE 42
57 1 5 3 LIVE 45
58 1 20 1 LIVE 45
109 1 5 1 SWIMMING 1
110 1 5 2 SWIMMING 8
111 1 5 3 SWIMMING 4
112 1 20 1 SWIMMING 4
Run Code Online (Sandbox Code Playgroud)
ATM代表压力实验,温度,温度,PARENT,幼虫来自3个成年人中的一个,变量代表在给定压力/温度下幼虫的状况,数值是多少(最初不同,但我使用reshape2合并它们. …
applyR中的函数是简化循环以获得输出的好方法.是否有一个等效函数可以帮助人们在替换向量值时避免循环?通过实例更好地理解这一点......
# Take this list for example
x = list( list(a=1,b=2), list(a=3,b=4), list(a=5,b=6) )
# To get all of the "a" elements from each list, I can do
vapply(x,"[[",1,"a")
[1] 1 3 5
# If I want to change all of the "a" elements, I cannot do
vapply(x,"[[",1,"a") = 10:12
Error in vapply(x, "[[", 1, "a") = 10:12 :
could not find function "vapply<-"
# (this error was expected)
# Instead I must do something like this...
new.a = …Run Code Online (Sandbox Code Playgroud) 简而言之:
我想为使用的双面板绘图的每个"面板"分别设置图例facet_wrap.facet_wrap(scales="free")当我想要不同的轴刻度时,使用工作正常,但不适用于点的大小.
背景: 我有几个样本的数据,每个样本有三个测量:x,y和z.每个样本来自1类或2类.x和y在每个类中具有相同的分布.但是,1级的所有z测量值都小于1.0; 第2类的z测量值范围为0到100.
我被卡住的地方:分别在x和y轴上 绘制x和y.使每个点的面积与其z值成比例.
d = matrix(c(runif(100),runif(20)*100),ncol=3)
e = data.frame( gl(2,20), d )
colnames(e) = c("class","x","y","z")
ggplot( data = e, aes(x=x, y=y, size=z) ) +
geom_point() + scale_area() +
facet_wrap( ~ class, ncol=1, scales="free" )
Run Code Online (Sandbox Code Playgroud)

问题: 请注意,第一个面板上的点很难看到,因为它们位于用于单个图例的刻度的最低端,范围从0到100.甚至可以有两个单独的图例(每个图例都有一个不同的范围)或者我应该制作两个图并将它们与视口组合?
我正在尝试为二进制数据创建带有分箱x轴的散点图.当我使用geom_point二进制y时,情节很无用(见图1).如图2所示,我想根据x轴的值对数据进行分类,然后使用geom_point(将每个bin中的obs数量映射到该点的大小)绘制每个bin中的avg x和avg y ).我可以通过聚合数据来做到这一点,但我想知道ggplot是否可以直接进行.我玩过stat_bindot等等,但无法找到解决方案.有任何想法吗?下面是一些代码.
谢谢!
# simulate data
n=1000
y=rbinom(n,1,0.5)
x=runif(n)
data=data.frame(x,y)
# figure 1 - geom_point with binary data, pretty useless!
ggplot(data,aes(x=x,y=y)) + geom_point() + ylim(0,1)
# let's create an aggregated dataset with bins
bin=cut(data$x,seq(0,1,0.05))
# I am sure the aggregation can be done in a better way...
data.bin=aggregate(data,list(bin),function(x) { return(c(mean(x),length(x)))})
# figure 2 - geom_point with binned x-axis, much nicer!
ggplot(data.bin,aes(x=x[,1],y=y[,1],size=x[,2])) + geom_point() + ylim(0,1)
Run Code Online (Sandbox Code Playgroud)
图1和2:
