我的编程空间,编程开发者的网络收藏夹
学习永远不晚

R语言中ggplot2绘制双坐标轴图

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

R语言中ggplot2绘制双坐标轴图

R包ggplot2绘图精美,可以做出很复杂的图形,深受用户喜爱。它的作者hadley并不推荐使用ggplot2绘制双坐标轴图,认为这样会增加读图的难度,但是目前需要双坐标轴图应用的场景还是很多,如下图形直方图和曲线分别有不同的坐标轴,表示不同的意思,图片展示内容比较丰富

在这里插入图片描述

在这里插入图片描述

今天我们通过我们的汽车销售数据(公众号回复:汽车销售,可以获得数据)来演示一下ggplot2绘制双坐标轴图,主要是通过sec.axis函数进行转换,进行第二个坐标轴的转换。我们先来导入数据

library(foreign)
library(ggplot2)
library(plyr)
bc <- read.spss("E:/r/test/tree_car.sav",
                use.value.labels=F, to.data.frame=T)

在这里插入图片描述

我们来看下数据,car就是汽车售价,age是年龄,gender是性别,inccat是收入,这里分成4个等级,ed是教育程度。
我们用这个数据生成两个子数据,展示不同教育程度人群购车的区别,继续使用原来的summarySE函数生成数据,想了解这个函数的看《R语言绘制带误差和可信区间的折线图》这篇文章,主要是利用这个函数生成不同类型的数据分析指标,函数的代码如下:

summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE,
                      conf.interval=.95, .drop=TRUE) {
  library(plyr)
  
  # New version of length which can handle NA's: if na.rm==T, don't count them
  length2 <- function (x, na.rm=FALSE) {
    if (na.rm) sum(!is.na(x))
    else       length(x)
  }
  
  # This does the summary. For each group's data frame, return a vector with
  # N, mean, and sd
  datac <- ddply(data, groupvars, .drop=.drop,
                 .fun = function(xx, col) {
                   c(N    = length2(xx[[col]], na.rm=na.rm),
                     mean = mean   (xx[[col]], na.rm=na.rm),
                     sd   = sd     (xx[[col]], na.rm=na.rm)
                   )
                 },
                 measurevar
  )
  
  # Rename the "mean" column    
  datac <- rename(datac, c("mean" = measurevar))
  
  datac$se <- datac$sd / sqrt(datac$N)  # Calculate standard error of the mean
  
  # Confidence interval multiplier for standard error
  # Calculate t-statistic for confidence interval: 
  # e.g., if conf.interval is .95, use .975 (above/below), and use df=N-1
  ciMult <- qt(conf.interval/2 + .5, datac$N-1)
  datac$ci <- datac$se * ciMult
  
  return(datac)
}

这个函数并不是今天的主要内容,主要是看我们生成的数据

carss<- summarySE(bc, measurevar="car", groupvars=c("gender","ed"))
carss1<- summarySE(bc, measurevar="car", groupvars=c("inccat","ed"))

我们来看看生成的两个数据

Carss

在这里插入图片描述

carss1

在这里插入图片描述

carss1和carss都有ed这个数据,carss1的数据比carss多,carss1有inccat这个指标carss没有
我们先画一个carss数据的教育和汽车售价的直方图

ggplot() +
  geom_col( data = carss,aes(x = ed,y = car),fill="#6794a7")

在这里插入图片描述

上图展示了不同教育程度买车的情况,假设我们想把carss1这个数据的inccat和ci这个指标映射进上图中(不管临床意义,只是展示数据映射),我们可以看到ci这个指标很小0-5这样,而汽车这个指标的范围是0-80,不能通过同一坐标轴展示,所以只能通过分轴展示。主要是通过rescale函数先把ci这个指标在在0-80区间进行标准化转换,然后在投射于右坐标轴。
先把inccat转换成因子

carss1$inccat<-as.factor(carss1$inccat)

绘图

ggplot() +
  geom_col( data = carss,aes(x = ed,y = car),fill="#6794a7")+
  geom_line(data = carss1,aes(x = ed,y = rescale(ci,c(0,80)),colour=inccat,group=inccat),size=1.5) +
  geom_point(data = carss1,aes(x = ed,y = rescale(ci,c(0,80))),shape=21,fill="white",size=4)+
  scale_y_continuous(breaks=pretty_breaks(4),
                     sec.axis = sec_axis( ~rescale(.,c(0,5)),name = "ci",labels=sprintf('%.5f',(0:5))))

在这里插入图片描述

图形左轴表示直方图中购车情况,右轴表示不同收入人群的ci情况,把图形进一步美化一下

ggplot() +
  geom_col( data = carss,aes(x = ed,y = car),fill="#6794a7")+
  geom_line(data = carss1,aes(x = ed,y = rescale(ci,c(0,80)),colour=inccat,group=inccat),size=1.5) +
  geom_point(data = carss1,aes(x = ed,y = rescale(ci,c(0,80))),shape=21,fill="white",size=4)+
  scale_y_continuous(breaks=pretty_breaks(4),
                     sec.axis = sec_axis( ~rescale(.,c(0,5)),name = "ci",labels=sprintf('%.5f',(0:5))))+
  labs(title="This is a Title!",subtitle="This is a Subtitle",caption="This is a Caption")+
  theme_minimal(base_size=16) %+replace% 
  theme(
    plot.caption = element_text(hjust=0),
    plot.margin = unit(c(1,0.5,1,0.5), "lines")
  )

在这里插入图片描述

参考文献

ggplot2:数据分析与图形艺术

ggplot2双坐标轴的解决方案 杜雨 https://zhuanlan.zhihu.com/p/31872309

到此这篇关于R语言中ggplot2绘制双坐标轴图的文章就介绍到这了,更多相关R语言 ggplot2双坐标轴图内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

R语言中ggplot2绘制双坐标轴图

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

R语言中ggplot2绘制双坐标轴图

本文主要介绍了R语言中ggplot2绘制双坐标轴图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-11-13

R语言绘制双坐标图的案例详解

这篇文章主要介绍了R语言绘制双坐标图,下面就跟大家介绍plotrix包中的twoord.plot()函数和twoord.stackplot()函数,它们可以实现双坐标轴图形的绘制,需要的朋友可以参考下
2023-01-07

使用R语言怎么绘制双坐标图直方图

这期内容当中小编将会给大家带来有关使用R语言怎么绘制双坐标图直方图,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是R语言R语言是用于统计分析、绘图的语言和操作环境,属于GNU系统的一个自由、免费、源代
2023-06-14

R语言中ggplot2如何绘制统计图形

小编给大家分享一下R语言中ggplot2如何绘制统计图形,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ggplot2是什么?一句话概括:它是一个用来绘制统计图形(
2023-06-25

R语言中怎么用ggplot2绘制qq图和boxplot图

要使用ggplot2绘制qq图和boxplot图,首先需要加载ggplot2库。然后,根据数据集的特点选择合适的函数来创建相应的图。绘制qq图可以使用ggplot2库中的geom_qq()函数,它需要提供一个数据集和一个变量。以下是一个示
2023-10-24

使用R语言怎么绘制坐标

使用R语言怎么绘制坐标?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。绘制坐标有时候我们绘制坐标的时候,需要改变坐标轴的定义,我们以日期为横坐标绘制时间序列为例讲解先列举简单的例
2023-06-14

在R语言底层作图中如何设置坐标轴

这篇文章给大家分享的是有关在R语言底层作图中如何设置坐标轴的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。要绘制一张赏心悦目的统计图表,坐标轴的设置至关重要。在R语言底层作图中,对坐标轴的调整主要通过调整plot函
2023-06-08

R语言怎么利用ggplot2绘制QQ图和箱线图

这篇文章主要介绍了R语言怎么利用ggplot2绘制QQ图和箱线图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇R语言怎么利用ggplot2绘制QQ图和箱线图文章都会有所收获,下面我们一起来看看吧。绘制qq图在g
2023-07-02

怎么在R语言中使用ggplot2绘制分组散点图

这篇文章将为大家详细讲解有关怎么在R语言中使用ggplot2绘制分组散点图,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 首先载入ggplot2包,library(ggplot2)2.
2023-06-14

R语言可视化ggplot2怎么绘制24小时动态血糖图

这篇文章主要介绍“R语言可视化ggplot2怎么绘制24小时动态血糖图”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“R语言可视化ggplot2怎么绘制24小时动态血糖图”文章能帮助大家解决问题。数据
2023-06-30

r语言中怎么绘制散点图

在R语言中,可以使用plot()函数来绘制散点图。下面是一个简单的例子:# 创建数据集x <- c(1, 2, 3, 4, 5)y <- c(2, 3, 5, 7, 6)# 绘制散点图plot(x, y, main="Scatter
r语言中怎么绘制散点图
2024-03-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录