我有二维数据(来自矩阵的下半部分):
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
所以,我有x
和y
轴。但是,我想在三元图中绘制这些数据,如下所示:
x
x x
x x x
我需要z
轴。它是相同的数据,但是有另一个轴。
答案 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()
给出:
我不确定你这样做会得到什么信息,因为你失去了通过这种方式比较原始x比例的所有能力。除非您将color = factor(x)
添加到映射中,如下所示:
如果这不是您要做的事情(我宁愿不这样做),请更新您的问题以澄清您期望的输出。
关于你的意思是,有一个z
列缺失导致每一行与特定常量相加,这是一个使用ggtern
绘制该列的示例,假设每行总计10个单位:
m %>%
mutate(z = 10 - (x + y)) %>%
ggtern(aes(x, y, z)) +
geom_point()