这是我下面的数据集
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")
我知道如何使用此数据创建条形图,但是,我有兴趣在下面创建这样的点图
一种方法如下
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()
但这效率很低,我正在手动创建一个数字序列。有兴趣了解是否有更好,更有效的方法。
最佳答案
您可以重组数据以创建带有堆积点的“条形图”。
# 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")
但是,在我看来,线图在这里效果更好:
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")