ggplot:为什么我必须将数据转换为长格式?

Eli*_*ias 5 r ggplot2 dataframe

使用 ggplot 绘图时,我经常需要将数据转换为长格式,例如下面的代码。我有两个问题:

  1. 有没有办法将列(因此每个变量)用作“组”?那么每列都被绘制并具有不同的颜色吗?因此,无需将数据转换为长格式。(无需将每个变量放入 a 中geom_line()
  2. 为什么必须将数据转换为长格式?其背后的原因是什么?当数据具有宽格式时,它比绘图更好吗?

示例代码:

library(tidyverse) 
# Data in wide format
  df_wide <- data.frame(
   Horizons = seq(1,10,1),
   Country1 = c(2.5, 2.3, 2.2, 2.2, 2.1, 2.0, 1.7, 1.8, 1.7, 1.6),
   Country2 = c(3.5, 3.3, 3.2, 3.2, 3.1, 3.0, 3.7, 3.8, 3.7, 3.6),
   Country3 = c(1.5, 1.3, 1.2, 1.2, 1.1, 1.0, 0.7, 0.8, 0.7, 0.6)
   )

# Convert to long format
  df_long <- df_wide %>%
   gather(key = "variable", value = "value", -Horizons)
    
# Plot the lines
  plotstov <- ggplot(df_long, aes(x = Horizons, y = value)) + 
   geom_line(aes(colour = variable, group = variable))+
   theme_bw() 
Run Code Online (Sandbox Code Playgroud)

输出: 输出 预先非常感谢!

Ben*_*ker 5

很难确定这是不可能的 \xe2\x80\x94 例如,有人可以编写一个包装器包来ggplot自动为你执行此操作 \xe2\x80\x94 但没有明显的证据像这样的解决方案。

\n

《tidyverse》的作者 Hadley Wickham在tidy dataggplot的概念上构建了整个“tidyverse”生态系统,tidy data 本质上是长格式的数据。使用长格式数据的基本原因是相同的数据可以由多种宽格式表示,但长格式通常是唯一的。例如,假设您有代表按年份、国家/地区和工业部门划分的收入的数据。在宽格式中,列是否代表年份、国家/地区、部门或某种组合?在 tidyverse/ggplot 世界中,您可以简单地指定要用作分组变量的变量。使用面向宽格式的工具(例如基本 R\'s ),您首先要重塑数据,使列代表分组变量(例如年份),然后绘制它。matplot

\n

Wickham 和同事构建了类似的工具gather(或pivot_longer在 tidyverse 的新版本中),以便轻松转换为长格式,并构建了各种其他工具来处理长(“整洁”)数据。

\n

您可以编写包装器来ggplot进行转换......

\n