【问题标题】:How do I plot multiple lines (by levels of factor) for year series?如何为年份系列绘制多条线(按因子水平)?
【发布时间】:2018-10-24 20:26:05
【问题描述】:

我对 R 还很陌生,但我在情节方面遇到了麻烦。

我正在尝试使用以下方法创建线图: X 轴上的 $YEAR Y 轴上的 $METRIC 每个国家都有一条不同颜色的线(意思是,同一地块上共有 3 条线)

$COUNTRY 是一个具有 3 个级别的因子

COUNTRY YEAR    METRIC
USA     2000    14.874
USA     2001    15.492
USA     2002    13.091
USA     2003    14.717
CAN     1999    15.031
CAN     2000    14.343
CAN     2001    12.972
CAN     2002    13.216
SWE     1999    14.771
SWE     2000    17.033
SWE     2001    15.932
SWE     2002    14.516
SWE     2003    15.655

当我用

创建情节时

绘图(df$YEAR, df$METRIC, col=df$COUNTRY, type="p")

我得到一个图,其中包含每个 (x,y) 组合的点以及因子 $COUNTRY 的每个级别的不同颜色

但是,当我尝试为每个国家/地区设置一条线时,

绘图(df$YEAR, df$METRIC, col=df$COUNTRY, type="l")

我得到了一条不间断的线路,从“美国”的 4 次观察开始,然后回到下一个国家(“加拿大”)的第一年。

谁能解释为什么会这样? 是否可以仅使用预建函数创建此图?

提前感谢您的帮助。

【问题讨论】:

  • base R plot 不像ggplot2 那样工作:说col=df$COUNTRY 并不意味着它将对线条进行分组,分离端点并直观地应用颜色。我认为您的直接选择(1)制作一个单一的基础图,然后将每个国家/地区的数据作为单独的电话添加到lines; (2) 使用segments 并在每个国家/地区之间放置NAs(通常是脆弱且工作量太大);或 (3) 切换到 ggplot2lattice,这样分组/分面更自然一些。
  • library(ggplot2); ggplot(df) + geom_line(aes(YEAR, METRIC, color=COUNTRY)) 之类的内容更有可能是您正在寻找的内容,并且一旦您开始将您的思维过程从 base-R 迁移到图形语法,就相对容易阅读。跨度>
  • 如果您继续使用 base-R,请意识到 lines(因此 plot(..., type=";"))只会使用第一种颜色,除非 type="h"(这不是您在此处尝试做的) .

标签: r plot


【解决方案1】:

除了我上面的 cmets,这是一个基本的 base 实现。如果最初您的 $COUNTRY 是一个因素 (is.factor(df$COUNTRY)),那么您可以跳过创建 ctryfctr 并将行调用更改为 lines(..., col=x$COUNTRY[1])

df$ctryfctr <- factor(df$COUNTRY)
plot(NA, xlim=range(df$YEAR), ylim=range(df$METRIC))
for (x in split(df, df$COUNTRY)) lines(x$YEAR, x$METRIC, col=x$ctryfctr[1])

【讨论】:

  • 非常感谢您的帮助!我真的很感激!
【解决方案2】:

由于您似乎混淆了一些概念,我认为稍微澄清一下会有所帮助。

R 的基本绘图包非常适合在没有先验知识的情况下快速绘制草图,但使用 ggplot2 包可以更轻松地定义更复杂的绘图。您可以使用install.packages("ggplot2") 安装它。使用 ggplot2 您可以像已经尝试过的那样对行进行分组,并且正如 r2evans 已经指出的那样。

library(ggplot2) ggplot(df) + geom_line(aes(YEAR, METRIC, group=COUNTRY, color=COUNTRY))

因此,您告诉 ggplot 您正在使用 df 作为数据。您在aes() 中定义geom_line 的x 轴和y 轴。使用group= 定义分组变量,使用color= 定义每行使用不同的颜色。

希望您在使用 R 和 ggplot2 时玩得愉快!

【讨论】:

  • 非常感谢您的帮助!我真的很感激!
猜你喜欢
  • 2019-10-19
  • 2020-02-25
  • 1970-01-01
  • 2019-01-22
  • 2017-03-29
  • 2023-04-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多