如何自动使用ggplot绘制多个数据集?

时间:2017-05-10 15:27:23

标签: r plot ggplot2

我有一个如下所示的数据文件:

X1_axis Y1_axis X2_axis Y2_axis

values values values values

X1_axis是第一轴的坐标,Y1_axis是在y_axis上表示的数据编号,依此类推。

一个解决方案是:

require(ggplot2)
p + geom_line(aes(x = X1_axis, y = Y1_axis, col = "plot 1")) + 
geom_line(aes(x = X2_axis, y = Y2_axis, col = "plot 2"))

有更短更好的方法吗?如果我有20个这样的对使用这种方法绘制它们需要大量输入并且代码看起来很难看。

1 个答案:

答案 0 :(得分:0)

这应该使用dplyr来创建一些新变量(mutate),tidyr来转置数据(收集和传播)和stringr来获取轴名称之外的数字(str_extract)。

library(dplyr)
library(tidyr)
library(stringr)
library(ggplot2)

df <- data.frame(x1_axis = runif(5),
             y1_axis = runif(5),
             x2_axis = runif(5),
             y2_axis = runif(5)
)

df_transpose <- df %>%
  mutate(observation_number = row_number()) %>%  #Add an observation number column
  gather(axis, value, -observation_number) %>%  #flatten the data
  mutate(group_var = str_extract(axis, "[0-9]+")) %>%  #grab numeric part of the axis name to use as a grouping variable
  mutate(axis = gsub('[0-9]+', '', axis)) %>%  #remove numbers from the axis names
  spread(axis, value) %>% #pivot the axis names back to columns again
  arrange(group_var, observation_number)  #tidy up

ggplot(data = df_transpose, aes(x = x_axis, y = y_axis, group = group_var)) +
       geom_line()