24

このデータセットのRに複数の線をプロットしたい:(x =年、y =値)

School_ID   Year    Value
A           1998    5
B           1998    10
C           1999    15
A           2000    7
B           2005    15

各学校には、異なる年のデータがあります。学校ごとに1行にしたいのですが。

4

3 に答える 3

31

いくつかのデータを作成しましょう:

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

次に、ベースグラフィックでプロットを作成するために、1つのグループの初期プロットを作成します。

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()
于 2012-04-27T10:49:39.717 に答える
16

これは、あなたの望むことですか?group = School_idggplot2に、学校ごとに別々の線をプロットするように指示する必要があります。横軸に1998年から2005年までのすべての年を含める場合はfactorx = factor(year)

  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()
于 2012-04-27T10:54:18.510 に答える
4

ベースRのプロット関数はグループ化をサポートしていないため、グループを1つずつ表示する必要があります。GGPLOTはグループ化をうまく処理します。また、別々のグループをプロットできるTrellisXYPLOTを確認することをお勧めします。

これは、トレリスを使用して基本的なグループ化された折れ線グラフを作成する方法です。

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)
)
于 2012-05-02T13:29:11.190 に答える