2017-08-30 142 views
1

我試圖繪製a中出現的次數與b中出現次數的關係。開始很簡單:從R中的表生成散點圖

> 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
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

這是一個很好很簡單的答案。然而,如果'a < - c(1,2,3,2,2,3,3,2,3,0,4)',它不起作用,因爲''x'和'y'長度不同' 。解決方案是否可以推廣? – wwl

+0

@wwl編輯我的答案,使其更通用。 – useR

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