scale_fill_discrete不会更改标签名称

时间:2016-02-29 23:46:57

标签: r ggplot2 label

尝试使用 ggplot 更改地块图例中的标签名称时出现问题。

我来阅读Cookbook for R中有关该主题的一些教程,以及本论坛(How do I manually change the key labels in a legend in ggplot2)中同一主题的问题,以及更多内容。我写这个的原因是因为我无法理解我的 ggplot 函数发生了什么,这使得 scale_fill_discrete()不起作用,而在其他示例中它不起作用。

我的数据框架如下:

           x w t
1  0.8972208 A 0
2  0.8312684 A 1
3  0.7504638 A 2
4  0.6563472 A 3
5  0.5764883 A 4
6  0.5224609 A 5
7  0.8972208 B 0
8  0.8456315 B 1
9  0.7674353 B 2
10 0.6689723 B 3
11 0.6114414 B 4
12 0.5381668 B 5
13 0.8983253 C 0
14 0.7878405 C 1
15 0.6955420 C 2
16 0.6179749 C 3
17 0.5524141 C 4
18 0.4966967 C 5    

据我所知,使用 ggplot ,图例中的排序因子是一项非常困难的任务,这就是它们在数据框中按字母顺序排序的原因({{1} })。然而,真实姓名应该是不同的,例如:" O"," R"和" N.

ggplot 功能我是:

factor w

我知道函数 scale_fill_discrete 应该将ggplot (data = eso3, aes (x=t, y = x, colour = w, linetype = w, shape= w)) +geom_line() +geom_point() +scale_linetype_manual("LEGEND TITLE",values =c("solid","solid","dashed","dashed","dotted","dotted")) +scale_colour_manual("LEGEND TITLE",values=c("black","black","darkgray","darkgray","dimgray","dimgray")) +scale_shape_manual("LEGEND TITLE",values=c(19,15,19,15,19,15)) +scale_y_continuous("Y LABEL",limits=c(0.0,1.0)) +theme(axis.title.y = element_text(angle=0)) +scale_fill_discrete("LEGEND TITLE",breaks=c("A","B","C"),labels=c("O","R","N")) +ggtitle("MAIN TITLE") +theme_bw() 更改为("A","B","C")。为什么它不起作用?

2 个答案:

答案 0 :(得分:4)

由于您使用的是colourlinetypeshape,而不是fill,因此您必须将新的标签与scale_xxx_manual()调用集成在一起,如:< / p>

ggplot (data = eso3, aes (x=t, y = x, colour = w, linetype = w, shape= w))+
geom_line()+
geom_point()+
scale_linetype_manual("LEGEND TITLE",values =c("solid","solid","dashed","dashed","dotted","dotted"),breaks=c("A", "B", "C"), labels=c("O","R","N"))+
scale_colour_manual("LEGEND TITLE",values=c("black","black","darkgray","darkgray","dimgray","dimgray"),breaks=c("A", "B", "C"), labels=c("O","R","N"))+
scale_shape_manual("LEGEND TITLE",values=c(19,15,19,15,19,15),breaks=c("A", "B", "C"), labels=c("O","R","N"))+
scale_y_continuous("Y LABEL",limits=c(0.0,1.0))+
theme(axis.title.y = element_text(angle=0))+
ggtitle("MAIN TITLE")+
theme_bw()

enter image description here

答案 1 :(得分:0)

您没有在ggplot(..)函数中使用fill参数,因此无法使用scale_fill_discrete()。

根据要更改的图例使用scale_colour_discrete(),scale_linetype_discrete()或scale_shape_discrete()。我最常提及的内容是如何使用scale_fill_discrete更改标签,但忽略了,仅当您使用fill参数时。