使用R将二维数据转换为三维图的三维数据

时间:2016-12-14 20:19:13

标签: r plot ggplot2 ternary

我有二维数据(来自矩阵的下半部分):

m <- data.frame(x=c(1,1,1,2,2,3),y=c(1,2,3,1,2,1))
#  x y
#1 1 1
#2 1 2
#3 1 3
#4 2 1
#5 2 2
#6 3 1

如果我绘制这个,它会给出类似的结果:

x
x x
x x x

所以,我有xy轴。但是,我想在三元图中绘制这些数据,如下所示:

  x
 x x
x x x

我需要z轴。它是相同的数据,但是有另一个轴。

1 个答案:

答案 0 :(得分:0)

我不认为你想要的是一个三元图,但我不确定为什么你想要以这种方式移动数据,如果你没有z值。看一下ternary plots的这个描述,并注意它们,根据定义,它们有三个变量(你的数据只有2个),它们必须总和为一个常数(除非你的意思是你的遗漏了最后一个变量,这使得每一行总和为你在问题中没有定义的常数?)。

如果您只想移动x值,可以将它们置于y的每个值的中心,但前提是y值是离散的,就像这里的情况一样。这使用dplyr进行修改,scale每组x值以0为中心(尽管它不会修改标准差)。

m %>%
  group_by(y) %>%
  mutate(newX = as.numeric(scale(x, scale = FALSE)) ) %>%
  ggplot(aes(x = newX, y = y)) +
  geom_point()

给出:

enter image description here

我不确定你这样做会得到什么信息,因为你失去了通过这种方式比较原始x比例的所有能力。除非您将color = factor(x)添加到映射中,如下所示:

enter image description here

如果这不是您要做的事情(我宁愿不这样做),请更新您的问题以澄清您期望的输出。

关于你的意思是,有一个z列缺失导致每一行与特定常量相加,这是一个使用ggtern绘制该列的示例,假设每行总计10个单位:

m %>%
  mutate(z = 10 - (x + y)) %>%
  ggtern(aes(x, y, z)) +
  geom_point()

enter image description here