2016-05-16 100 views
3

点阵图这是低于绘图中的R

dput(test21) 
structure(list(Freq = c(9L, 7L, 7L, 4L), MonthAbb = c("Jan", 
"Feb", "Mar", "Apr")), .Names = c("Freq", "MonthAbb"), row.names = c(NA, 
-4L), class = "data.frame") 

我知道如何使用这些数据来创建一个barplot我的数据集,但是,我很感兴趣,下面

enter image description here

创建散点图这样要做到这一点

一种方法是如下

a1 = seq(1, 9, length.out = 9) 
a2 = rep(LETTERS[1], 9) 
a = cbind(a1,a2) 

b1 = seq(1, 7, length.out = 7) 
b2 = rep(LETTERS[2], 7) 
b = cbind(b1,b2) 

c1 = seq(1, 7, length.out = 7) 
c2 = rep(LETTERS[3], 7) 
c= cbind(c1,c2) 

d1 = seq(1, 4, length.out = 4) 
d2 = rep(LETTERS[4], 4) 
d= cbind(d1,d2) 

test21a = as.data.frame(rbind(a,b,c,d)) 
test21a$a1 = as.numeric(test21a$a1) 

ggplot(data = test21a, aes(x=a2, y=a1, color = a2)) + geom_point() 

但是,这是非常ineffici恩,我正在手动创建一个数字序列。有兴趣了解是否有更好的方法来做到这一点。

+0

是否有要这样还是会像'dotchart( test21 $ Freq,labels = test21 $ MonthAbb,pch = 20,col = c('red','blue','green','gray'))'do? – steveb

+0

@steveb,我可以做你使用'ggplot(data = test21,aes(x = MonthAbb,y = Freq))+ geom_point()'提到的内容,但这不是我想到的。 –

回答

6

您可以重构您的数据以创建具有堆叠点的“barplot”等效项。

# Restructure data 
dat = data.frame(MonthAbb = rep(test21$MonthAbb, test21$Freq), 
       Count = sequence(test21$Freq)) 
dat$MonthAbb = factor(dat$MonthAbb, levels=month.abb) 

ggplot(dat, aes(MonthAbb, Count - 0.5, fill=MonthAbb)) + 
    geom_point(size=6, pch=21, show.legend=FALSE) + 
    #geom_text(data=test21, aes(label=Freq, y=Freq), vjust=-0.5) + # To put labels above markers 
    geom_text(data=test21, aes(label=Freq, y=Freq - 0.5)) + # To put labels inside topmost markers 
    scale_y_continuous(limits=c(0,max(dat$Count)), breaks=0:max(dat$Count)) + 
    theme_bw() + 
    labs(x="Month", y="Frequency") 

enter image description here

然而,在我看来,一个线图的工作更好地在这里:

test21$MonthAbb = factor(test21$MonthAbb, levels=month.abb) 

ggplot(test21, aes(MonthAbb, Freq)) + 
    geom_line(aes(group=1)) + 
    geom_point() + 
    scale_y_continuous(limits=c(0, max(test21$Freq)), breaks=0:max(test21$Freq)) + 
    theme_bw() + 
    labs(x="Month", y="Frequency") 

enter image description here

+0

我同意线图,但y轴上的单词频率有点误导。我应该把它改变成更有意义的东西。但你的解决方案是完美的。正是我在找什么,谢谢eipi10 –

+2

我想你可以简化表达式定义'计数'只是'序列(test21 $ Freq)' – alistaire

+0

感谢您指出了@alistaire。我已经更新了我的答案。我记得在雾蒙蒙的过去某处学习了“序列”的存在,但之前没有用过它。 – eipi10