ggplotで凡例のタイトルを変更する方法


300

以下のようなプロットがあります。次のコマンドで作成されました:

library(ggplot2)

df <- data.frame(cond = factor(rep(c("A", "B"), each = 200)), 
                 rating = c(rnorm(200), rnorm(200, mean=.8)))

ggplot(df, aes(x=rating, fill=cond)) + 
geom_density(alpha = .3) +
xlab("NEW RATING TITLE") +
ylab("NEW DENSITY TITLE")

次に、凡例のタイトルcondからNEW LEGEND TITLEに変更します。

だから私がやったことは、次の行を追加して上記のコードの最後を追加することです:

+labs(colour="NEW LEGEND TITLE")

しかし、それは機能しません。それを行う正しい方法は何ですか?

ここに画像の説明を入力してください


110
labs(fill="xyz")
すべき

1
@baptiste私はあなたのコメントに気付かずに何度もこの質問に戻ってきました。答えとしてそれを書いてもらえますか?IMOは最も簡単なソリューションであり、ある程度の評価に値します
User632716

3
User632716 @それは下記の誰かの答えではすでにだ
バティスト

7
動作しません...
shenglih 2018年

1
複数のgeom_ステートメントを含むプロットに関する答えを探している人のために、私はstackoverflow.com/a/38485985/1169233での答えをお勧めします。それが私のために働いた唯一のものです。
Waldir Leoncio

回答:


348

これはうまくいくはずです:

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
p <- p + guides(fill=guide_legend(title="New Legend Title"))

(または代わりに)

p + scale_fill_discrete(name = "New Legend Title")

10
別の選択肢は次のp$labels$fill <- "New Legend Title"
とおり

3
guidesとscale_fill_discreteの違いは何ですか
Medhat

18
p$labels$fillうまくいきませんでした。ggplot2_2.1.0私を使用p$labels$colour <- "New legend title"
ClementWalter

4
p$labels$fill aesの美的要素(線種、色、形状)で複数の変数を使用している場合は、それを適切に変更する必要があります。
弟子、16

226

私はこれについて詳しくは説明しませんでしたが、ggplot()でfill = condを使用したため

 + labs(color='NEW LEGEND TITLE') 

うまくいかなかったかもしれません。ただし、塗りつぶしを置き換えても機能します。

+ labs(fill='NEW LEGEND TITLE') 

これはggplot2_2.1.0で私のために働きました


20
私はこれが最も筋の通った答えだと思います。それは、OPが最大で1行余分に要求することを正確に実行します
Leo

3
color =とfill =の両方が機能するはずです。これは、IMO、質問に対する「正しい」答えです
ダン

3
塗りつぶしの色が機能するかどうかは、 "cond"(または他の場合はグループ)が実際にマップされる対象によって異なります。良い説明は、cookbook-r.com
Graphs / Legends_(ggplot2

3
これが最良の答えです。
Akshay Gaur

1
注:ggplot2 3.0以降では、このソリューションは機能しませんでした。解決方法p + guides(fill=guide_legend(title="New Legend Title"))
Sumanth Lazarus

39

濃度が2つあるので、で独自の色を設定したいと思うかもしれませんscale_fill_manual

もしそうなら:

df <- data.frame(x=1:10,group=c(rep("a",5),rep("b",5)))

legend_title <- "OMG My Title"

ggplot(df, aes(x=x, fill=group)) + geom_density(alpha=.3) +   
    scale_fill_manual(legend_title,values=c("orange","red"))

ここに画像の説明を入力してください


27

上記のコードはどれもうまくいきませんでした。

これが私が見つけたもので、うまくいきました。

labs(color = "sale year")

\n最後にを追加して、タイトルとディスプレイの間にスペースを空けることもできます。

labs(color = 'sale year\n")


2
これはこの回答とどう違うのですか?
merv

3
はい、私は上記のすべての例を試しました、そしてこれは私のために働いた唯一のものです。ありがとう!
SummerEla

どのようにこの作品は、オリジナルポスト質問を与えられたでしょう、と思われるfill代わりにcolor(またはcolour)が必要とされていますか?質問の時間を考えると、ggplot2バージョンに関連している可能性があります。
スティーブ

1
@merv主な違いは、これが実際に機能することです。
ルイスデスーザ

16

コードでggplot(data, fill= cond)はヒストグラムを作成するために使用したので、ラベルセクションで "fill"を使用して凡例のタイトルを追加する必要があります+labs(fill="Title name")。コードがggplot(data、colour = cond)である別のタイプのプロットを使用して+labs(colour= "Title Name")いる場合は、を使用できます。要約すると、ラボの引数はaesの引数と一致する必要があります。

+ guides(fill=guide_legend("my awesome title"))geom_barプロットで凡例のタイトルを変更するのに使用しましたが、geom_pointでは機能しないようです。


...、しかしgeom_point()、これは私にとってはguides(color=guide_legend("Type:"))
うまくいき

1
@knb、あなたの方法はうまくいきます:guides(color=guide_legend("Score Ranking:"))
bmc

1
これはこの回答とどのように違うのですか?
merv

6

いくつかの単純なグラフで機能する別の非常に単純な答えがあります。

グラフにguide_legend()の呼び出しを追加するだけです。

ggplot(...) + ... + guide_legend(title="my awesome title")

非常に素晴らしいggplotドキュメントに示されているように。

それでもうまくいかない場合は、guidesを呼び出して、より正確にガイドパラメータを設定できます

ggplot(...) + ... + guides(fill=guide_legend("my awesome title"))

これらのパラメータを指定して、形状、色、サイズを変えることもできますguides


26
これは私にとってはqplot(…) + guides(color=guide_legend(title="sale year"))うまく
いき

3

リストに追加するだけで(ここでは他のオプションは機能しませんでした)、ggplotに関数update_labelsを使用することもできます。

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
update_labels(p, list(colour="MY NEW LEGEND TITLE")

これにより、x軸とy軸のラベルを別々の行で変更することもできます。

update_labels(p, list(x="NEW X LABEL",y="NEW Y LABEL")

2

ggboxplot()のlegend.titleを変更/指定するには2つの方法があることに気づきました:

library(ggpubr)

bxp.defaultLegend <- ggboxplot(ToothGrowth, x = "dose", y = "len",
                               color = "dose", palette = "jco")

# Solution 1, setup legend.title directly in ggboxplot()
bxp.legend <- ggboxplot(ToothGrowth, x = "dose", y = "len",
                 color = "dose", palette = "jco", legend.title="Dose (mg)")

# Solution 2: Change legend title and appearnace in ggboxplot() using labs() and theme() option:
plot1 <-  bxp.defaultLegend + labs(color = "Dose (mg)") +
  theme(legend.title = element_text(color = "blue", size = 10), legend.text = element_text(color = "red"))

ggarrange(list(bxp.legend, bxp.defaultLegend, plot1), nrow = 1, ncol = 3,  common.legend = TRUE)

コードはGitHub例に基づいて変更されています


1

私のggplotでfacet_wrapを使用していますが、ArnaudAの解決策を除いて、提案された解決策はどれもうまくいきませんでした。

qplot() + guides(color=guide_legend(title="sale year")) 

1

多くの人は、ラベル、凡例ラベル、タイトル、軸の名前の変更に多くの時間を費やしています" "。なぜなら、スペースを含むRにテーブルをロードすることが可能であることを知らないからです。ただし、これを行うと、たとえばタブで区切られたテーブル(またはデフォルト以外のセパレータまたは単一のスペース)をロードするときにセパレータを指定することで、時間を節約したり、コードのサイズを小さくしたりできます。

read.table(sep = '\t')

または、csv形式のデフォルトの読み込みパラメータを使用する:

read.csv()

つまり、名前"NEW LEGEND TITLE"を元のデータファイルの列名(ヘッダー)として直接保持できるため、すべてのプロットで新しい凡例のタイトルを指定する必要がありません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.