geom_point
でggplot
をプロットしています。 x軸は個人のIDで、y軸は変数Aです。ラベルを重複させずにx軸にすべてのID値を個別にggplotするにはどうすればよいですか? IDは連続していない場合があります。
dfサンプル(実際の行はもっと長いです)
> df
ID A
1 4
2 12
3 45
5 1
プロットのコード:
ggplot(df, aes(x = ID, y = A)) + geom_point()
上記のコードには、間隔にx軸がありますが、個々のIDは表示されません。
ありがとう!
これはあなたが探しているものですか?
_ID <- 1:50
A <- runif(50,1,100)
df <- data.frame(ID,A)
ggplot(df, aes(x = ID, y = A)) +
geom_point() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
scale_x_continuous("ID", labels = as.character(ID), breaks = ID)
_
これにより、この画像が生成されます。
したがって、すべてのID値のラベルを取得します。グリッド線を削除したい場合(私の好みには多すぎます)、theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())
を追加して削除できます
EDIT:より簡単な方法は、プロットの要素としてIDを使用することです。このような:
_ggplot(df, aes(x = factor(ID), y = A)) +
geom_point() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
xlab("ID")
_
この方法の利点は、IDの欠落から空のスペースが得られないことです。
EDIT2:ラベルの重複に関する問題:プロットされる多数のIDに起因すると推測します。これに対処する方法はいくつかあります。プロットが次のようになっているとしましょう。
1つのアイデアは、軸のbreak引数を変更することにより、x軸から3番目のラベルをすべて非表示にすることです。
_ggplot(df, aes(x = factor(ID), y = A)) +
geom_point() +
scale_x_discrete(breaks = ID[c(T,F,F)]) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
xlab("ID")
_
これはこれにつながります:
ラベルを非表示にするオプションがない場合は、プロットをサブプロットに分割できます。
_df$group <- as.numeric(cut(df$ID, 4))
ggplot(df, aes(x = factor(ID), y = A)) +
geom_point() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
xlab("ID") +
facet_wrap(~group, ncol = 1, scales = "free_x")
_
これはこれにつながります: