线长等于数据范围的多线图 - GGPlot2

时间:2014-04-03 15:59:52

标签: r ggplot2

我正在尝试使用R中的ggplot2创建具有多个线性线的图,其中每条线表示单独的个体对x轴上的环境变化的响应。我可以使用下面提供的脚本使这个图没有问题,但是,我希望每个人的每一行的长度代表每个人被采样的数据范围(某些行显然会比其他行更长)。

此链接(http://www.intechopen.com/source/html/18476/media/image4.jpeg)将向您展示我希望最终图形看起来如何,除了我只需要1帧(而不是9),并且线条的长度会有所不同。此外,我的x轴上的数据是连续的,而不是离散的。

似乎我可能需要使用geom_linerange,但调整ymin和ymax似乎没有意义,因为我实际上试图限制x轴上的范围。

非常感谢任何帮助!

此代码将根据以下数据生成图表。

p <- qplot(dBLevel,LowFreq, group=Male,data=test,geom="line")

数据子集('Upper'和'Lower'表示环境变量的范围(dBLevel),每个'Male'被采样.'LowFreq'是'dBLevel'的响应变量。)

test <- structure(list(Male = c(69L, 69L, 69L, 69L, 69L, 113L, 113L, 
113L, 113L, 113L, 126L, 126L, 126L, 126L, 126L, 143L, 143L, 143L, 
143L, 143L, 155L, 155L, 155L, 155L, 155L, 178L, 178L, 178L, 178L, 
178L, 186L, 186L, 186L, 186L, 186L, 193L, 193L, 193L, 193L, 193L
), dBLevel = c(-20L, -10L, 0L, 10L, 20L, -20L, -10L, 0L, 10L, 
20L, -20L, -10L, 0L, 10L, 20L, -20L, -10L, 0L, 10L, 20L, -20L, 
-10L, 0L, 10L, 20L, -20L, -10L, 0L, 10L, 20L, -20L, -10L, 0L, 
10L, 20L, -20L, -10L, 0L, 10L, 20L), LowFreq = c(3093.5, 3142.7, 
3191.9, 3241.2, 3290.4, 3017.7, 3218.1, 3418.6, 3619, 3819.4, 
2986.1, 3251.1, 3516.2, 3781.2, 4046.3, 2776.5, 2793.1, 2809.8, 
2826.4, 2843.1, 3207.8, 3306.2, 3404.5, 3502.8, 3601.2, 2813.1, 
2834.5, 2855.9, 2877.2, 2898.6, 4468.3, 4461.2, 4454.2, 4447.1, 
4440.1, 2498.5, 2596.9, 2695.4, 2793.8, 2892.3), Upper = c(3.7, 
3.7, 3.7, 3.7, 3.7, 12.23, 12.23, 12.23, 12.23, 12.23, -3.96, 
-3.96, -3.96, -3.96, -3.96, -3.22, -3.22, -3.22, -3.22, -3.22, 
-11.34, -11.34, -11.34, -11.34, -11.34, 15.34, 15.34, 15.34, 
15.34, 15.34, -6.75, -6.75, -6.75, -6.75, -6.75, -0.67, -0.67, 
-0.67, -0.67, -0.67), Lower = c(-2.71, -2.71, -2.71, -2.71, -2.71, 
-1.31, -1.31, -1.31, -1.31, -1.31, -16.17, -16.17, -16.17, -16.17, 
-16.17, -15.28, -15.28, -15.28, -15.28, -15.28, -15.79, -15.79, 
-15.79, -15.79, -15.79, -3.79, -3.79, -3.79, -3.79, -3.79, -20.19, 
-20.19, -20.19, -20.19, -20.19, -8.24, -8.24, -8.24, -8.24, -8.24
)), .Names = c("Male", "dBLevel", "LowFreq", "Upper", "Lower"
), row.names = c(NA, 40L), class = "data.frame")

1 个答案:

答案 0 :(得分:0)

这是一个可能的解决方案,为每个Male绘制一条线,其中斜率和截距由原始数据确定,但x范围由Lower和{{的值确定1}}对于那个男性。

我使用线性回归Upper来获取线系数,并使用lm()来获得每个Lower和Upper值的y值。这些值放在名为predict()的数据框中。

line_dat

enter image description here