绘制每列与每列之间的图表

9
我有一个数据框(“data”),包含7列(2个因子,5个数字)。第一列包含7个不同国家的名称,接下来的列中,我收集了描述每个国家的不同参数(如人口、GDP等)的数据。在最后一列中,一个因子变量指定了各个国家所属的大陆。
数据长这样:
structure(list(Country = structure(c(5L, 4L, 7L, 2L, 1L, 6L, 
3L), .Label = c("Brazil", "Chile", "China", "France", "Germany", 
"India", "Netherlands"), class = "factor"), GDP = c(0.46, 0.57, 
0.75, 0.56, 0.28, 0.88, 1), Population = c(0.18, 0.09, 0.54, 
0.01, 0.02, 0.17, 0.84), Birth.rate = c(87.21, 18.34, 63.91, 
14.21, 5.38, 51.19, 209.26), Income = c(43.89, 18.23, 63.91, 
12.3, 0.1, 14.61, 160.82), Savings = c(43.32, 0.11, 0, 1.91, 
5.29, 36.58, 50.38), Continent = structure(c(2L, 2L, 2L, 3L, 
3L, 1L, 1L), .Label = c("Asia", "Europe", "South America"), class = "factor")), .Names = c("Country", 
"GDP", "Population", "Birth.rate", "Income", "Savings", "Continent"
), class = "data.frame", row.names = c(NA, -7L))

我需要一种循环函数,可以将每一列(例如散点图)相互绘制,以便最终每一列(除第一个和最后一个,即两个因子变量)都已经与所有其他列绘制在一个单独的图表中(而不是所有图表都在一个中)。最好将所有这些图表保存到本地计算机上的某个文件夹中。此外,希望根据绘制的两列自动标记x轴和y轴。对于绘图中的每个点,显示相应国家名称的标签也很方便。最后,希望根据三个不同的大陆为各国的点设置三种不同的颜色。
到目前为止,我只有一小段代码,大致如下:
for (i in seq(1,length(data),1)) {
   plot(data[,i], ylab=names(data[i]), xlab="Country", 
   text(i, labels=Country, pos=4, cex =.5)) 
} 

正如您所看到的,它只将每一列与第一列(“Country”)绘制出来,这不是我最终想要的。

您有任何想法如何实现这一点吗?


1
pairsGGally::ggpairs - Axeman
1
好的,我已经在我的问题上附上了数据。谢谢! - Jonathan Rhein
@DJJ,抱歉,我试图共享我的数据,但无法弄清楚如何做。我怎样才能在问题中共享我的数据文件? - Jonathan Rhein
尝试在您的数据框上使用函数dput() - DJJ
2个回答

11

你可以直接在R中使用pairs()。请注意,dt代表您的数据集。

pairs(dt)

在这里输入图片描述

dt <- structure(list(Country = structure(c(5L, 4L, 7L, 2L, 1L, 6L, 
3L), .Label = c("Brazil", "Chile", "China", "France", "Germany", 
"India", "Netherlands"), class = "factor"), GDP = c(0.46, 0.57, 
0.75, 0.56, 0.28, 0.88, 1), Population = c(0.18, 0.09, 0.54, 
0.01, 0.02, 0.17, 0.84), Birth.rate = c(87.21, 18.34, 63.91, 
14.21, 5.38, 51.19, 209.26), Income = c(43.89, 18.23, 63.91, 
12.3, 0.1, 14.61, 160.82), Savings = c(43.32, 0.11, 0, 1.91, 
5.29, 36.58, 50.38), Continent = structure(c(2L, 2L, 2L, 3L, 
3L, 1L, 1L), .Label = c("Asia", "Europe", "South America"), class =      "factor")), .Names = c("Country",  
"GDP", "Population", "Birth.rate", "Income", "Savings", "Continent"
), class = "data.frame", row.names = c(NA, -7L))

有没有一种方法可以在单个绘图窗口中获取由pairs()生成的所有这些图? - Jonathan Rhein
这将违背函数的初衷。散点图矩阵允许您探索数据集中的有趣相关性。一旦找到您认为相关的关系,您可以单独绘制它。 - Worice
欢迎您,我们在这里互相帮助。如果有答案确实帮助您解决了问题,请给它应得的认可,通过勾选或指定分数。再见! - Worice
非常想投票,但我的声望积分还不够高... - Jonathan Rhein

2

我一直认为 'lattice' 包中的 splom 函数对于这种探索性分析非常有用。虽然这显然不是一个很好的例子,因为它模糊了组成员身份,但它展示了点的组合和 "pairs" 格式中的非参数回归线:

png()
    print( splom(~iris[1:4], groups = Species, data = iris,
          panel = function(x, y, i, j, ...) {
          panel.points(x,y, ...)
          panel.loess(x,y, ...)
      })); dev.off()

enter image description here


你也可以尝试使用corrgram函数/包。使用此函数,您可以同时包含相关性。 - Roman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接