1

最近、R で複製したいグラフを見ました。このグラフは、複数のレコードのスコアまたはその他の測定値を、たとえば 4 色のいずれかに分類された色付きのボックスとして示しています。私のイメージでは、赤、薄赤、薄緑、緑です。したがって、各レコードは、スコアごとに 1 つのボックスを取得します。これは、各レコードが、複数の時点にわたって特定の時点で 1 つのスコアを持っているという考え方です。私の例では、時間の経過に伴う学生のテストの点数を使用します。たとえば、4 人の学生がいて、年間を通して 8 つのテストがあるとすると (時系列で)、学生ごとに 8 つのボックスがあり、結果として 32 ボックスになります。各行 (生徒) には 8 つのボックスがあります。

チャートのハッキングの試み

サンプルデータの作成方法は次のとおりです。

totallynotrealdata <- data.frame(Student = c(rep("A",8),rep("B",8),rep("C",8),rep("D",8)),Test = rep(1:8,4), Score = sample(1:99,32,replace = TRUE), BinnedScore = cut(totallynotrealdata$TB,breaks = c(0,25,50,75,100),labels = c(1,2,3,4)))

私が疑問に思っているのは、ggplot でこのグラフをどのように再作成できるかということです。私が見るべきgeomはありますか?

4

1 に答える 1

1

で遊ぶことができgeom_rect()ます。これは非常に基本的なものですが、目的に合わせて簡単に最適化できると思います。

df <- data.frame(Student = c(rep(1,8),rep(2,8),rep(3,8),rep(4,8)),
                 Test = rep(1:8,4),
                 Score = sample(1:99,32,replace = TRUE)) 

df$BinnedScore <- cut(df$Score,breaks = c(0,25,50,75,100),labels = c(1,2,3,4))
df$Student     <- factor(df$Student, labels = LETTERS[1:length(unique(df$Student))])

library(ggplot2)

colors   <- c("#f23d2e", "#e39e9c", "#bbd3a8", "#68f200")    
numStuds <- length(levels(df$Student))
numTests <- max(df$Test)

ggplot() + geom_rect(data = df, aes(xmin = Test-1, xmax = Test, ymin = as.numeric(Student)-1, ymax = as.numeric(Student)), fill = colors[df$BinnedScore], col = grey(0.5)) +
  xlab("Test") + ylab("Student") +
  scale_y_continuous(breaks = seq(0.5, numStuds, 1), labels = levels(df$Student)) +
  scale_x_continuous(breaks = seq(0.5, numTests, 1), labels = 1:numTests)

ここに画像の説明を入力

于 2016-07-26T21:24:47.690 に答える