R语言(一) ggplot2常用绘图命令总结

2023-11-12

提到R语言,总会想到它强大的绘图包ggplot2,甚至于其他语言中也有它的痕迹(例如,python中的matplotlib模块就有ggplot样式)。以下,总结了一些日常绘图中常用的命令。

一、基本绘图

        ggplot2绘图是逐步叠加式的,由+号进行连接,每个函数控制着自己的部分。以下将以lattice包下的singer数据集为例进行说明,其共包含两个变量身高(height)和音域(voice.part)

I.绘制直方图

data(singer,package="lattice")
library(ggplot2)
ggplot(data=singer,aes(x=height))+
	   geom_hist()

命令解释:
        ggplot()初始化图形时,首先需要指定数据集来源data以及绘制的变量。aes函数(全称aesthetics,指用视觉的方式呈递信息)中则是指定每个变量所扮演的角色。绘制的变量以height身高作为x轴,geom_hist()则是指定绘制的图形类型为直方图。

II.绘制箱线图

ggplot(data=singer,
	   aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+
	   geom_boxplot(alpha=0.7)

在这里插入图片描述

命令解释:
        相比I中,aes函数中多了fill及color的设置,fill则是指以voice.part的值进行区别,color则是以voice.part的值进行赋值颜色。alpha表示透明度的设置,范围为0到1。

III.更多绘图类型及参数设置

函数 绘图类型 参数设置
geom_bar() 条形图 Color、fill、alpha
geom_density() 密度图 Color、fill、alpha、 linetype
geom_rug 地毯图 Color、side
geom_point() 散点图 Color、shape、alpha、size
geom_violin() 小提琴图 Color、fill、alpha、linetype

二、精雕细琢

以上做出来的图还是比较粗糙的,接下来将逐步对其进行微调

(1) 添加标题、横纵轴标签
ggplot(data=singer,
	   aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+
	   geom_boxplot(alpha=0.7)+
	   labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")

在这里插入图片描述
添加标题及横纵轴标签后,不难看出,还是有很多小问题的。比如图片标题没有居中,横纵轴标题较小,字体样式不统一等。以下,将通过element_text函数继续进行调整。

(2) 图片标题字体、大小、样式设置
#plot.title表示图片标题
#face表示字体样式,共四种类型:plain,"italic"(斜体), "bold"(粗体), "bold.italic" (或者使用family指定其他字体样式)
#size指定字体大小
#hjust标题水平位置(0.5则表示水平居中)
#R里面的说明虽是0-1,实际上可以取到超过这个范围的值,还可以取负值!
ggplot(data=singer,
	   aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+
	   geom_boxplot(alpha=0.7)+
	   labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")+
	   theme(plot.title=element_text(face="plain",size=15,hjust=0.5))

在这里插入图片描述

(3) 坐标轴标题及标签字体、大小及样式设置

I.坐标轴标题样式调整

#axis.title.x:对x轴标题进行调整
#axis.title.y:对y轴标题进行调整
#axis.title: 对整体坐标轴标题统一调整
#vjust的设置是为了将x轴标题离绘图区远一点
windowsFonts(myFont = windowsFont("宋体"))  #读取电脑自带字体
ggplot(data=singer,
       aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+
	   geom_boxplot(alpha=0.7)+
	   labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")+
	   theme(plot.title = element_text(face="plain",size=15,hjust=0.5),
	         axis.title.x = element_text(family="myFont",size=15,vjust=-0.5), 
	         axis.title.y = element_text(family="myFont",size=15))         

在这里插入图片描述
这样调整后的图和第一张图相比,整体协调性是不是好多了?

II.坐标轴标签样式调整

#axis.text.x对x轴标签调整
#axis.text.y对y轴标签调整
#axis.text 统一对坐标轴标签调整
#angle旋转的角度
windowsFonts(myFont = windowsFont("宋体"))  
windowsFonts(myFont1 = windowsFont("微软雅黑"))  #横纵轴标签样式
ggplot(data=singer,
       aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+
  	   geom_boxplot(alpha=0.7)+
  	   labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")+
 	   theme(plot.title = element_text(face="plain",size=15,hjust=0.5),
        	 axis.title.x = element_text(family="myFont",size=15,vjust=-0.5),
             axis.title.y = element_text(family="myFont",size=15),
        	 axis.text.x = element_text(family="myFont1",angle = 90,size=12),
             axis.text.y = element_text(family="myFont1",size=12))

在这里插入图片描述
调整后,横纵轴标签变大了一些,且横轴标签通过旋转了90度,显得不是很拥挤。当然,如果希望对纵轴的数值从0开始且紧贴坐标原点,可以加上scale_y_continuous(limits=c(0,80),expand=c(0,0)),得到的图如下(个人感觉不美观且丧失了很多信息
在这里插入图片描述

(4) 颜色设置

一般软件里自带的颜色都挺花里胡哨的,以下三种方法可以自定义设置颜色。

I. 指定颜色

这里推荐一个配色网站LOL Colors,对比色和渐变色都挺不错的,日常绘图基本够用了。
命令:scale_fill_manual(values=c(""))

colors=c("#34314c","#47b8e0","#ffc952","#ff7473",
		 "#79bd9a","#79a8a9","#EC7357","#FFEEE4")	 

ggplot(data=singer,
       aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+
  geom_boxplot(alpha=0.7)+
  labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")+
  theme(plot.title = element_text(face="plain",size=15,hjust=0.5),
        axis.title.x = element_text(family="myFont",size=15,vjust=-0.5),
        axis.title.y = element_text(family="myFont",size=15),
        axis.text.x = element_text(family="myFont1",angle = 90,size=12),
        axis.text.y = element_text(family="myFont1",size=12))+
  scale_fill_manual(values=colors)

在这里插入图片描述

II. 使用调色板

如果不想自己去取颜色,还可以调用R中自带的调色板
命令:scale_fill_brewer(palette='xxx')
在这里插入图片描述

RColorBrewer::display.brewer.all()  #查看调色板样式
ggplot(data=singer,
       aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+
  geom_boxplot(alpha=0.7)+
  labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")+
  theme(plot.title = element_text(face="plain",size=15,hjust=0.5),
        axis.title.x = element_text(family="myFont",size=15,vjust=-0.5),
        axis.title.y = element_text(family="myFont",size=15),
        axis.text.x = element_text(family="myFont1",angle = 90,size=12),
        axis.text.y = element_text(family="myFont1",size=12))+
		scale_fill_brewer(palette='Set2')

在这里插入图片描述

(5) 图例样式设置

I.取消图例标题+调整图例位置

命令theme(legend.title=element_blank())
           theme(legend.position="top/bottom/right/left")

ggplot(data=singer,
       aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+
  geom_boxplot(alpha=0.7)+
  labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")+
  theme(plot.title = element_text(face="plain",size=15,hjust=0.5),
        axis.title.x = element_text(family="myFont",size=15,vjust=-0.5),
        axis.title.y = element_text(family="myFont",size=15),
        axis.text.x = element_text(family="myFont1",angle = 90,size=12),
        axis.text.y = element_text(family="myFont1",size=12),
        legend.title=element_blank(),
        legend.position="top")+
  scale_fill_brewer(palette='Set2')

在这里插入图片描述
当然legend.position也可以传入具体位置向量,如legend.position=c(0.5,0.6)

II.更改图例顺序

主要修改数据框中变量的因子顺序

singer$voice.part=factor(singer$voice.part,level=rev(levels(singer$voice.part))) #逆序排列

在这里插入图片描述
此外,修改图例的顺序还可以通过scale_fill_discrete(breaks=c())等命令(但是它是将原图例和新的图例一起呈现的

(6) 多图汇总

当需要结合多组图片进行说明时,就需要将其放置一张画布上呈现。而普通设置画布的方式par(mfrow=c(n,m)),在ggplot中是不起作用的。以下,介绍两种多图呈现的方式。使用的数据集为鸢尾花

I. Rmisc包下的multiplot函数

library(Rmisc)
p1 <- ggplot(data=iris,aes(x=Sepal.Length,y=Sepal.Width))+geom_point()
p2 <-ggplot(data=iris,aes(x=Species,y=Petal.Width,color=Species))+geom_boxplot()
p3 <- ggplot(data=iris,aes(x=Sepal.Width))+geom_density()
p4 <- ggplot(data=iris,aes(x=Petal.Length))+geom_histogram()
multiplot(p1,p2,p3,p4,cols=2)

在这里插入图片描述
这种方式虽然快捷,但它是默认按列进行排列的,无法指定各个图片放置的位置,当然也无法指定某个图片占一排的情况。

II. grid包下的layout函数

library(grid)
pushViewport(viewport(layout = grid.layout(2,2)))   #指定画图大小

vplayout <- function(x,y){
  viewport(layout.pos.row = x,layout.pos.col = y)
}
p1 <- ggplot(data=iris,aes(x=Sepal.Length,y=Sepal.Width))+geom_point()
p2 <-ggplot(data=iris,aes(x=Species,y=Petal.Width,color=Species))+geom_boxplot()
p3 <- ggplot(data=iris,aes(x=Sepal.Width))+geom_density()

print(p1,vp=vplayout(1,1:2))   #图片p1占画布的第一行

print(p2,vp=vplayout(2,1))  #图片p2占画布第二行的第一个位置

print(p3,vp=vplayout(2,2))  #图片p3占画布第二行的第二个位置

在这里插入图片描述
通过编写自定义函数,可以实现对图片指定位置摆放

三、ggplot2中的数据变换

        通过上述的介绍,我们可以知道,其实ggplot中图例的出现是由于aes中fill(或者color、shape)的设置。它们均需要指定为一个类别型变量,而实际中数据排列方式通常如左图所示,ggplot2需要的是右图排列样式。

        这种差异导致使用ggplot直接作图十分不便,因此,需要对原数据集进行转变。转变方式在之前博客中有介绍过五分钟学会四种宽数据转长数据的方法,这里再介绍一种新的方法:melt

library(reshape2)
data <- read.table("clipboard",header=T)
new_data <- melt(data,id='date',measure=c("Anhui","Chongqing"))
new_data

在这里插入图片描述
此时,再用ggplot绘图就十分方便啦

windowsFonts(myFont = windowsFont("宋体"))  
windowsFonts(myFont1 = windowsFont("微软雅黑"))  #横纵轴标签样式
ggplot(data=new_data,
       aes(x=date,y=value,color=variable,group=variable))+
       geom_point()+
       geom_line()+
       labs(x="日期",y="确诊人数",title="2020/1/30-2020/2/2日确诊人数(安徽、重庆)")+
       theme(plot.title = element_text(family = "myFont",size=15,hjust=0.5),
             axis.title.x = element_text(family="myFont",size=15,vjust=-0.5),
             axis.title.y = element_text(family="myFont",size=15),
             axis.text.x = element_text(family="myFont1",angle = 90,size=12),
             axis.text.y = element_text(family="myFont1",size=12),
             legend.title=element_blank())

在这里插入图片描述

当然,关于ggplot的学习远不止这些,还有很多细节控制命令,因篇幅限制尚未涉及。有兴趣的朋友可参考R-cookbook。如有错误,还望指出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R语言(一) ggplot2常用绘图命令总结 的相关文章

  • 带有 geom_errorbar 的position_dodge

    我有以下代码 require ggplot2 pd lt position dodge 0 3 ggplot dt aes x Time y OR colour Group geom errorbar aes ymin CI lower y
  • 如何融合颜色和形状?

    当我有一个超过 6 个值的变量时 我的麻烦就开始了 因为这是 ggplot2 中 scale shape 函数的当前最大值 由于这个问题 我尝试使用另一个变量来解决这个问题 我只是将原始变量的长度包裹起来 这是我的示例代码 dataf lt
  • 带有nearPoints()的动态ggplot图层闪亮

    我熟悉闪亮的基础知识 但在这里遇到了一些困难 我希望能够在单击某个点以突出显示该点时添加 ggplot 图层 我知道 ggvis 可以做到这一点 并且画廊中有一个很好的例子 但我希望能够使用nearPoints 捕获点击作为 ui 输入 我
  • 使用自定义渐变填充直方图箱

    我想在 R 和 ggplot2 中创建一个直方图 其中根据连续的 x 值填充箱 大多数教程仅通过离散值或密度 计数进行着色 下列的这个例子 https stackoverflow com questions 40284227 how to
  • 导入错误:无法导入名称“时间戳”

    我使用以下代码在 python 3 6 3 中成功安装了 ggplot conda install c conda forge ggplot 但是当我使用下面的代码将其导入笔记本时 出现错误 from ggplot import Impor
  • 在ggplot中设置y轴中断

    我在代码中设置中断时遇到困难 我尝试添加breaks seq 0 100 by 20 但似乎无法让它正常工作 本质上我希望 Y 轴从 0 到 100 每 20 个刻度一次 YearlyCI lt read table header T te
  • 为什么这个 R ggplot2 代码会显示一个空白的显示设备?

    虽然 SO 通常不用于帮助解决错误 但这个显示了特别简单且特别烦人的行为 如果你是一个ggplot2用户 您可以在 10 秒或更短的时间内重现它 正如这个 GitHub 问题 ggplot gtable 创建空白显示 https githu
  • R 改变构面的顺序

    我正在尝试将方面的顺序从 BA SLG 更改为 SLG BA 我发现了与此类似的问题 但我认为我的解决方案可能不起作用 因为我已经在Excel中汇总了数据 因此 我的数据框可能会有所不同 无论如何 我尝试实现这个但无济于事 df2 lt f
  • 自定义轴缩放后 ggplot2 缺少标签

    我正在尝试使用我的 x 轴应用自定义缩放ggplot2 and scales trans new 但是 当我这样做时 一些轴标签丢失了 有人可以帮我弄清楚为什么吗 Setup library tidyverse the data ds lt
  • R:改变堆积条形图的颜色

    library ggplot2 df2 lt data frame supp rep c VC OJ each 3 dose rep c D0 5 D1 D2 2 len c 6 8 15 33 4 2 10 29 5 head df2 g
  • 如何使用 ggplot2 将 IPCC 点画添加到全球地图

    我需要将 IPCC style 点画添加到全球地图中 如下所示这个帖子 https stackoverflow com questions 11736996 adding stippling to image contour plot 不过
  • ggplot geom_bar - 条形太宽

    对于这个非信息性的标题 我感到很抱歉 gt y read csv textConnection scan sep n what raw org art type length 191 gk Finish short 4 147 ik Att
  • autoplot.microbenchmark 实际绘制了什么?

    根据文档 microbenchmark autoplot 使用 ggplot2 生成更清晰的微基准计时图 凉爽的 让我们尝试一下示例代码 library ggplot2 tm lt microbenchmark rchisq 100 0 r
  • 如何绘制 Voronoi 曲面细分的多边形而不是线段?

    我找到了一种使用 ggplot2 绘制 Voronoi 曲面细分的分段的方法 library deldir library ggplot2 library ggthemes set seed 123 df lt data frame lat
  • 了解日期并使用 R 中的 ggplot2 绘制直方图

    主要问题 当尝试使用 ggplot2 制作直方图时 我无法理解为什么日期 标签和中断的处理无法像我在 R 中预期的那样工作 我在找 我的约会频率的直方图 刻度线位于匹配条下方的中心 日期标签在 Y b format 适当的限制 最小化网格空
  • 从 R 中的函数绘制到文件

    背景 嘿大家 我是 R 的新手 在一位团队成员提供了关于 R 在学术环境中的有用性的教程后 我对使用它产生了兴趣 我正在尝试编写一个脚本来自动从多个文件中读取数据 然后将结果图表绘制到多个文件中 以便可以轻松地将它们添加到手稿中 Power
  • 如何使用 purrr::pmap 在nested.data.frame中绘制多个ggplot

    我对 purrr pmap 在nested data frame中制作多个ggplot图有一些疑问 我可以使用 purrr map2 毫无问题地运行下面的代码 并且可以在nested data frame中制作多重图 2个图 作为示例 我在
  • 反转默认比例梯度ggplot2

    我是新手 我正在尝试设计热图 这是我的代码 ggplot gd aes Qcountry Q6 1 Q6d order TRUE geom tile aes fill prob colour white theme minimal labs
  • 在 for 循环中绘制的多个 ggplot2 绘图的网格

    作为一个新的 ggplot2 用户 我对可能性的数量感到有点迷失 并且很难在网上找到我认为简单问题的简单答案 我想在同一张纸上显示 ggplot2 的多个图 但知道这些图来自 for 循环 以下示例无法编译 仅用于说明 for i in c
  • 在 ggplot 中过滤管道 df

    我正在使用 dplyr 管道来清理我的 df 然后直接输入到 ggplot 中 但是 我只想一次只绘制一组 因此我需要过滤到该组 问题是 我希望比例保持不变 就好像所有群体都存在一样 是否可以在 ggplot 命令中进一步过滤管道 df 例

随机推荐

  • MATLAB中m文件的新建和使用

    MATLAB的m文件 目录 MATLAB的m文件 1 m文件 2 m文件的新建和打开 1 建立matlab的 m文件的3种方式 2 打开MATLAB的 m文件的3种方式 3 m文件的使用 1 命令文件的使用 2 函数文件的使用 1 m文件
  • Docker-镜像复制与重载

    文章目录 1 使用背景 2 保存镜像为文件 3 从文件载入镜像 1 使用背景 我们制作好镜像后 有时需要将镜像复制到另一台服务器使用 能达到以上目的有两种方式 一种是上传镜像到仓库中 本地或公共仓库 但是另一台服务器很肯能只是与当前服务器局
  • 【生成模型】DDPM概率扩散模型(原理+代码)

    前言 一 常见生成模型 二 直观理解Diffusion model 三 形式化解析Diffusion model 四 详解 Diffusion Model 数学推导 1 前向过程 扩散过程 2 逆扩散过程 3 逆扩散条件概率推导 4 训练损
  • QT(C++)-未找到“XXX.h”头文件的解决方式

    新建项目之后 不能在项目的头文件上立马调用include xxx h 你必须点击左上角文件 新建一个你想引用的头文件 这样你就能引用了 不会报错 你想要引用的头文件必须得在你的工作目录下 错误提示如下 解决方式如下图 以下是我的工程工作路径
  • git push 报错: error: failed to push some refs to ‘ssh://git.prmt.net:10007/root/palmhall.git‘

    git push 报错error failed to push some refs to ssh git prmt net 10007 root palmhall git 原因 这是因为当前账号没有权限 联系管理员给你开放权限就行了
  • redis安全攻防(专注渗透视角)

    目录 介绍 前言 Redis简介 1 Redis默认端口 2 官方站点 Redis环境安装 1 redis定义 2 未授权访问原因 3 redis服务的搭建 4 修改配置文件redis conf 5 连接Redis 1 Redis未授权访问
  • Eclipse 转 IDEA 改的 8 条配置

    Eclipse 转 IDEA 一定要改的配置 引言 坦白说 我很少写这种操作类型的文章 因为这种文章没啥新意 大家操作步骤肯定是一样的 然而 我答应了我的同事小阳 给她出一篇 毕竟人家打算从Eclipse转IDEA了 于是以示鼓励 写一篇给
  • win10环境android反编译apk

    我发现我想整点啥啊 从网上搜教程 一个教程永远不能成功 感谢以下所有教程 android反编译apk 首先我找到的是这个教程 https blog csdn net qq 31939617 article details 124610655
  • 逆变器方案(高频/工频)正弦波逆变器驱动板,兼容EG8010主芯片的EGS002驱动板,单极性交替驱动,解决单边发热需要全波整流采样

    逆变器方案 高频 工频 正弦波逆变器驱动板 兼容EG8010主芯片的EGS002驱动板 单极性交替驱动 解决单边发热需要全波整流采样 两个半桥能量不均匀导致的性能不稳定 可选单极性基波调制 兼容高频机峰值单线分压采样 不用更改任何电路 此驱
  • nodejs中创建web服务,监听本地IP

    nodejs官网例子 var http require http http createServer function req res res writeHead 200 Content Type text plain res end He
  • android 错误 exported needs to be explicitly specified for Apps targeting Android 12

    问题描述 android 错误 android exported needs to be explicitly specified for Apps targeting Android 12 问题原因 由于项目的编译版本compileSdk
  • java中String、StringBuffer和StringBuilder的区别

    java中String StringBuffer和StringBuilder的区别 java中用于处理字符串常用的有三个类 java lang String java lang StringBuffer java lang StrungBu
  • vs2017试用期满后的处理

    vs2017是免费社区 但是第一次试用的时候没有登录账户 提示试用期满不能进行操作 现在根据查到的方法 在微软账户注册 注册后把浏览器关闭 很必要 然后再在vs中登录就会激活了 可以放心的使用 ps 也有的说需要要卸载后在安装的 发现并不必
  • Hugging face教程-使用速查表-快速入门

    Hugging face笔记 course url https huggingface co course chapter5 8 fw pt 函数详细情况 https huggingface co docs transformers mai
  • 使用python的pyecharts库绘制多选项卡折线图示例

    使用python的pyecharts库绘制多选项卡折线图示例 pyecharts介绍 环境 安装环境 条形图 折线图 多选项卡折线图 参考 pyecharts介绍 Pyecharts是一个用于生成Echarts图表的类库 可以与Python
  • 虚拟机可以ping通外网,但xshell无法远程连接的解决办法

    刚开始学习大数据 linux需要配三个节点 但是静态IP设置之后发现xshell无法连接 关闭防火墙啥的都没用 无奈之时突然想起自己当时瞎搞过这个VMware8虚拟网卡的ip地址 我把这个的ipv4的地址自己设置了 于是猜想是不是这个问题
  • Android 组件

    TextView 文本框 用于显示文本的一个控件 文本的字体尺寸单位为 sp sp scaled pixels 放大像素 主要用于字体显示 文本常用属性 属性名 说明 id 为TextView设置一个组件id 根据id 我们可以在Java代
  • 通过pip安装pytorch超时问题解决

    前言 这篇文章只记录通过pip安装pytorch超时问题的解决方案 默认阅读者已经安装了Python2 7或者其他3 x的版本 版本信息 系统 macos 11 1 pip 21 0 1 python 3 8 解决方案 第一步 去官网查询合
  • Docker之nacos集群部署(详细教你搭建)

    目录 一 mysql安装与基本操作 一 mysql安装 1 拉取mysql镜像 2 定义挂载目录 3 配置my cnf my ini 4 开启mysql容器 5 用navicat连接工具连接远程端口 6 nacos数据库配置 创建一个nac
  • R语言(一) ggplot2常用绘图命令总结

    提到R语言 总会想到它强大的绘图包ggplot2 甚至于其他语言中也有它的痕迹 例如 python中的matplotlib模块就有ggplot样式 以下 总结了一些日常绘图中常用的命令 目录 一 基本绘图 二 精雕细琢 1 添加标题 横纵轴