問題の部分的な解決方法はhereです。そのソリューションがどのように機能し、どの機能がまだ私のニーズを満たしていないかを示します。一貫性のために、私は他のスレッドからの1つに類似しているサンプルデータセットの使用:複数のgeomの色、形、線種を手動で拡大するggplot2
library(ggplot2)
library(reshape2)
library(tidyverse)
df <- data.frame(x = c(1:5), a = c(1,2,3,3,3), b = c(1,1.1,1.3,1.5,1.5))
df <- mutate(df, log2 = log2(x))
df <- df <- melt(df, c("x", "log2"))
を(次のコードによって作成された)データの最初のプロットは、個別の凡例にshape
とcolor
美学を有し、これは望ましくない。
ggplot(df) +
geom_point(aes(x, value, colour = variable, shape = variable), size = 3) +
geom_line(aes(x, log2, color = "log2(x)"), size = 1.5)
溶液は確かに元のプロットを超える改善である単一の凡例にこれらを組み合わせることguides()
とoverride.aes
を使用して提案している。
ggplot(df) +
geom_point(aes(x, value, colour = variable, shape = variable), size = 3) +
geom_line(aes(x, log2, color = "log2(x)"), size = 1.5) +
guides(shape = FALSE,
colour = guide_legend(override.aes = list(shape = c(16, 17, NA),
linetype = c("blank", "blank", "solid"))))
私の問題は、geom_point
とgeom_line
の両方で、color
審美的な手作業のコントロールを希望します。たとえば、三角形を明るい灰色、円を濃い灰色、そしてlog2(x)
を明るい青色にしたいとします。しかし、
ggplot(df) +
geom_point(aes(x, value, shape = variable), color = "gray40", size = 3, data = filter(df, variable == "a")) +
geom_point(aes(x, value, shape = variable), color = "gray70", size = 3, data = filter(df, variable == "b")) +
geom_line(aes(x, log2, shape = "log2(x)"), color = "cadetblue2", size = 1.5) +
guides(shape = guide_legend(override.aes = list(color = c("gray40", "gray70", "cadetblue2"),
shape = c(16, 17, NA),
linetype = c("blank", "blank", "solid"))))
これはgeom_line
でshape
美的の不適切な使用のように思える(生成される警告与えられた):どのようにguides()
作品の私の理解では、私が行うことができた最高のため、以下である、非常に限られていますほぼの結果が欲しいです。問題は今、log2(x)
の凡例アイコンが欠落していることです。理想的には、プロットに一致する水平の明るい青色の線が表示されるはずです。誰もこれを達成する方法を知っていますか、またはguides()
機能の使用方法をよりよく説明できますか?
私も(同じname
引数彼らは、単一の凡例で終わる必要があり、そのようにすべての)scale_color_manual()
、scale_linetype_manual()
、およびscale_shape_manual()
の組み合わせを使用して解決策を試してみました。このアプローチの問題点は、すべての3つのギレイヤーレイヤーが審美的にcolor
の美学を持っていることですが、最初の2つだけがshape
の審美性を持ち、最後のレイヤーは美しさがlinetype
です。だからggplot
へのscale_xx_manual()
の追加がすべて正しく設定されていても、凡例は1つに結合されません。
私は長い間このことに執着していますので、どんな助けでも大歓迎です。ありがとう
ありがとうございました!他の2つの美学の1つではなく、「形状=偽」を選択する理由を説明できますか? –
@AddisonKlinkeそのバージョンでは、2つのうちどれをfalseに設定してもかまいませんし、両方を同じ値に設定することもできます(つまり、 'guide_legend(...)')。彼らは同一で合併するだろう)。線種はプロット内の何にもマッピングされないため、凡例を取得しないため、設定する必要はありません。また、 'guides()'を全く使わない別の解決法がある私の編集をチェックしてください –