从R中的表生成散点图

时间:2017-08-30 18:54:54

标签: r

我正在尝试将a中的出现次数与b中的出现次数进行对比。开始很简单:

> a <- c(1,2,3,2,2,3,3,2,3)
> b <- c(1,2,3,1,2,3,3,2,1)
> table(a)
a
1 2 3 
1 4 4 
> table(b)
b
1 2 3 
3 3 3 

如何生成最终的情节?

> plot(table(a), table(b))
Error in plot.xy(xy, type, ...) : invalid plot type

不起作用。我正在寻找的是一个有三个点的散点图:(1,3),(4,3)和(4,3)。所以水平轴应该给出a中出现的次数,而垂直轴应该给出b中出现的次数。

2 个答案:

答案 0 :(得分:2)

plot(x = as.numeric(table(a)), y = as.numeric(table(b)))

你的两个点具有相同的坐标,因此它plot上显示只有两个点

如果ab的长度不同,您可以先将两者都转换为factor并明确指定等级:

a <- c(1,2,3,2,2,3,3,2,3,0,4)
b <- c(1,2,3,1,2,3,3,2,1)

a = factor(a, levels = 0:4)
b = factor(b, levels = 0:4)

# > table(a)
# a
# 0 1 2 3 4 
# 1 1 4 4 1 
# > table(b)
# b
# 0 1 2 3 4 
# 0 3 3 3 0

plot(x = as.numeric(table(a)), y = as.numeric(table(b)))

答案 1 :(得分:1)

我们可以使用tidyverse

library(tidyverse)
library(ggplot2)
list(a, b)  %>% 
    map(table) %>% 
    map(as.data.frame) %>% 
    reduce(full_join, by = 'Var1') %>%
    rename(a = Freq.x, b = Freq.y) %>%
    ggplot(., aes(a, b )) +
        geom_point(shape = 19, size = 5) +
        theme_minimal()

enter image description here