1

ggplot のチュートリアルにあるものと同様の単純な折れ線グラフを作成したい:

p1 <- ggplot(ChickWeight, aes(x=Time, y=weight, colour=Diet, group=Chick)) +
    geom_line() +
    ggtitle("Growth curve for individual chicks")

cookbook-r.comより

ただし、指定された例では、データが効率的に整理されています (1 つの列には x 変数があり、別の列には y 変数があります)。

あまりきちんとしていないデータがある場合 (私のデータでは、各行はデータの変化する観察を表します)、ggplot を使用できますか? ggplot を使用するには、初期ファイルのデータを再配置する必要がありますか?

たとえば、私のデータが次の場合:

Names       1991  1992  1993
Johny         40    50    80
Dana          78    70    90

ジョニーの進捗状況の折れ線グラフを作成するにはどうすればよいですか? ダナの?

4

3 に答える 3

4

プロットする前に、データを長い形式に再形成する必要があります。dplyrと の使用tidyr:

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

df_clean <- df %>% 
    gather(year, value, num_range('X', 1991:1993)) %>% 
    mutate(year = extract_numeric(year))

df_clean
#   Names year value
# 1 Johny 1991    40
# 2  Dana 1991    78
# 3 Johny 1992    50
# 4  Dana 1992    70
# 5 Johny 1993    80
# 6  Dana 1993    90

ggplot(df_clean, aes(x = year, y = value, colour = Names)) + geom_line()

2行のggplot

おそらくまだ少しクリーニングを行いたいと思うでしょう (x 軸は少しばかげているように見えます) が、それは単なる研磨にすぎません。


データ:

df <- structure(list(Names = structure(c(2L, 1L), .Label = c("Dana", 
        "Johny"), class = "factor"), X1991 = c(40L, 78L), X1992 = c(50L, 
        70L), X1993 = c(80L, 90L)), .Names = c("Names", "X1991", "X1992", 
        "X1993"), class = "data.frame", row.names = c(NA, -2L))
于 2016-05-17T18:42:47.977 に答える
1

次のように reshape 関数を使用することもできます

df <- data.frame(c("Johny", "Dana"), c(40, 78), c(50, 70), c(80, 90))
names(df) <- c("Names", 1991, 1992, 1993)
df
  Names 1991 1992 1993
1 Johny   40   50   80
2  Dana   78   70   90
new.df <- reshape(data = df, direction = "long", idvar = "Names", varying = list(2:4), v.names = "Value", times = 1991:1993)

p1 <- ggplot(new.df, aes(x = time , y= Value, colour = Names)) + 
           geom_line() +
           scale_x_continuous(breaks = 1991:1993)
p1

ここに画像の説明を入力

于 2016-05-17T19:32:47.990 に答える
0

ここにはすでにいくつかの解決策があり、reshape オプションは目標を非常にきれいに達成します。特別な R パッケージを使用せずにデータを再フォーマットする方法をもう 1 つ追加します。これはstack関数に依存しています。

# Load ggplot2
library(ggplot2)

# Create example data
df <- data.frame(c("Johny", "Dana"), c(40, 78), c(50, 70), c(80, 90))
names(df) <- c("names", 1991, 1992, 1993)

# Create long data
df.long <- data.frame(names=rep(df$names, 3), stack(df[,2:4]))
df.long$ind <- as.numeric(df.long$ind)

# Plot
ggplot(df.long) + geom_line(aes(ind, values, colour=names))

于 2016-05-17T23:13:35.030 に答える