Eli*_*ias 5 r ggplot2 dataframe
使用 ggplot 绘图时,我经常需要将数据转换为长格式,例如下面的代码。我有两个问题:
geom_line()
)示例代码:
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)
很难确定这是不可能的 \xe2\x80\x94 例如,有人可以编写一个包装器包来ggplot
自动为你执行此操作 \xe2\x80\x94 但没有明显的证据像这样的解决方案。
《tidyverse》的作者 Hadley Wickham在tidy dataggplot
的概念上构建了整个“tidyverse”生态系统,tidy data 本质上是长格式的数据。使用长格式数据的基本原因是相同的数据可以由多种宽格式表示,但长格式通常是唯一的。例如,假设您有代表按年份、国家/地区和工业部门划分的收入的数据。在宽格式中,列是否代表年份、国家/地区、部门或某种组合?在 tidyverse/ggplot 世界中,您可以简单地指定要用作分组变量的变量。使用面向宽格式的工具(例如基本 R\'s ),您首先要重塑数据,使列代表分组变量(例如年份),然后绘制它。matplot
Wickham 和同事构建了类似的工具gather
(或pivot_longer
在 tidyverse 的新版本中),以便轻松转换为长格式,并构建了各种其他工具来处理长(“整洁”)数据。
您可以编写包装器来ggplot
进行转换......