设置图例字体_如何实现ggplot2不用颜色,改用形状来区分图例

文章介绍使用R的ggplot2实现可视化展示,针对杂志期刊或毕业论文要求,阐述在黑白图状态下用形状区分图例的方法。分别就折线图和柱状图展开说明,包括用颜色、线型、形状区分折线图图例,以及用颜色、灰度区分柱状图图例,还提及ggplot2的分面功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

525f31b72bafe02c8dab9e1b4106c3f9.png

使用R的ggplot2可以实现精美的可视化展示,但是有一些杂志期刊或者毕业论文会要求不能用颜色来区分图例,要实现即使在黑白图状态下也能识别图例,即改用形状来区分图例。本篇文章主要就折线图和柱状图进行说明(目前作者还尚不知如何使用形状来填充柱状图,如果你有更好的办法可以在评论区进行补充交流)。

一.折线图

折线图要演示的数据:

dt<-data.frame(season = 1:4, 
                mean = c(70,85,90,120,80,87,99,110),
                pollutant = c('NO2','NO2','NO2','NO2','PM2.5','PM2.5','PM2.5','PM2.5'))
dt

数据如下:

707dedbe392f8c295ecf9525e455831f.png

准备做一个以season为x轴,mean为y轴,pollutant为类别(图例)的时间序列图

  1. 用颜色区分折线图图例
library(ggplot2)
ggplot(dt,aes(x=season,y=mean,col =  pollutant))+
  geom_line(size=0.8)

900f89589cd933f78daf86c41f92db35.png

2. 用线型区分折线图图例

ggplot(dt,aes(x=season,y=mean,col =  pollutant))+
  geom_line(aes(linetype = pollutant),size=0.8)

ed28320b7a281d3b59d27de871603eed.png

3. 用形状区分折线图图例

ggplot(dt,aes(x=season,y=mean,col =  pollutant))+
  geom_line(size=0.8)+  
  geom_point(aes(shape=pollutant),size=3)

d12b4efac5470de7b7f29594f2f19069.png

4. 分面组图例子

上面的简单图用excel也可以实现,而且相对更方便,我一般更多的用ggplot2包来实现面板数据的图形展示。我们有时候需要展示多个城市的时间序列图,在excel里只能实现单独一个城市一个图,且不便于比较。ggplot2的分面功能可以实现一页多图的功能,即所有城市的时间序列图在一张图中一次性展示。

数据如下:

dt2<-data.frame(season = 1:4, 
                mean = c(70,85,90,120,80,87,99,110,
                         69,90,85,100,90,76,95,112),
                pollutant = c('NO2','NO2','NO2','NO2','PM2.5','PM2.5','PM2.5','PM2.5',
                              'NO2','NO2','NO2','NO2','PM2.5','PM2.5','PM2.5','PM2.5'),
                city=c('北京','北京','北京','北京','北京','北京','北京','北京',
                       '天津','天津','天津','天津','天津','天津','天津','天津'))
dt2

2fe91d594800d3c3c12555c0beb2288d.png

即在数据dt的基础之上加入了截面数据——城市数据。

ggplot(dt2,aes(x=season,y=mean,col =  pollutant))+
  geom_line(size=0.8)+  
  geom_point(aes(shape=pollutant),size=3)+
  facet_wrap(city~.,nrow=2,scales="free_x")+ #实现一页多图,按城市分面,
                                             #nrow=2表示2行,即小图按两行排列,也可以根据需求设置列ncol=2
                                             # scale标尺(free_x,free_y,free)选择free_x表示共用y轴
  scale_color_manual(values=alpha(c("#70AD47","#4472C4")))+ #除了默认颜色以外,也可以自定义颜色
  scale_x_continuous(labels = c("spring","summer","autumn","winter"))+  #把x轴刻度值标签改成“春夏秋冬”
  theme(legend.text=element_text(face ="bold"), #图例的PM2.5、NO2字体改成bold字体
        legend.position = "top",          #图例位置改为图上方
        legend.title=element_blank(),    #隐藏图例“pollutant"
        strip.text = element_text(face ="bold",size = 10), #设置单个图的类别标题文本的字体及大小(即小图中的“北京”、”天津“)
        axis.title =element_text(face = "bold"),   #设置坐标标题文本
        axis.title.x=element_blank())+             #隐藏x轴名称
  ylab("浓度均值")

f6ac6845c7f0d10aed53d99bed0c3555.png

二.柱状图

柱状图要演示的数据:

dt3<-data.frame(season = 1:4, 
                mean = c(40,45,40,20,30,15,20,10,30,40,40,70),
                level = c('A','A','A','A','B','B','B','B','C','C','C','C'))
dt3

21f44070cf3cb2e8cf62ac761cb7c679.png
  1. 用颜色区分柱状图图例

主要用堆积柱状图进行演示。

ggplot(dt3,aes(x=season,y=mean,fill=level))+
  geom_bar(stat="identity",position = position_stack(reverse = TRUE))  #position = position_stack(reverse = TRUE)是先让类别“A”先在下面堆积

0935a01a919091613e78b0721cd97c66.png

2. 用灰度区分柱状图图例

ggplot(dt3,aes(x=season,y=mean,fill=level))+
  geom_bar(stat="identity",position = position_stack(reverse = TRUE))+
  scale_fill_grey(start=0,end=1)

7e2cc13bfe82e0aa95593e5f61b7c785.png

能力有限,目前我还未能实现用形状来填充柱状图,大家如果有更好的办法欢迎在评论区交流。

[1][2]

参考

  1. ^http://blog.sina.com.cn/s/blog_670445240102v8xd.html
  2. ^https://blog.youkuaiyun.com/xspyzm/article/details/69665099?utm_source=blogxgwz8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值