在R中绘制一个点图

时间:2016-05-16 02:58:00

标签: r plot ggplot2

这是我的数据集

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

我知道如何使用这些数据创建条形图,但是,我有兴趣创建如下所示的点图

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

但这效率很低,我手动创建了一系列数字。有兴趣了解是否有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分: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