我希望在qplot()
上创建一个包含三个响应变量的密度图。因此,图表将是密度(y)与海拔高度(x),三个颜色编码的密度函数显示每个变化的密度随高程(x轴)的变化而变化。
首先,我将三个响应变量(我的数据集“CAIRNGORM”中的3列)子集化为一个名为“ZONES”的小子集:
ZONES<-CAIRNGORM[c("prop_Cal", "prop_Emp", "prop_Jun")]
然后我尝试创建qplot:
library(ggplot2)
qplot(Elevation, data=CAIRNGORM, geom="density", fill="ZONES", alpha=I(0.5))
创建了一个图,但不是给我三条痕迹,每一条为prop_Cal,prop_Emp和prop_Jun,我只有一条痕迹,它似乎显示了我的高程数据的密度 - 一条直线!
我真的很感谢有人对此的帮助 - 我如何指示qplot构建“ZONES”中包含的三条跟踪而不是x变量?感谢
编辑:缩短版本的数据(尝试在Stack Overflow中输入正确的代码格式):
> head(CAIRNGORM)
position group Elevation
1 Q1 A 680
2 Q2 A 730
3 Q3 A 780
4 Q4 A 830
5 Q5 A 880
6 Q6 A 930
prop_bar prop_Cal prop_Vac prop_Emp prop_Jun prop_Ces prop_Eri ZONES.prop_Cal
1 0.00 1.00 0.0 0 0 0.36 0.4 1.00
2 0.00 1.00 0.0 0 0 0.28 0.0 1.00
3 0.00 0.84 0.6 0 0 0.48 0.0 0.84
4 0.00 1.00 0.0 0 0 0.00 0.0 1.00
5 0.24 0.76 0.0 0 0 0.72 0.0 0.76
6 0.36 0.72 0.0 0 0 0.00 0.0 0.72
ZONES.prop_Emp ZONES.prop_Jun
1 0 0
2 0 0
3 0 0
4 0 0
5 0 0
6 0 0
> head(ZONES)
prop_Cal prop_Emp prop_Jun
1 1.00 0 0
2 1.00 0 0
3 0.84 0 0
4 1.00 0 0
5 0.76 0 0
6 0.72 0 0
答案 0 :(得分:1)
ggplot2
更喜欢&#34; long&#34;而不是&#34;宽&#34;格式。以下是如何在单个图表中获取三个密度图。由于示例数据中的两列都是零,因此我创建了一些虚假数据以供说明:
library(reshape2) # For the melt function
# Fake data
ZONES = data.frame(prop_Cal=rnorm(100),
prop_Emp=rnorm(100,-10,3),
prop_Jun=rnorm(100,10,0.5))
# Melt into long format (take a look at the melted data frame to see what melt is doing)
ZONES.M <- melt(ZONES)
ggplot(ZONES.M, aes(value, fill=variable)) +
geom_density(alpha=0.5)
variable
包含原始宽格式数据框中每列的名称。 value
包含值。将fill
美学设置为variable
告诉ggplot
为variable
的每个级别创建单独的密度图。
您无法根据高程绘制prop_Cal
或其他两个变量的密度。变量的(1维)密度图固有地关于单个变量。如果你试图找到高程和其他三个变量之间的关系,也许你想要一个小提琴情节。例如:
# Fake data with Elevation added
ZONES = data.frame(Elevation=rep(c(10,20,30,40),each=25),
prop_Cal=rnorm(100),
prop_Emp=rnorm(100,-10,3),
prop_Jun=rnorm(100,10,10))
# Melt into long format, this time with Elevation as an id variable
ZONES.M <- melt(ZONES, id.var="Elevation")
ggplot(ZONES.M, aes(Elevation, value, group=Elevation)) +
geom_violin() +
facet_grid(. ~ variable)
现在我们为每个Elevation值创建一个密度图,分别为每个原始三列变量。 (如果要按高程波段进行分组,还可以使用cut
函数首先组合多个高程值。)
如果你想要每个变量与Elevation的散点图,你可以这样做:
ggplot(ZONES.M, aes(Elevation, value, group=Elevation)) +
geom_point(colour="black", fill="lightblue", alpha=0.5, pch=21) +
facet_grid(. ~ variable)
如果要添加回归线(如果要总结Elevation与其他三个变量之间的关系,可能是您实际需要的回归线),请执行以下操作:
ggplot(ZONES.M, aes(Elevation, value, group=Elevation)) +
geom_point(colour="black", fill="lightblue", alpha=0.5, pch=21) +
geom_smooth(aes(group=1)) +
facet_grid(. ~ variable)