1

特定のグループによる点の束の上に線をプロットしようとしています。たとえば、私は次のようにしています。

x = rep(c('fruit', 'vegetable'), 15)
z = c(rep(c(rep('fresh', 2), rep('ripe', 2), rep('rotten', 2)), 5)
s = c(rep('pick1', 6), rep('pick2', 6), rep('pick3', 6), rep('pick4', 6), rep('pick5', 6))

y = runif(30, min=11, max=15)
low = rep(c(0, 1), 15)
y[low == 1] = y[low == 1] - 10
y[low == 0] = y[low == 0] - 5

groceries_df = data.frame(type=x, value=y, age=z, species=s)

タイプが「果物」または「野菜」のいずれかであり、年齢が「新鮮」、「熟した」、または「腐った」のいずれかであり、種が店舗からのさまざまなピックの一意のリストであるため、2 * 3=6の値があります種ごとに。これらの値は、年齢によって定義された個別のx軸にグループ化されており、タイプごとにグループ化されています(したがって、タイプごとに回避されています)。

dodge = position_dodge(width=0.9)
p = ggplot(groceries_df, aes(factor(age), value, color=factor(type), shape=factor(type))) +
           geom_jitter(position=dodge) +
           geom_line(data=groceries_df[groceries_df$type == 'fruit',],     aes(group=factor(species)), position=dodge) +
           geom_line(data=groceries_df[groceries_df$type == 'vegetable',], aes(group=factor(species)), position=dodge)

このコードは、私が望むものに非常に近いプロットを生成しますが、geom_lineがタイプではなく、種によって回避されることに気づきました。実際の線を種ごとにグループ化する必要があるにもかかわらず、回避をリダイレクトする必要があるようです(したがって、すべての年齢で、ある種の値が1つのタイプから次のタイプに遷移するのを確認できます)。回避をリダイレクトする方法はありますか?

4

1 に答える 1

3

type1つの解決策は、と列の組み合わせを含む既存のデータフレームに新しい列を追加することですspecies(これらの2つの列は、実際には行のポイントをグループ化するために必要です)(この@joran回答からのアイデア)。

groceries_df$comb<-paste(groceries_df$type,groceries_df$species)

次に、この新しい列をとして使用しますgroup=。このようにして、必要なコマンドラインも少なくなります。

ggplot(groceries_df,aes(age,value,color=type,shape=type,group=comb))+
  geom_jitter(position=dodge)+geom_line(position=dodge)

ここに画像の説明を入力してください

于 2013-03-06T18:10:52.117 に答える