繁体   English   中英

使用R将三元图的2维数据转换为3维数据

[英]Transform 2-dimension data to 3-dimension data for ternary plot with R

我有2维数据( 来自矩阵的下部 ):

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轴。 它是相同的数据,但带有另一个轴。

我不认为您想要的是三元图,尽管我完全不确定为什么没有z值时为什么要以这种方式移动数据。 看一下对三元图的这种描述,请注意,根据定义,它们具有三个变量(您的数据只有2个变量),并且它们必须总和为一个常数(除非您表示自己缺少最后一个变量,这使得每个变量行总和为您尚未在问题中定义的某个常量?)。

如果您只是想移动x值,则可以将y的每个值居中,尽管仅当y值是离散的(如此处的情况)。 这使用dplyr进行修改,并将每组x值的s scale到以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()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM