Ggplotで1つのバーのみを着色したい。これは私のデータフレームです:
area <- c("Północ", "Południe", "Wschód", "Zachód")
sale <- c(16.5, 13.5, 14, 13)
df.sale <- data.frame(area, sale)
colnames(df.sale) <- c("Obszar sprzedaży", "Liczba sprzedanych produktów (w tys.)")
そしてプロットのためのコード:
plot.sale.bad <- ggplot(data=df.sale, aes(x=area, y=sale, fill=area)) +
geom_bar(stat="identity") +
scale_fill_manual(values=c("black", "red", "black", "black")) +
xlab(colnames(df.sale)[1]) +
ylab(colnames(df.sale)[2]) +
ggtitle("Porównanie sprzedaży")
バーを1つだけ色付けし、他の3つをデフォルトの色にしたい(黒ではなくダークグレー、見た目が悪い)。棒の色だけを変更したり、棒のデフォルトの色の名前を取得して、黒ではなくそれらを配置するにはどうすればよいですか?
オプション1:1つのバーのみの色を変更します。ヘンリックの提案に従って、デフォルトの色のNAとデフォルト以外の色の文字列/係数(最初の色はたまたま赤)を持つ新しい変数を作成できます。
area.color <- c(NA, "withcolor", NA, NA)
plot.sale.bad <- ggplot(data=df.sale, aes(x=area, y=sale, fill=area.color)) +
geom_bar(stat="identity") +
xlab(colnames(df.sale)[1]) +
ylab(colnames(df.sale)[2]) +
ggtitle("Porównanie sprzedaży")
plot.sale.bad
オプション2:希望するデフォルトの濃い灰色の名前を見つけます。元のコードのscale_fill_manual
行を削除するだけの場合、これはデフォルトの色ではないため(この場合、4つの異なるパステルが表示されます)、この段落のすぐ上のコードチャンクによって生成された灰色を意味していると思います、area.color==NA
のバーの場合。その場合、scale_fill_discrete
のソースコード(またはargs)を確認できます。
> args(scale_fill_discrete)
# function (..., h = c(0, 360) + 15, c = 100, l = 65, h.start = 0,
# direction = 1, na.value = "grey50")
# NULL
na.value
のデフォルトは"grey50"
です。したがって、scale_fill_manual
を使用したい場合は、次のようにすることができます。
plot.sale.bad <- ggplot(data=df.sale, aes(x=area, y=sale, fill=area)) +
geom_bar(stat="identity") +
scale_fill_manual(values=c("grey50", "red", "grey50", "grey50")) +
xlab(colnames(df.sale)[1]) +
ylab(colnames(df.sale)[2]) +
ggtitle("Porównanie sprzedaży")
plot.sale.bad
すべてをggplot呼び出しに含める場合は、以下に示すように、factor()
内でifelse
ステートメントを使用して塗りつぶします。
これにより、凡例も2つのカテゴリ(強調表示と非強調表示)に分けられるため、x軸に表示されている値が繰り返されなくなります。これは、凡例のプロットに別の例示的な次元も提供します。
_plot.sale.bad2 <- ggplot(data=df.sale,
aes(x=area,
y=sale,
fill=factor(ifelse(area=="Południe","Highlighted","Normal")))) +
geom_bar(stat="identity") +
scale_fill_manual(name = "area", values=c("red","grey50")) +
xlab(colnames(df.sale)[1]) +
ylab(colnames(df.sale)[2]) +
ggtitle("Porównanie sprzedaży")
plot.sale.bad2
_
凡例が必要ない場合は、geom_boxplot()
呼び出しに_show.legend = FALSE
_を追加して、以下を作成できます。