Ggplot'ta efsane başlığı nasıl değiştirilir


301

Aşağıdaki gibi aşağıdaki komplo var. Bu komutla oluşturuldu:

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")

Şimdi yapmak istediğim bir sonraki şey değiştirmektir efsane başlığını gelen koşul haline YENİ EFSANESİ ADI .

Yani ne yaptım sadece aşağıdaki satırı eklemek yukarıdaki kodun sonuna ekleyin:

+labs(colour="NEW LEGEND TITLE")

Ama işe yaramıyor. Bunu yapmanın doğru yolu nedir?

resim açıklamasını buraya girin


111
labs(fill="xyz")yapmalı
baptiste

1
@baptiste Yorumunuza dikkat etmeden bu soruya sayısız kez geri döndüm, cevap olarak yazabilir misiniz? IMO bu en basit çözüm ve bazı tanınmayı hak ediyor
User632716

3
@ User632716 zaten birisinin cevabında
baptiste

7
işe yaramıyor ...
shenglih

1
Birden fazla geom_ifadeye sahip araziler içeren bir cevap arayanlar için , stackoverflow.com/a/38485985/1169233 adresindeki yanıtı önerdim , benim için çalışan tek kişi bu.
Waldir Leoncio

Yanıtlar:


348

Bu çalışmalı:

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"))

(Veya alternatif olarak)

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

10
Başka bir alternatifp$labels$fill <- "New Legend Title"
Alex Holcombe

3
guides ve scale_fill_discrete arasındaki fark nedir
Medhat

18
p$labels$fillbenim için çalışmadı. İle ggplot2_2.1.0I kullanmakp$labels$colour <- "New legend title"
ClementWalter

4
p$labels$fill güzel ama aes'te estetikte (çizgi tipi, renk, şekil) birden fazla değişken kullanıyorsanız, bunları her biri için ayrı ayrı değiştirmeniz gerekir.
disipulus

227

Bunu çok fazla araştırmadım ama ggplot () içinde fill = cond kullandığınız için ,

 + labs(color='NEW LEGEND TITLE') 

çalışmamış olabilir. Eğer değiştirmek Ancak renk ile dolgu , çalışıyor!

+ labs(fill='NEW LEGEND TITLE') 

Bu benim için çalıştı ggplot2_2.1.0


20
Bence bu en ileri cevaptır, OP'nin en fazla bir ekstra çizgi ile tam olarak ne istediğini yapar
Leo

3
hem color = hem de fill = çalışmalıdır. Bu soruya "doğru" cevap, IMO
Dan

3
dolgu renginin işe yarayıp yaramayacağı gerçekten hangi "koşul" (ya da diğer durumlarda grup) ile eşleştirildiğine bağlıdır. İyi bir açıklama cookbook-r.com/Graphs/Legends_(ggplot2)
user1442363

3
Bu en iyi cevap.
Akshay Gaur

1
Not: ggplot2 3.0+ sürümünde bu çözüm işe yaramadı: tarafından çözüldüp + guides(fill=guide_legend(title="New Legend Title"))
Sumanth Lazarus

39

İki yoğunluğa sahip olduğunuz için, kendi renklerinizi ayarlamak isteyebileceğinizi hayal ediyorum scale_fill_manual.

Eğer öyleyse yapabilirsiniz:

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"))

resim açıklamasını buraya girin


27

Yukarıdaki kodların hiçbiri benim için çalışmadı.

İşte bulduğum şey ve işe yaradı.

labs(color = "sale year")

Ayrıca \nsonuna ekleyerek başlık ve ekran arasında boşluk bırakabilirsiniz .

labs(color = 'sale year\n")


3
Bunun bu cevaptan farkı nedir?
merv

3
Evet, yukarıdaki her örneği denedim ve bu benim için işe yarayan tek örnekti. Teşekkürler!
SummerEla

Bu çalışma orijinal gönderi sorusu nasıl verilirdi, (veya ) fillyerine gerekli gibi görünüyor ? Sorunun zamanı göz önüne alındığında, versiyonla ilgili olması mümkündür . colorcolourggplot2
steveb

1
Temel fark, bunun gerçekten işe yaramasıdır.
Luís de Sousa

16

Kodunuzda ggplot(data, fill= cond)histogramı oluşturduğunuz için etiket etiketinde "dolgu" ifadesini kullanarak açıklama başlığı eklemeniz gerekir +labs(fill="Title name"). Kodun ggplot (veri, renk = koşul) olduğu farklı türde bir çizim kullanıyorsanız, kullanabilirsiniz +labs(colour= "Title Name"). Özetle, laboratuvar argümanı aes argümanıyla eşleşmelidir.

+ guides(fill=guide_legend("my awesome title"))Geom_bar parsellerde efsane başlığını değiştirmek için kullandım ama geom_point için işe yaramadı.


..., ama bunun için geom_point(), bu benim için çalışıyor:guides(color=guide_legend("Type:"))
knb

1
@knb, yönteminiz çalışıyor:guides(color=guide_legend("Score Ranking:"))
bmc

1
Bu cevabın farkı nedir?
merv

6

Bazı basit grafikler için çalışabilecek çok basit bir cevap daha var.

Grafiğinize guide_legend () çağrısını ekleyin.

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

Çok güzel ggplot belgelerinde gösterildiği gibi .

O değil işliyor varsa, daha doğrusu bir çağrıda bulunan rehberiniz parametrelerini ayarlayabilirsiniz kılavuzları :

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

Ayrıca, aramanız için bu parametreleri de belirterek şekli / rengi / boyutu guidesda değiştirebilirsiniz.


26
Bu benim için işe yaramadı, ama qplot(…) + guides(color=guide_legend(title="sale year"))çalıştı
Arnaud A

3

Sadece listeye eklemek için (buradaki diğer seçenekler benim için çalışmadı), ggplot için update_labels işlevini de kullanabilirsiniz:

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")

Bu ayrıca x ve y ekseni etiketlerini ayrı satırlarla değiştirmenize izin verir:

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

2

Ggboxplot () için legend.title değiştirmek / belirtmek için iki yol olduğunu fark ettim:

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)

Kod GitHub'daki örneğe göre değiştirilir .


1

Benim ggplot bir facet_wrap kullanıyorum ve ArnaudA'nın çözümü dışında önerilen çözümler benim için çalıştı:

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

1

Birçok kişi etiketleri, gösterge etiketlerini, başlıkları ve eksenin adlarını değiştirmek için çok zaman harcar, çünkü boşluk içeren R'ye tablolar yüklemek mümkün değildir " ". Bununla birlikte, örneğin sekmelerle (veya varsayılan veya tek bir boşluktan başka herhangi bir ayırıcıyla) ayrılmış bir tablo yüklediğinizde ayırıcıları belirterek, zaman kazanmak veya kodunuzun boyutunu azaltmak için bunu yapabilirsiniz:

read.table(sep = '\t')

veya csv biçiminin varsayılan yükleme parametrelerini kullanarak:

read.csv()

Bu "NEW LEGEND TITLE", her grafikte yeni bir açıklama başlığı belirtmekten kaçınmak için adı doğrudan orijinal veri dosyanızda bir sütun adı (başlık) olarak tutabileceğiniz anlamına gelir .


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.