我正在尝试为我的数据框traff
制作每行的折线图.x轴将是从2006年到2012年的年份。
最终结果应该是每行的单独图表。在下面的示例中,第一个图表代表第三行,第二个图表代表第二行(见下表):
我知道如何找到每一行的最大值以获得最大y轴:
xaxis <- colnames (traff[,(3:10)])
但我正在努力为每一行制作一个循环并生成一个折线图。如您所见,每个端口(a,b和c)有三个类别(IntPass,Pass和Cruise)。
Port Category 2006 2007 2008 2009 2010 2011 2012
a IntPass 9046000 0 9579000 9683700 10404900 0 0
a Pass 270000 260000 360000 360000 342000 385000 368000
a Cruise 259 238 269 263 247 258 265
b IntPass 8249304 8222336 8692362 9015726 9107665 9177075 9050424
b Pass 0 272584 351267 437437 381141 407162 463770
b Cruise 260 255 265 293 261 263 274
c IntPass 6760000 6514294 7247366 7257646 7900000 8500000 8800000
c Pass 305026 294738 377522 416605 392000 443000 442000
c Cruise 289 268 298 305 279 293 294
答案 0 :(得分:4)
您不应使用for循环将线条绘制到图表中。如果您的类别变量是一个因素,ggplot包会为您执行此操作。看看下面的代码:
library(reshape2) #install.packages("reshape2")
library(ggplot2) #install.packages("ggplot2")
#Import data into a Data frame
data <- c("
Port Category 2006 2007 2008 2009 2010 2011 2012
a IntPass 9046000 0 9579000 9683700 10404900 0 0
a Pass 270000 260000 360000 360000 342000 385000 368000
a Cruise 259 238 269 263 247 258 265
b IntPass 8249304 8222336 8692362 9015726 9107665 9177075 9050424
b Pass 0 272584 351267 437437 381141 407162 463770
b Cruise 260 255 265 293 261 263 274
c IntPass 6760000 6514294 7247366 7257646 7900000 8500000 8800000
c Pass 305026 294738 377522 416605 392000 443000 442000
c Cruise 289 268 298 305 279 293 294
")
traff <- read.table(text = data, header=TRUE)
#Reshape the data for ggplot
traff2 <- melt(traff,id=c("Port","Category"),variable.name = "Year")
#Remove the X in the Year column and convert it to number
traff2$Year <- as.numeric(gsub(pattern="X",replacement = "",x = as.character(traff2$Year)))
#The data is ready for ggplot
head(traff2)
#ggplot it...
ggplot(traff2, aes(x = Year, y = value, color = Port))+
facet_grid(facets = Category~., scales = "free_y")+
geom_line()+theme_bw()
结果:
答案 1 :(得分:1)
对于循环的每次迭代,您是否希望它们都在同一个图形或单独的图形上?
假设在同一个图表上,你会做这样的事情。
绘图函数每次都会生成一个新图形,因此您必须使用lines()函数添加到现有图形中。
# Make the initial plot
plot( 2006:2012, traff[1,3:ncol(traff)], type="l", col=1)
# Here is the loop where the rest is added
for (i in 2:nrow(traff)) { lines(2006:2012, traff[i,3:ncol(traff)], type="l", col=i)
}
如果需要,可以使用一些if或while语句在循环中添加初始绘图。
答案 2 :(得分:0)
如果我理解正确,可以使用matplot
函数进行简单的解决方案:
matplot(t(traff[, -c(1,2)]), type="l")
如果您愿意,您只需将x
轴的标签更改为年份名称即可。