2

ggplot2 では、何らかの理由で取得できない単純なことを試みています。データ フレームで平均値と SE を調整し、平均値とエラー バーをプロットしてから、平均値をポイントに接続したいと考えています。これがコードとエラーです(手段を接続することを除いてすべてを行います(RCookbookgeom_lineで作業します:

library(ggplot2)
#data set
data1 <- structure(list(group = structure(1:3, .Label = c("1", "2", "3"
), class = "factor"), estimate = c(55.7466654122763, 65.0480954172939, 
61.9552391704298), SE = c(2.33944612149257, 2.33243565412438, 
2.33754952927041), t.ratio = c(23.8290016171476, 27.8884844271143, 
26.5043535525714)), .Names = c("group", "estimate", "SE", "t.ratio"
), row.names = c(NA, 3L), class = "data.frame")

#the attempted plot
pd <- position_dodge(.1)
ggplot(data1, aes(x=group, y=estimate, group=group)) + 
    geom_errorbar(aes(ymin=estimate-SE, ymax=estimate+SE), 
        colour="black", width=.1, position=pd) +
    geom_line(data=data1, aes(x=group, y=estimate)) + 
    geom_point(position=pd, size=4)

エラー:

ymax not defined: adjusting position using y instead
geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?
4

3 に答える 3

5

groupggplot 呼び出し内で グループ化を削除し、x = as.numeric(group )への呼び出し内で設定するgeom_lineと、機能します。

data1また、内で再参照する必要はありませんgeom_line

ggplot(data1, aes(x=group, y=estimate)) + 
  geom_errorbar(aes(ymin=estimate-SE, ymax=estimate+SE), 
  colour="black", width=.1, position=pd) +
  geom_line( aes(x=as.numeric(group), y=estimate)) + 
  geom_point(position=pd, size=4)

ここに画像の説明を入力

の場合group、行を作成するためのgroup値が 1 つしかないgeom_lineため、エラー メッセージが表示されます。またはマッピング変数を因子ggplotと見なすと、同じエラーが発生します。これは、変数を因子としてコーディングすると、R (および ggplot) がそれらを独立したグループと見なし、ポイントを接続しないためです。これは賢明なデフォルトの動作です。xy

編集 - アルファベットの因子ラベル付き

これは、因子が内部的にコード化される方法により、アルファベットRの因子ラベルで機能します (つまり、as.numeric(factor) は因子ラベルではなく数値を返します)。

すなわち

グループをab、 に変更c

levels(data1[['group']]) <- letters[1:3] 
ggplot(data1, aes(x=group, y=estimate)) + 
  geom_errorbar(aes(ymin=estimate-SE, ymax=estimate+SE), 
  colour="black", width=.1, position=pd) +
  geom_line( aes(x=as.numeric(group), y=estimate)) + 
  geom_point(position=pd, size=4)

ここに画像の説明を入力

于 2012-09-20T01:01:24.910 に答える
2

mnelの答えの代わりに、新しい変数を作成して、3つのグループすべてが同じ値を持つ列を持つことができます:

 data1$all <- "All"

そして、それをgroupラインの美学として使用します。

ggplot(data1, aes(x=group, y=estimate)) + 
    geom_errorbar(aes(ymin=estimate-SE, ymax=estimate+SE), 
        colour="black", width=.1, position=pd) +
    geom_line(aes(x=group, y=estimate, group=all)) + 
    geom_point(position=pd, size=4)

Mnelの答えはおそらくよりエレガントですが、グループが数値ではなく、数値に簡単に変換できない場合は、これがうまくいく可能性があります。

于 2012-09-20T01:05:27.160 に答える
1

このSO の質問に対する 2 番目の回答も参照してください。より完全な実装に取り​​組んでいる場合は、時間を節約できます。

于 2012-09-20T01:26:29.830 に答える