16

「適切な」変数マッピングは必要ないが、チャートの理解に役立つ凡例キーが必要だとしましょう。私の実際のデータは次の df に似ています

df <- data.frame(id = 1:10, line = rnorm(10), points = rnorm(10))

library(ggplot2)

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, colour = "points"))

ここに画像の説明を入力

基本的に、凡例のキーを相対的にしたいと思いpointsます..真ん中に線がなく、ただの点です。私はこれでそれに近づきました:

library(reshape2)

df <- melt(df, id.vars="id")

ggplot() +
  geom_point(aes(id, value, shape = variable), df[df$variable=="points",]) +
  geom_line(aes(id, value, colour = variable), df[df$variable=="line",])

しかし、それは 2 つの別々の凡例を定義します。2番目のコードを修正する(そしてデータを再形成する必要がある)ことも問題ありませんが、凡例のキーを手動で変更する(そして最初のアプローチを使い続ける)方法があればいいと思います。ありがとう!

編集 :

@alexwhanに感謝します。変数マッピングに関する私の記憶をリフレッシュしてください。ただし、これまでのところ最も簡単な方法は次のとおりです(非常に悪いハックです!):

df <- data.frame(id = 1:10, line = rnorm(10), points = rnorm(10))

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, shape = "points")) +
  theme(legend.title=element_blank())

これは、2 つの異なる伝説のタイトルを隠しているだけです。

ここに画像の説明を入力

他のアイデアは大歓迎です!!!

4

2 に答える 2

31

override.aes=内部関数を使用してguides()、凡例のデフォルトの外観を変更できます。この場合、ガイドは線の形状を削除してから、ポイントから線を削除するようにcolor=設定する必要があります。shape=c(NA,16)linetype=c(1,0)

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, colour = "points"))+
  guides(color=guide_legend(override.aes=list(shape=c(NA,16),linetype=c(1,0))))

ここに画像の説明を入力

于 2013-05-13T19:29:01.943 に答える
6

これを簡単に行う方法はわかりませんが、次のようなハック バージョンを実行できます (融解したデータフレームを使用):

p <- ggplot(df.m, aes(id, value)) +
  geom_line(aes(colour = variable, linetype = variable)) + scale_linetype_manual(values = c(1,0)) +
  geom_point(aes(colour = variable, alpha = variable)) + scale_alpha_manual(values = c(0,1))

ここに画像の説明を入力

重要なのは、凡例に正しく表示されるようにマッピングを正しく行う必要があるということです。この場合、「正しい」とは、思い通りに見えるようにだますことを意味します。linetype空白 (0) に設定してからalpha、ポイントのスケールを使用できるため、これだけが機能することを指摘する価値があるでしょう。alpha1 つのスケールしか必要としないため、両方に使用することはできません。

于 2013-05-01T02:12:14.303 に答える