R 分组数据并绘制多条线

R 分组数据并绘制多条线,r,ggplot2,linechart,R,Ggplot2,Linechart,我想为这个数据集在R中绘制多行:(x=年,y=值) 每所学校都有不同年份的数据。我希望每个学校都有一行。让我们创建一些数据: dd = data.frame(School_ID = c("A", "B", "C", "A", "B"), Year = c(1998, 1998, 1999, 2000, 2005), Value = c(5, 10, 15, 7, 15)) 然后,为了在基本图形中创建绘图,我们创建一组的初始绘图: plot(dd$Year[dd$School_ID=="

我想为这个数据集在R中绘制多行:(x=年,y=值)


每所学校都有不同年份的数据。我希望每个学校都有一行。

让我们创建一些数据:

dd = data.frame(School_ID = c("A", "B", "C", "A", "B"),
  Year = c(1998, 1998, 1999, 2000, 2005),
  Value = c(5, 10, 15, 7, 15))
然后,为了在基本图形中创建绘图,我们创建一组的初始绘图:

plot(dd$Year[dd$School_ID=="A"], dd$Value[dd$School_ID=="A"], type="b",
     xlim=range(dd$Year), ylim=range(dd$Value))
然后迭代地在行上添加:

lines(dd$Year[dd$School_ID=="B"], dd$Value[dd$School_ID=="B"], col=2, type="b")
lines(dd$Year[dd$School_ID=="C"], dd$Value[dd$School_ID=="C"], col=3, type="b")
我使用了
type=“b”
来显示点和线

或者,使用ggplot2:

require(ggplot2)
##The values Year, Value, School_ID are
##inherited by the geoms
ggplot(dd, aes(Year, Value,colour=School_ID)) + 
    geom_line() + 
    geom_point()

这是你想要的吗?您需要
group=School\u id
告诉ggplot2为每个学校绘制单独的线。如果希望横轴包括1998年和2005年之间的所有年份,则在
x=系数(年份)


base R中的plot函数不支持分组,因此需要逐个显示组。GGPLOT可以很好地处理分组。我还建议查看网格XYPLOT,它允许您绘制单独的组

以下是使用网格创建基本分组线图的方法:

library(lattice)
rm(list = ls())     # clear objects  
graphics.off()      # close graphics windows   

test = data.frame(x =  rep(1:3, each = 2),
                  group =  rep(c("Group 1","Group 2"),3),
                  y=   c(22,8,11,4,7,5)
                 )
xyplot(y~x,
       type="b",
       group=group,
       data=test,
       auto.key =list(
         points = FALSE, 
         columns=2,
         lines = TRUE)
)

我似乎只画了一个学校?我画了两条学校线——A学校和B学校。C学校没有线,因为C学校只有一个数据点。对不起,是我的错。我的意思是,当我在我的完整数据集上尝试时,我得到了一行-见图:-。知道为什么吗?好吧?我仍然得到非常奇怪的输出-见上图。评论。这和年与年之间的插值有关吗?对不起-我的错!!我不小心用一个常量替换了所有的学校ID。。。奇怪,我只有一句话…:P谢谢你的帮助。谢谢你,但是当我使用ggplot函数时,它只打印一个学校。我如何为每个学校id画一条线?您可能需要向我们提供完整的数据集。请编辑您以前的答案,而不是创建第二个答案。
  library(ggplot2)

df = read.table(text = "School_id Year Value 
 A           1998    5
 B           1998    10
 C           1999    15
 A           2000    7
 B           2005    15", sep = "", header = TRUE)

ggplot(data = df, aes(x = factor(Year), y = Value, color = School_id)) +       
  geom_line(aes(group = School_id)) + geom_point()
library(lattice)
rm(list = ls())     # clear objects  
graphics.off()      # close graphics windows   

test = data.frame(x =  rep(1:3, each = 2),
                  group =  rep(c("Group 1","Group 2"),3),
                  y=   c(22,8,11,4,7,5)
                 )
xyplot(y~x,
       type="b",
       group=group,
       data=test,
       auto.key =list(
         points = FALSE, 
         columns=2,
         lines = TRUE)
)