我可以从双向表中绘制同一图表上的多行

时间:2015-10-07 22:15:05

标签: r plot lines

我有下表,它按月(列)给出每年(行)的地震次数。

> tmp=table(quakes$year,quakes$mon)
> tmp

          0    1    2    3    4    5    6    7    8    9   10   11
  1973  388  453  451  508  375  533  496  392  349  424  400  406
  1974  386  384  385  388  456  414  491  501  385  432  354  420
  1975  435  374  397  439  449  629  461  434  386  404  440  470
  1976  677  478  474  430  612  514  561  533  600  485  463  481
  1977  453  355  508  519  460  477  416  541  449  523  585  489
  1978  499  449  730  533  550  578  524  480  535  458  526  566
  1979  485  444  771  662  705  661  590  597  514  635  549  549
  1980  530  530  668  654  969  779  668  472  452  614  549  463
  1981  501  506  545  547  538  524  662  587  690  561  518  650
  1982  655  527  632  602  630  658  603  639  640  761  628  772
  1983  909  683  775  847 1028  743  823  902  727  770  793  842
  1984  798  732  872  943  795  721  782  820  994  947 1056 1033
  1985 1016  839 1140 1078 1146  989 1066 1136 1095 1115 1162 1333
  1986 1050  867 1217  944 1368 1046 1256 1035  912 1086 1066  871
  1987  834  860 1003  884  891  871  959  943  952 1022 1035 1036
  1988  990  957 1127 1123 1121  975 1095 1160  929 1079 1092 1063
  1989 1133 1106 1144 1297 1235 1060 1175 1312 1200 1458 1137 1305
  1990 1247 1176 1404 1489 1431 1321 1713 1496 1160 1277 1307 1569
  1991 1476 1226 1369 1388 1387 1380 1327 1378 1253 1530 1301 1469
  1992 1362 1292 1622 1715 1915 1649 1941 1722 1518 1501 1653 1634
  1993 1435 1428 1821 1691 1970 1767 2502 1957 1903 1852 1628 1522
  1994 2095 1409 1466 1520 1760 1702 1473 1494 1625 1889 1673 1265
  1995 1656 1590 1444 1798 1931 1691 1445 1574 1640 2005 1917 2316
  1996 2297 2310 1513 1290 1335 1675 1545 1450 1615 1604 1690 1614
  1997 1441 1570 1890 1919 1618 1269 1582 1463 1463 1645 1892 2120
  1998 1905 1592 1773 2021 2068 1786 1971 1776 1724 1749 1761 1562
  1999 1752 1740 2093 1713 2145 1891 1679 1628 1487 1799 1584 1321
  2000 1451 1340 1587 1702 1710 1941 2221 2125 1724 1863 2735 1857
  2001 1945 2007 1856 2091 1724 2091 2039 1915 1817 2124 1917 2008
  2002 2101 1996 2291 2202 1981 2126 2001 2091 2733 2411 3316 2205
  2003 2053 2139 2604 2475 2526 2950 2655 2841 3030 2794 2709 2643
  2004 2680 2861 2866 2692 3157 2767 2090 2274 2313 2168 2449 2883
  2005 3253 2096 2842 3028 2562 2492 2340 2215 2347 2887 2176 2245
  2006 2086 2007 2509 2739 2738 2445 2548 2405 2157 2399 3128 2407
  2007 2822 1954 2361 3206 2351 2257 2566 2779 2682 2324 2072 2311
  2008 2333 2666 2732 2595 3303 3024 2743 2795 2096 2726 2337 2427
  2009 1512 1266 1223 1171 1124 1158 1162 1355 1112 1623 1085 1034
  2010 1371 1630 2032 2120 1402 1419 2747 1885 1548 1550 1651 2186

然后按照两个命令给我两个不同的图,第一个是1973年的时间序列,第二个是2010年的时间序列:

> dim(tmp)
[1] 38 12
> plot(tmp[1,], type="l")
> plot(tmp[38,], type="l")

我想在同一个情节中组合并显示这两个时间序列。有没有办法在同一个图上绘制上表中的行,同时按年份(行标签)识别每个时间序列?

2 个答案:

答案 0 :(得分:1)

作为一般规则,我尽量不使用表格绘图,即使一个人以这种方式阅读数据也是有意义的。

library(ggplot2)
ggplot(data.frame(tmp)) + 
  geom_line(aes(x = Var2, y = Freq, group = Var1, col = Var1))

ggplot2库对于这种群体绘图练习非常有用,尽管可能需要一些输入才能适应。

调用Var1Var2(我将table强制转换为data.frame时创建的)可能是个坏主意。您可以通过首先聚合quakes数据框,然后在其上调用绘图来避免这种情况。

答案 1 :(得分:1)

matplot对这类事情有好处:

反转表格的行和列:

tmp <- table(quakes$mon,quakes$year)

#   1973 1974 1975 1976 1977 1978
#0   388  386  435  677  453  499
#1   453  384  374  478  355  449
#2   451  385  397  474  508  730
#3   508  388  439  430  519  533
#etc

然后使用matplot:

vars <- c(1,6)
matplot(tmp[,vars], type="l", lty=1)
legend("topright", colnames(tmp)[vars], lty=1, col=seq_along(vars))

enter image description here