栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > R语言

R语言ggplot2直方图、密度曲线、背景着色、直线与注释

R语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

R语言ggplot2直方图、密度曲线、背景着色、直线与注释

关于基本的直方图设置、纵坐标对数变换以及基本的颜色设置,可以参考R语言ggplot2直方图设置。 本文使用的数据为:R语言自带的mtcars数据集的mpg变量。以下内容中将首先给出目标图片和代码,并逐一解释。欢迎批评指正!

目录
    • 1. 图片及所有代码
    • 2. 按步骤说明
      • 2.1 最基本的直方图(颜色,柱宽,位置)
      • 2.2 在直方图上加密度曲线
      • 2.3 添加(修改)标题与横纵轴名称,并修改标题格式。
      • 2.4 添加背景填充并且设置其颜色
      • 2.5 改变背景填充颜色
      • 2.6 添加竖直线条
      • 2.7 图中添加文字与矩形注释
      • 2.8 改变图片背景颜色与线条

1. 图片及所有代码

# 获取mpg变量的密度
dense = data.frame(density(mtcars$mpg)[c('x','y')])

ggplot(mtcars,aes(x =mpg))+
        geom_histogram(aes(y=..density..), color="#88ada6", alpha=.25, fill="#fffbf0", binwidth = 2, center=1)+
        geom_density()+
        geom_area(data = subset(dense,x >= 10 & x < 15), aes(x, y, fill = "Label 1"), alpha=.4)+
        geom_area(data = subset(dense,x >= 15 & x < 20), aes(x, y, fill = "Label 2"), alpha=.4)+
        geom_area(data = subset(dense,x  >= 20 & x < 25), aes(x, y, fill = "Label 3"), alpha=.4)+
        geom_area(data = subset(dense,x >= 26 & x < 30), aes(x, y, fill = "Label 4"), alpha=.4)+
        geom_area(data = subset(dense,x >= 30), aes(x, y, fill = "Label 5"), alpha=.4)+
        scale_fill_manual("Label title", 
                          breaks = c("Label 1", "Label 2", "Label 3", "Label 4", "Label 5"), 
                          values = c("Label 1"="#4b5cc466", "Label 2"="#16a95166", "Label 3"="#ffb61e66", "Label 4"="#ff750066", "Label 5"="#c3272b66"))+
        labs(title="title",
             subtitle="subtitle",
             caption = "caption",
             x = 'x axis title',
             y = 'y axis title')+
  theme_bw()+
        theme(plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
              plot.subtitle = element_text(size = 12, face = "bold", hjust = 0.5),
              plot.caption = element_text(size = 12, face = "italic"),
              axis.text = element_text(size=12),
              axis.title = element_text(size=14, face="bold"))+
        geom_vline(xintercept = 15,linetype = "twodash",color="blue",size = 1)+
        annotate("rect", xmin = 10, xmax = 18, ymin = 0.05, ymax = 0.07, alpha = .1, fill="navy")+
        annotate("text", fontface = "bold", color="blue",
                 x = 14, y=0.06,
                 label = 'annotation', size=6)
2. 按步骤说明 2.1 最基本的直方图(颜色,柱宽,位置)

首先绘制一个基本的直方图,横坐标为mpg的值,纵坐标为密度。额外设置了填充色、边框色、透明度、柱宽、柱子的位置。代码中标注“可以不设置”的部分如无需要均可删除。

ggplot(mtcars,aes(x =mpg))+
        geom_histogram(aes(y=..density..), # 纵坐标是密度。类似也可以将纵坐标设置为频数(count)
                       color="#88ada6", fill="#fffbf0", # 边框与填充色,可以不设置
                       alpha=.25,  # 透明度,可以不设置
                        binwidth = 2, # 柱子的宽度。类似得也可以设置柱子的个数,如bins = 30
                       center = 0) # 柱子与对应横坐标的相对位置。0是指居中对齐。1是指对应数字在柱子的右侧边线。可以不设置

2.2 在直方图上加密度曲线

在上图基础上,可以直接用geom_density函数加上密度曲线(代码最后一行)。

g=ggplot(mtcars,aes(x =mpg))+
        geom_histogram(aes(y=..density..), # 纵坐标是密度。类似也可以将纵坐标设置为频数(count)
                       color="#88ada6", fill="#fffbf0", # 边框与填充色,可以不设置
                       alpha=.25,  # 透明度,可以不设置
                        binwidth = 2, # 柱子的宽度。类似得也可以设置柱子的个数,如bins = 30
                       center = 0)+ # 柱子与对应横坐标的相对位置。0是指居中对齐。1是指对应数字在柱子的右侧边线。可以不设置
        geom_density() # 密度曲线
g

2.3 添加(修改)标题与横纵轴名称,并修改标题格式。

要设置标题和横纵坐标轴名称,可以通过+labs函数。标题,副标题,脚标题,横、纵坐标轴的内容可以分别通过参数title,subtitle,caption,x,y来设置。
要设置标题和坐标轴文字的格式,可以在theme函数中改变plot.title,plot.subtitle,plot.caption.axis.text,axis.title这几个变量。假如希望将横纵坐标轴的格式分别设置,也可以将axis.text换成axis.text.x或axis.text.y。
在上图基础上,以下代码设置了labs和theme两个部分。

g = g+ labs(title="title", 
             subtitle="subtitle",
             caption = "caption",
             x = 'x axis title',
             y = 'y axis title')+
        theme(plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
              plot.subtitle = element_text(size = 12, face = "bold", hjust = 0.5),
              plot.caption = element_text(size = 12, face = "italic"),
              axis.text = element_text(size=12),  # 坐标轴上的文字
              axis.title = element_text(size=14, face="bold")) # 坐标轴标题
g

2.4 添加背景填充并且设置其颜色

首先,我们得到mpg的密度,记为dense。这是一个拥有两列的数据框(data.frame),两列分别代表mpg的值(x)与其对应密度(y)。

# 获取mpg变量的密度
dense = data.frame(density(mtcars$mpg)[c('x','y')])

在上图基础上,我们通过多次调用geom_area函数,为处于不同区间的mpg值(也就是横坐标的值),绘制不同的背景。在每次使用geom_area函数中,我们改变的参数有:

  • data:这段背景图所采用的的数据集。下面实例中通过subset函数选取了密度数据框dense的子集。
  • fill:颜色填充。这里填写的是标签的名字,以便在图例中显示。
  • alpha:透明度。取值在 0 0 0和 1 1 1之间,越小越透明。
g = g + 
        geom_area(data = subset(dense,x >= 10 & x < 15), aes(x, y, fill = "Label 1"), alpha=.4)+
        geom_area(data = subset(dense,x >= 15 & x < 20), aes(x, y, fill = "Label 2"),alpha=.4)+
        geom_area(data = subset(dense,x  >= 20 & x < 25), aes(x, y, fill = "Label 3"), alpha=.4)+
        geom_area(data = subset(dense,x >= 26 & x < 30), aes(x, y, fill = "Label 4"), alpha=.4)+
        geom_area(data = subset(dense,x >= 30), aes(x, y, fill = "Label 5"), ,alpha=.4)
g

2.5 改变背景填充颜色

在上图基础上,通过添加scale_fill_manual来改变颜色。其中我们设置了

  • 图例标题。设置在了函数的第一个变量(我不知道这个变量叫什么,欢迎补充!),也即"Label title"。
  • breaks:改变颜色的地方(一个向量)。这里填的是图例名称,如"Lable 1"。
  • values:颜色(一个向量)。对每个分量,这里采用了”Label 1“=’#4b5cc466‘的方式。也可以直接填写颜色名称。
g = g + scale_fill_manual("Label title", 
                          breaks = c("Label 1", "Label 2", "Label 3", "Label 4", "Label 5"), 
                          values = c("Label 1"="#4b5cc466", "Label 2"="#16a95166", "Label 3"="#ffb61e66", "Label 4"="#ff750066", "Label 5"="#c3272b66"))
g
2.6 添加竖直线条

可以用geom_abline添加直线。特别地,可以用geom_vline和geom_hline分别添加竖直和水平的线条。为方便记忆,这里的”v"和”h“分别代表"vertical"和"horizontal"(个人理解)。

g = g + geom_vline(xintercept = 15,linetype = "twodash",color="blue",size = 1)
g

2.7 图中添加文字与矩形注释

在之前的代码基础上,可以通过annotate函数添加注释。将geom变量设为”text“和”rect“分别代表文字与矩形。并且可以调整其位置、大小、颜色等。
以下代码中分别添加了文字与矩形。

g = g+annotate(geom = "rect", xmin = 10, xmax = 18, ymin = 0.05, ymax = 0.07, alpha = .1, fill="navy")+
        annotate(geom = "text", fontface = "bold", color="blue",
                 x = 14, y=0.06,
                 label = 'annotation', size=6)
g

2.8 改变图片背景颜色与线条

通过theme_bw()函数来采用ggplot2为我们提供的一种背景格式。类似的格式还有theme_classic()等。可以直接参考文首的代码绘制下图。


【注1】:请将”+theme_bw()“这句代码加在对theme的设置前面,否则它可能覆盖掉theme的部分设置。例如,如果在前文代码上做如下修改,那么图片的总标题则被移回了最左端。

g + theme_bw()

【注2】:为规避上述问题,可以参考ggplot2边框背景去除来手动更改边框与背景。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/855811.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号