Групповые данные и построение нескольких строк
Я хотел бы построить несколько строк в R для этого набора данных: (x = год, y = значение)
School_ID Year Value
A 1998 5
B 1998 10
C 1999 15
A 2000 7
B 2005 15
В каждой школе имеются данные за разные годы. Я хотел бы иметь одну линию для каждой школы.
Ответы
Ответ 1
Позвольте создать некоторые данные:
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()
Ответ 2
Это то, что вы хотите? Вам нужно group = School_id
рассказать ggplot2 о построении отдельных строк для каждой школы. Если вы хотите, чтобы горизонтальная ось включала все годы между 1998 и 2005 годами, удалите factor
в x = 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()
Ответ 3
Функция plot в базе R не поддерживает группировку, поэтому вам нужно отображать группы по одному. GGPLOT отлично справляется с группировкой. Я также предлагаю посмотреть на Trellis XYPLOT, который позволяет создавать отдельные группы.
Вот как вы можете создать базовый групповой график с использованием Trellis:
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)
)