2017-05-10 11 views
0

私はこのようになり、データファイルがあります。X1_axisは軸番号1とY1_axisの座標を表現するデータのナンバーワンですさggplotを使って自動的に複数のデータセットをプロットする方法は?

X1_axisY1_axisX2_axisY2_axis

valuesvaluesvaluesvalues

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組持っているなら、この方法を使ってプロットすると多くのタイピングが必要となり、コードが醜いように見えます。

+3

xとyを同じ列に入れ、グループを持つ別の列を追加することができます。次に、 'geom_line(aes(x、y、group = group))'を使用してください。 – troh

+0

@troh 'melt'関数を使ってみましたが成功しませんでした。 – MOON

答えて

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() 
関連する問題