ggplot2绘图之图例微调

来源:360DOC 责任编辑:王亮
默认
特大
宋体
黑体
雅黑
楷体

我们说一幅完整的图应包含至少4项元素,即:标题、坐标轴、图例和数据来源,在基于ggplot2图形的微调文中已经详细的介绍了图形的标题、坐标轴和数据来源的设置,包括属性设置和外观设置等。本文就详细为大家讲讲有关图例的设置,包括属性设置、位置设置、顺序设置、外观设置等。

一、清除图例

有时图例的存在并没有意义,如之前的图形中已经出现了图例,在之后的某些图中就没必要使图例存在;x轴或y轴已经表示了分类的各个水平(如盒形图),此时也没必要将图例保存下来。这里介绍两种清除图例的办法,即标度法和主题法。

library(ggplot2)

set.seed(1234)

type <- sample(c('A','B','C','D','E'), size = 1000, replace = TRUE, prob = c(0.1,0.2,0.2,0.3,0.2))

region <- sample(c('West','East'), size = 1000, replace = TRUE, prob = c(0.3, 0.7))

values <- c(rnorm(n = 300, mean = 2,sd = 5), rt(n = 300, df = 4), runif(n = 400, min = 10, max = 100))

df <- data.frame(type = type, region = region, values = values)

head(df)


#盒形图保留图例是没有必要的

ggplot(data = df, mapping = aes(x = type, y = values, fill = type)) + geom_boxplot()


接下来使用标度法和主题法将图例删除,标度法通过使用scale_fill_discrete()函数实现,只需将guide参数设置为FALSE即可;主题法就是通过them()函数,将参数legend.position设为'none'即可。这两方法可以达到相同的功效。

ggplot(data = df, mapping = aes(x = type, y = values, fill = type)) + geom_boxplot() + scale_fill_discrete(guide = FALSE)

#或者

ggplot(data = df, mapping = aes(x = type, y = values, fill = type)) + geom_boxplot() + theme(legend.position = 'none')


上面的图只是举了个图例为填充色的例子,如果图例是由其他属性构成,如大小、形状、颜色、线型等,同样可以使用以上的标度法,只不过需要将对于的标度更改就可以了。下面就列出常用的标度出来:

基于填充色属性:

scale_fill_discrete() #离散变量填充色

scale_fill_continuous() #连续变量填充色

scale_fill_gradient() #连续变量色阶

scale_fill_gray() #灰度填充色

scale_fill_hue()  #自定义画板填充色

scale_fill_brewer() #自定义画板填充色

scale_fill_manual() #自定义填充色

基于颜色属性:

scale_colour_discrete()

scale_colour_continuous()

scale_colour_gradient()

scale_colour_gray()

scale_colour_hue()

scale_colour_brewer()

scale_colour_manual()

基于大小属性:

scale_size_discrete()

scale_size_continuous()

scale_size_manual()

scale_size_area()

基于形状属性:

scale_shape_discrete()

scale_shape_continuous()

scale_shape_manual()

基于线型属性:

scale_linetype_discrete()

scale_linetype_continuous()

scale_linetype_manual()

如果图例是必不可少的,为了美观,可能需要对图例做更多的改动,如图例位置的摆放、顺序的重设定、外观设置等。下面就看看如何使我们的图例变得更具吸引眼球。

二、修改图例位置

有关图例位置的更改,可以通过主题theme()函数实现,只需要通过调整legend.position()参数的设定就可以随心所欲的摆放图例位置。

library(dplyr)

#数据汇总分析

df2 <- group_by(.data = df, type, region)

df3 <- df2 %>% summarize(., Total = sum(values))

head(df3)


#默认情况下的图例

p <- ggplot(data = df3, mapping = aes(x = type, y = Total, fill = region)) + geom_bar(stat = 'identity', position = 'dodge')

p


#更改图例位置

p + theme(legend.position='bottom')




legend.position可以设置为顶部(top),底部(bottom)、左边(left)和右边(right)。发现图标在顶部或底部的话,原来的图形会被压缩,高度明显变矮。为了解决这样的问题,legend.position还可以设置图例的具体位置,即legend.position = c(x, y)。注意,这里的x和y的取值范围均为[0,1]。

#将图例放到图形内部,并设置为左上角

p + theme(legend.position=c(0,1))


咦?这位置怎么跑的很奇怪?虽是左上角,怎么还跑到图形外面去了?因为默认情况下图例的中心点位置设在了(0,1)的位置,如果需要更改图例中心点位置,则需使用legend.justification = c(x, y)进行设置,如legend.justification = c(1,0)表示图例中心点在图例的左上角。下面使用legend.justification重新绘制一下图例的位置:

p + theme(legend.position=c(0,1), legend.justification=c(0,1))


Perfect!图例不再错误的偏移了。有没有发现不和谐的地方?图形的背景为灰色,而图例的背景为白色,明显感觉像是不专业的PS工作者,如何让图例融入到图形中呢?很简单,只需要进一步设置图例背景主题即可。

p  + theme_bw() + theme(legend.position=c(0,1), legend.justification=c(0,1)) + theme(legend.background = element_rect(fill = 'white', colour = 'black'))


其中,theme_bw()将原来的灰色背景设置为黑白背景,fill设置图例背景色为白色, colour设置图例边框为黑色。如果不需要边框色的话,就不需要指定颜色属性的值。

三、修改图例内容的顺序

如果我想把图例内容的顺序改一改,即West在East之上,该如何实现呢?ggplot2包仍然允许你添加少量的代码就可以实现目的。

p  + theme_bw() + theme(legend.position=c(0,1), legend.justification=c(0,1)) + theme(legend.background = element_rect(fill = 'white', colour = 'black')) + scale_fill_discrete(limits = c('West','East'))


哎?跟上一幅图相比,发现一个问题,虽然图例内容的顺序发生了变化,但原本的颜色跟着变化了,即原来East为粉红色变为了蓝色,原来West为蓝色变为了粉红色,而且条形图的顺序并没有跟着发生变化。在我看来颜色的变化并不是重点,重点是条形图的顺序纹丝不动,如果想让图例项目顺序和条形图顺序一致的话,该如何操作呢?实际也很简单,只需将因子顺序改变即可。

ggplot(data = df3, mapping = aes(x = type, y = Total, fill = factor(region, levels = c('West','East')))) + geom_bar(stat = 'identity', position = 'dodge') + theme_bw() + theme(legend.position=c(0,1), legend.justification=c(0,1)) + theme(legend.background = element_rect(fill = 'white', colour = 'black')) + scale_fill_discrete(limits = c('West','East')) + labs(fill = 'region')



四、图例内容顺序的整体逆转

如何逆转图例的整体内容呢?同样很简单,只需使用guide()函数就可以轻松实现:

#原始默认的图例内容顺序

ggplot(data = df3, mapping = aes(x = region, y = Total, fill = type)) + geom_bar(stat = 'identity', position = 'dodge')


#实现整体图例内容的逆转

ggplot(data = df3, mapping = aes(x = region, y = Total, fill = type)) + geom_bar(stat = 'identity', position = 'dodge') + guides(fill = guide_legend(reverse = TRUE))



五、修改图例标题和图例项目的内容

使用labs()函数,通过设定fill、colour、shape、size、linetype等属性的值,就可以更改图例标题了。当然也可以通过标度方法达到相同的目的,以例子说明这两种方法的应用:

ggplot(data = df3, mapping = aes(x = region, y = Total, fill = type)) + geom_bar(stat = 'identity', position = 'dodge') + labs(fill = '类型by_labs')


#或者

ggplot(data = df3, mapping = aes(x = region, y = Total, fill = type)) + geom_bar(stat = 'identity', position = 'dodge') + scale_fill_discrete(name = '类型by_scale')


#当然也可以通过这种方式删除图例标题

ggplot(data = df3, mapping = aes(x = region, y = Total, fill = type)) + geom_bar(stat = 'identity', position = 'dodge') + labs(fill = '')



#修改图例项目的内容

ggplot(data = df3, mapping = aes(x = region, y = Total, fill = type)) + geom_bar(stat = 'identity', position = 'dodge') + scale_fill_discrete(labels = c('Level01','Level02','Man','Women','Children'))


六、修改图例标题和图例内容的外观

之前我们说过,修改图形标题、坐标轴标签和刻度标签的外观可以通过主题方式实现,这里同样也可以通过主题theme()函数实现图例标题和图例内容的外观

#默认情况下的图例

p <- ggplot(data = df3, mapping = aes(x = type, y = Total, fill = region)) + geom_bar(stat = 'identity', position = 'dodge')

p


#修改图例标题和图例内容的外观

p + theme(legend.title = element_text(colour = 'steelblue', size = 15, face = 'bold.italic')) + theme(legend.text = element_text(colour = 'red', face = 'bold'))




参考文献:

R语言_ggplot2:数据分析与图形艺术

R数据可视化手册

ggplot2的图,怎么添加和修改数据标签

答:转载在这里提了一个自问自答的问题来推广一种十分优雅的数据可视化工具,R的ggplot2包。其实我自己现在主要在使用Python和Pandas和Numpy工作,ggplot2应该是我留守在R里面最大的理由之一~ 在介绍ggplot2之前,我首先来介绍一下作者Hadley Wickha

如何删除图例标题中ggplot2

答:name genus vore order conservation sleep_total sleep_rem sleep_cycle awake brainwt bodywt 1 Cheetah Acinonyx carni Carnivora lc 12.1 NA NA 11.9 NA 50.000 2 Owl monkey Aotus omni Primates 17.0 1.8 NA 7.0 0.01550 0.480 3 Mountain...

为您准备的相关内容:

  • ggplot2学习笔记之颜色标度
  • ggplot2绘制条形图
  • 它山之石可以攻“色”(2):从 ggthemes ...
  • #软件工具#R语言中的神器ggplot2
  • ggplot2作图详解6:标尺(scale)设置
  • 利用ggplot2画出各种漂亮图片详细教程 |...
  • R语言:ggplot2精细化绘图
  • 一小时掌握R语言数据可视化
  • >>> 温馨提示:您还可以点击下面分页查看更多相关内容 <<<

    头条

    热门

    24小时热评

    热点排行榜

    Copyright ? 2012-2016 tuxi.com.cn 版权所有 京ICP备10044368号 京公网安备11010802011102号 关于我们 | 广告服务 | 诚聘英才 | 联系我们 | 友情链接 | 免责申明