2011-03-01 38 views
4

预安装的地震数据集有5个变量和1000个观测值。分组数据,按组查找结果以及使用R绘图

我试图创建的简单图应该显示地震深度类别(即Y轴=震级,X轴=深度类别)的平均地震震级。

在这个数据集中,地震深度变量的范围是从40到680.我想将地震深度的1000个观测值变成8个类别, 40 - 120,121 - 200,... 600 - 680.然后,我想按深度类别取平均地震震级,并将其绘制在折线图上。

我感谢任何帮助。 谢谢!

+3

我可能会建议你修改问题标题以使其更一般化。这个问题实际上是关于装箱数据,按组查找结果以及绘图。地震数据集恰好有助于说明这些概念。其他有类似问题的人会喜欢能够找到问题。 – Chase 2011-03-01 22:59:26

+1

这个标题好多了,目前还不清楚q是真的关于“地震”还是仅仅是你可以做的总结和情节,正如其他人指出的那样,一个线条图真的不适合(但是实际的数据可能不重要) – mdsumner 2011-03-01 23:45:18

回答

8

首先分为深度类与切:

depth.class <- cut(quakes$depth, c(40, 120, 200, 300, 400, 500, 600, 680), include.lowest = TRUE) 

(请注意,您的类定义可能需要为你以后什么和给切的细节变化()的行为)。

找到每个depth.class内的平均幅度(假定没有NAS):

mean.mag <- tapply(quake$mag, depth.class, mean) 

(添加na.rm例如mean.mag <- tapply(quake$mag, depth.class, mean, na.rm = TRUE)用于数据集的适当缺失值)。

绘制为一条线:

plot(mean.mag, type = "l", xlab = "magnitude class") 

这是一些额外的工作把类标签上的X轴,但在这一点上,如果一个线图是真是再合适不过了这里,你可能会质疑。

快速刺,关闭轴,然后从切口因素竖起类直接:

plot(mean.mag, type = "l", xlab = "magnitude class", axes = FALSE) 
axis(1, 1:nlevels(depth.class), levels(depth.class)) 
axis(2) 
box() 
+0

-1你没有使用ggplot。 ;-) – 2011-03-01 22:33:56

+0

谢谢,mdsumner。如果有NAs会怎么样? – AME 2011-03-01 22:41:35

+1

我在几分钟前添加了一个编辑 - 基本上你将参数传递给tapply中的FUN:tapply(x,fac,mean,na.rm = TRUE) – mdsumner 2011-03-01 22:43:16

4

线图是不是在这里有用的;数据中点之间的界线代表什么关系?也许点图可能有用吗?

cats <- with(quakes, cut(depth, breaks = seq(40L, max(depth), by = 80), 
         include.lowest = TRUE)) 
dat <- aggregate(mag ~ cats, data = quakes, FUN = mean) 
with(dat, dotchart(mag, group = cats, xlab = "Mean Magnitude")) 

主要生产:

enter image description here

1

你确定你想在这里线图?我不确定这是最适合在这里使用的情节。无论如何,这里的诀窍是使用cut来适当地合并数据,然后使用众多聚合工具之一来查找这些组的平均值。最后,我们将绘制这些汇总值。我喜欢在ggplot2plyr的工具,这样的任务:

library(ggplot2) 
df <- quakes 
df$bins <- with(df, cut(depth, breaks = c(0,40, 120, 200, 280, 360, 440, 520, 600, 680))) 
df.plot <- ddply(df, .(bins), summarise, avg.mag = mean(mag)) 
qplot(bins, avg.mag, data = df.plot) 

#If you want a line plot, here's one approach: 
qplot(as.numeric(bins), avg.mag, data = df.plot, geom = "line") + 
xlim(levels(df.plot$bins)) 
2

我同意,你可能不想线图,而是一个dotplot()或某种形式的箱形图。

您可以轻松地从格子包做到这一点使用带状疱疹:

library(lattice) 
x <- runif(100) 
y <- runif(100) 
bwplot(~x|equal.count(y)) 

shingle()equal.count()将让您指定,而不是让R键为你选择的时间间隔。

box plots with shingles

+0

如果你在这种情况下拼接,我认为更难以将手段视为深度的函数。将这些箱柜全部放在一个面板中将有助于这一点。 Shingling更经常用于第三个变量的条件。很好的使用格子来改变 - 'ggplot2'通常是基本图形之后选择的图形包。 – 2011-03-02 10:20:32

+0

我同意。现在回想起来,我应该让这些地块垂直而不是水平的,并试图将格子全部压成一排。如果他/她关心组内的关系,在这种情况下,xyplot()变得很容易,这里的格子的真正优点是。 – 2011-03-03 00:40:57