在R中构造具有晶格的泡沫格子图

时间:2013-09-10 16:54:10

标签: data-visualization

首先,这是一个家庭作业问题。问题是前。 2.6应用多变量分析导论第26页。它的布局如下:

  

构建地震数据的气泡图,使用纬度和经度作为散点图,深度为圆,深度越大,圆圈越小。此外,将幅度分成三个相等的范围,并根据点所在的幅度组,用不同的符号标记气泡图中的点。

我已经发现基本图形中的符号与格子不兼容。另外,我还没想到格子是否具有改变符号大小(即气泡大小)的功能。昨晚我绝望地购买了格子书,正如我在一些例子中所看到的,可以为每个“切割”或面板标记颜色和形状。然后,我在假设符号大小也可以被操纵的情况下工作,但我无法弄清楚如何。

我的代码如下:

    plot(xyplot(lat ~ long | cut(mag, 3), data=quakes,
        layout=c(3,1), xlab="Longitude", ylab="Latitude",
        panel = function(x,y){
          grid.circle(x,y,r=sqrt(quakes$depth),draw=TRUE)
        }
    ))

我尝试使用网格包来绘制圆圈,但是当执行时,我只是得到一个空白的图。有谁能请我指出正确的方向?我将非常感激!

3 个答案:

答案 0 :(得分:1)

以下是一些代码,用于在不使用晶格包的情况下创建所需的绘图。我显然必须生成我自己的假数据,所以你可以忽略所有这些东西,如果你愿意,可以直接进入绘图命令。

####################################################################
#Pseudo Data
n = 20
latitude = sample(1:100,n)
longitude = sample(1:100,n)
depth = runif(n,0,.5)
magnitude = sample(1:100,n)
groups = rep(NA,n)

for(i in 1:n){
if(magnitude[i] <= 33){
    groups[i] = 1
}else if (magnitude[i] > 33 & magnitude[i] <=66){
    groups[i] = 2
}else{
    groups[i] = 3
}
}
####################################################################

#The actual code for generating the plot
plot(latitude[groups==1],longitude[groups==1],col="blue",pch=19,ylim=c(0,100),xlim=c(0,100),
     xlab="Latitude",ylab="Longitude")
points(latitude[groups==2],longitude[groups==2],col="red",pch=15)
points(latitude[groups==3],longitude[groups==3],col="green",pch=17)

points(latitude[groups==1],longitude[groups==1],col="blue",cex=1/depth[groups==1])
points(latitude[groups==2],longitude[groups==2],col="red",cex=1/depth[groups==2])
points(latitude[groups==3],longitude[groups==3],col="green",cex=1/depth[groups==3])

enter image description here

答案 1 :(得分:1)

您只需将default.units = "native"添加到grid.circle()

即可
plot(xyplot(lat ~ long | cut(mag, 3), data=quakes,
            layout=c(3,1), xlab="Longitude", ylab="Latitude",
            panel = function(x,y){
              grid.circle(x,y,r=sqrt(quakes$depth),draw=TRUE, default.units = "native")
            }
))

显然你需要修改一些设置才能得到你想要的东西。

enter image description here

答案 2 :(得分:0)

我写了一个名为 tactile 的软件包,它添加了一个使用晶格生成气泡图的函数。

tactile::bubbleplot(depth ~ lat*long | cut(mag, 3), data=quakes,
                    layout=c(3,1), xlab="Longitude", ylab="Latitude")

enter image description here