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.