在R中为3个具有2个维度的变量绘制3D图表

时间:2018-08-22 17:25:14

标签: r plot 3d

我有一个要在R中绘制它们的数据集。我知道有很多软件包,例如ploty或一些other 3D plots。我的问题是我的数据集包括5种不同的类型,例如5种不同的汽车,我想比较5种不同类别中每种类型的速度和功率。因此,总共有10列(不包括类的第一列),但是我想有5个图表,每个图表都有2个维度。如下图所示,对于a,b,c,d,e中的每个,索引为1的列为速度,索引为2的列为幂,并且图表针对不同的类别进行绘制;因此,a1是a的速度,a2是2的幂。对于5种类型的汽车,有五类和两个变量:

photo

命令dput之后的结果如下,因此您可以使用数据:

  structure(list(X = structure(1:5, .Label = c("class1", "class2", 
  "class3", "class4", "class5"), class = "factor"), a1 = c(489.4, 
  505.8, 525.8, 550.2, 576.6), a2 = c(197.8, 301, 389.8, 502, 571.2
  ), b1 = c(546.8, 552.6, 558.4, 566.4, 575), b2 = c(287.2, 305.8, 
  305.2, 334.4, 348.6), c1 = c(599.6, 611.4, 623.6, 658, 657.4), 
 c2 = c(318.8, 423.2, 510.8, 662.4, 656), d1 = c(616, 606.8, 
 600.2, 595.6, 595), d2 = c(242.4, 292.8, 329.2, 378, 397.2
  ), e1 = c(582.4, 580, 579, 579, 579), e2 = c(214, 255.4, 
 281.8, 303.8, 353.8)), .Names = c("X", "a1", "a2", "b1", 
  "b2", "c1", "c2", "d1", "d2", "e1", "e2"), class = "data.frame", row.names       
 = c(NA,-5L))

所以我想要一个,例如a1的蓝色,a2的蓝色(它可以是一个平面),b1的一个灰色,b2的一个绿色,甚至气泡或其他类型也可能有用。我认为在y和z轴上有1和2的平面,在x轴上有类的平面是很好的。类是一个分类变量。 我该如何格式化它以及通过哪些工具可以满足需要? 附注:实际上,我有5组,每组2张图表。我想将它们组合成5种不同的3D图表。

1 个答案:

答案 0 :(得分:1)

df <- data.frame(a1 = c(489.4,  505.8,  525.8,  550.2,  576.6),
                 a2 = c(197.8,  301,    389.8,  502,    571.2),
                 b1 = c(546.8,  552.6,  558.4,  566.4,  575),
                 b2 = c(287.2,  305.8,  305.2,  334.4,  348.6),
                 c1 = c(599.6,  611.4,  623.6,  658,    657.4),
                 c2 = c(318.8,  423.2,  510.8,  662.4,  656),
                 d1 = c(616,    606.8,  600.2,  595.6,  595),
                 d2 = c(242.4,  292.8,  329.2,  378,    397.2),
                 e1 = c(582.4,  580,    579,    579,    579),
                 e2 = c(214,    255.4,  281.8,  303.8,  353.8))

我利用了excel。最好以这种方式提供数据

不确定我是否正确理解了您的问题。我猜您不需要3D图。将颜色用作三维尺寸可能对您的目的有益。我假设您想比较不同“汽车”中的“速度”与“功率”。

我手动调整数据的形状以创建一个新的数据框,以便“速度”和“功率”在同一列中。我还添加了一个新列“组”以指示它们是什么类型的“汽车”。

colnames(df) <- rep(c("V1", "V2"), 5)
df.new <- rbind(df[, c(1, 2)], 
                df[, c(3, 4)],
                df[, c(5, 6)],
                df[, c(7, 8)],
                df[, c(9, 10)])
df.new$Group <- factor(rep(c("a","b","c","d","e"), each = 5))
df.new$Class <- rep(c(1:5), 5) # make it factor if you want, then add as.numeric() for plotting

它可能像这样显示(我隐藏了一些行):

      V1    V2 Group Class
1  489.4 197.8     a     1
2  505.8 301.0     a
3  525.8 389.8     a
4  550.2 502.0     a
5  576.6 571.2     a
6  546.8 287.2     b
7  552.6 305.8     b
11 599.6 318.8     c
16 616.0 242.4     d
21 582.4 214.0     e
25 579.0 353.8     e

使用基本R图

plot(V2 ~ V1, data = df.new, pch = as.numeric(Class),col = Group)
legend("topleft", legend = c("a","b","c","d","e"), pch = 1, col = 1:5)

要使用ggplot

library(ggplot2)
ggplot(data = df.new, aes(x = V1, y = V2, color = Group)) +
    geom_point(aes(shape = as.factor(Class)))

您将能够看到这些类型的“汽车”以及不同类别的区别。随时交换形状和颜色。