在R中绘制一个点图

Jil*_*lum 3 plot r 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")
Run Code Online (Sandbox Code Playgroud)

我知道如何使用这些数据创建一个条形图,但是,我有兴趣在下面创建一个点图

在此输入图像描述

一种方法如下

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() 
Run Code Online (Sandbox Code Playgroud)

但这是非常低效的,我手动创建一系列数字.有兴趣了解是否有更好的更有效的方法.

eip*_*i10 6

您可以重新构建数据以创建具有堆叠点的"条形图"等效项.

# 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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,在我看来,线条图在这里效果更好:

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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 我认为你可以将定义`Count`的表达式简化为`sequence(test21 $ Freq)` (2认同)