4

ほとんどのデータ ポイントが正常に描画されるプロットを実行しようとしていますが、1 つのデータ ポイントのセットには異なるサイズのシンボルがあります。凡例に同じものを表示したい: ほとんどのポイントは正常に表示されますが、例外は異なるサイズのシンボルで描画されます。以下に短いコードを示します。

library(ggplot2)
x = c(1,2,1,2,3)
y = c(1,2,3,4,3)
vendor = c("x", "x", "y", "y", "z")
df = data.frame(x,y,vendor)

p <- ggplot(df) +
     aes_string(x="x", y="y", color="vendor") +
     geom_point(size=3, data=subset(df, vendor!="z")) +
     geom_point(size=5, data=subset(df, vendor=="z"))
ggsave("foo.pdf")

問題は、結果の凡例では、ベンダー z の点だけでなく、すべての点がより大きな ( ) 記号で描画されることです。size=5ベンダー z を凡例の大きな点で描画し、他の点を で描画しsize=3ます。

(おまけの質問: 私が本当に欲しいのは、より大きな太いアウトライン記号です: 円の代わりに、ドーナツが欲しいです。これshape=2でアウトライン円が描画されることはわかっていますが、非常に薄いです。より太いアウトライン円が必要です.三角形で同じことをしたい.これを行う簡単な方法はありますか?)

間違って適用したのかもしれませんが、次のアドバイスに従ってください。

ggplot2: 凡例のシンボルを変更する

「ガイド」行を追加しても役に立ちませんでした:

guides(size = guide_legend(override.aes = list(shape = 1)))

つまり、同じ出力size=5で、凡例に 3 つのベンダーすべての記号が表示されます。

EDITED:私がすぐに実装した素晴らしい答え。今、私は行を追加しました:

library(ggplot2)
x = c(1,2,1,2,3)
y = c(1,2,3,4,3)
vendor = c("x", "x", "y", "y", "z")
df = data.frame(x,y,vendor)

df$vendor_z <- df$vendor=="z"     # create a new column 

ggplot(df) +
  aes_string(x = "x", y = "y", color = "vendor", size = "vendor_z") +
  geom_point() +
  geom_line(size=1.5) +   # this is the only difference
  scale_size_manual(values = c(3, 5), guide = FALSE) 
  guides(colour = guide_legend(override.aes = list(size = c(3, 3, 5))))

ggsave("foo.pdf")

凡例のサイズは、ベンダー z のものを含むすべてのドットで再び 3 に戻りました。これを修正する方法についてのアイデアはありますか?

4

1 に答える 1