使用散点图中的坐标来分隔R中的数据帧

时间:2018-04-17 12:25:30

标签: r

此散点图中的每个点都是数据框中的一列。我想得到我画的线左边的列列表。我现在还不知道从哪里开始。 scatterplot of the 1st 2 principal components

为了澄清我的问题,我想在该行的左侧或右侧获得列表或列数组。我不需要帮助画线。

这是我如何制作情节的。

  pcaPlot = qplot(x=prin_comp$rotation[,1], y=prin_comp$rotation[,2]) +
                  geom_text(aes(label=row.names(prin_comp$rotation))) +
                  ggtitle(my_title)

2 个答案:

答案 0 :(得分:1)

你可以尝试基础R方法

# run a Principal Components Analysis
pca <- prcomp(USArrests)

# plot the first two components
plot(pca$x[,1], pca$x[,2])

# plot a straight line to a pPlot with slope == 0.5 
h <- abline(a = 0, b=0.5, lwd=2)

enter image description here

# hot wo calculate y=b*x
# use x*0.5 = y to find out if point lies left or right of the line
pca$x[,1]*0.5 < pca$x[,2]

# check with coloring
points(pca$x[,1], pca$x[,2], col=ifelse(pca$x[,1]*0.5 < pca$x[,2], 3, 2), pch=16)

enter image description here

或使用ggplot

library(tidyverse)
b <- 0.5
prcomp(USArrests) %>% 
  .$x %>% data.frame() %>% 
  mutate(gr=PC1*b<PC2) %>% 
  ggplot(aes(PC1, PC2)) + 
    geom_abline(slope = b, intercept = 0) +
    geom_point(aes(color=gr)) 

enter image description here

答案 1 :(得分:1)

通过眼睛看,你的行看起来好像y = -10x + 0.2875,所以你只需要测试

(10*prin_comp$rotation[,1] + prin_comp$rotation[,2] - 0.2875) > 0

如果这是TRUE,那么它就是该行右侧的一个点,如果是FALSE,那么它就在左侧。