我有一个如下所示的数据文件:
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个这样的对使用这种方法绘制它们需要大量输入并且代码看起来很难看。
答案 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()