繁体   English   中英

循环中的多线图

[英]Multiple line plot in a loop

我有不同国家/地区,不同年份的数据,以及每个国家/地区年份的多个变量的不同值。 我正在尝试绘制每个国家的多个线图(线是这些变量/年)。

由于某些未知的原因,当运行以下命令时,我得到的图是空的:

par(mfrow=c(5,5))
mysplits<-split(A,A$country)
for (ii in 1:length(mysplits)) {
  adf<-mysplits[[ii]]
  snames<- names(mysplits)[ii]
  p<-plot(1, 
       main=paste(snames),
       type = "n", xlim=c(1993,2015),
       ylab = "value", xlab="years", ylim=c(-50,50))
  lines(adf$year, adf$tone, col = "steelblue", lty=5)
  lines(adf$year, adf$articles, col = "pink", lty=2) 
  lines(adf$year, adf$num, col = "red", lty=3) 
  lines(adf$year, adf$gold, col = "green", lty=6)
  legend("bottomright", legend = c("EPE Public","Tone","Coverage","No of Events",
  "Conflictual"), col = c("black","steelblue","pink","red","green"),
     lty = c(1,5,2,3,6),
     cex = 1.5, seg.len=4)
     }

这是dput(head(A))的输出:

structure(list(X = 1:6, country = structure(c(1L, 1L, 1L, 1L, 
1L, 1L), .Label = c("AU", "BE", "BU", "DA", "EN", "EZ", "FI", 
"FR", "GM", "HR", "HU", "IT", "LG", "LH", "LO", "LU", "MT", "NL", 
"PL", "RO", "SI", "SP", "SW"), class = "factor"), year = 1994:1999, 
gold = c(-0.571428571, -2.4, 1.26, -0.2, -0.966666667, 0.316666667
), tone = c(324L, 239L, 251L, 72L, 61L, 159L), articles = c(3.571428571, 
4.5, 8.2, 4.6, 9.333333333, 6.166666667), num = c(7L, 4L, 
5L, 5L, 6L, 6L), yepe = 1995:2000, couepe = structure(c(1L, 
1L, 1L, 1L, 1L, 1L), .Label = c("AU", "BE", "BU", "DA", "EN", 
"EZ", "FI", "FR", "GM", "HR", "HU", "IT", "LG", "LH", "LO", 
"LU", "MT", "NL", "PL", "RO", "SI", "SP", "SW"), class = "factor"), 
epepub = c(2.01, 1.87, 0.55, 0.63, 0.52, 0.82), epepriv = c(NA, 
NA, 2.63, 2.71, 2.59, 2.12), epeind = c(0.65, 0.66, 0.72, 
0.63, 0.57, 0.53)), .Names = c("X", "country", "year", "gold", 
"tone", "articles", "num", "yepe", "couepe", "epepub", "epepriv", 
"epeind"), row.names = c(NA, 6L), class = "data.frame")

这是我的数据的图像:

标头数据

我高度,高度,强烈建议在尝试在R中进行复杂绘图时不要使用基础绘图软件包。Laterow指出,您的问题是使用par(mfrow=c(5,5))调用。 而不是尝试调试那里出了什么问题。 请考虑使用ggplot,它是用于进行r绘图的更健壮,易读和灵活的库。 用Hadley Wickham的话来说,〜“基础R绘图用于创建图形,ggplot用于理解数据”

例如,我相信您尝试生成的图形可以通过以下方式实现。 注意,没有for循环。 通常,在R中,如果您使用for循环,则表示做错了什么。 还要注意,它大约占了代码行的一半,并且比您最初编写的内容可读性强。

library(ggplot2)
ggplot(A, aes(x=year)) + 
  geom_line(aes(y=tone, colour="Tone")) + 
  geom_line(aes(y=articles, colour="Coverage")) + 
  geom_line(aes(y=num, colour="No of Events")) +
  geom_line(aes(y=gold, colour="Conflictual")) + 
  facet_wrap(~country) + 
  scale_colour_manual("Legend", 
                      breaks = c("Tone", "Coverage", "No of Events", "Conflictual"),
                      values = c("steelblue", "pink", "red", "green")) +
  xlab("value") + 
  ylab("years")

产生:

图形

请注意,您的样本数据仅具有“ AU”国家/地区的值。 但是,无论该领域中有多少国家/地区,这都将自动包裹您的各个方面。 which appears to be what you were doing in the original attempt. 这比必须静态地说 (似乎是您在最初尝试中所做的事情)要强大得多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM