Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在水平轴散射图(Ggplot2)中为每个类别添加两条线

在水平轴散射图(Ggplot2)中为每个类别添加两条线
EN

Stack Overflow用户
提问于 2015-11-29 13:00:22
回答 1查看 859关注 0票数 1

我有这个数据集:

代码语言:javascript
运行
AI代码解释
复制
workdataset <- data.frame(dadedu=rep(c("ISCED 1 & 2", "ISCED 3 & 4", "ISCED 5 & 6"),each=2),
                          socialorigin=rep(c(1,0),times=3),
                          Level = rep(c("Below ISCED 1", "ISCED 1", "ISCED 2", "ISCED 3", "ISCED 4","ISCED 5", "ISCED 6"), each=6),
                          Prob = rnorm(42))

我制作了这个情节:

代码语言:javascript
运行
AI代码解释
复制
ggplot(workdataset, aes(x = Level, y = Prob, colour = dadedu)) +
        geom_point(aes(group=dadedu, size=0.2)) + geom_line()

正如您在水平轴的每个类别中所看到的,有两个颜色相同的点通过一条线连接起来。不是这样的,我试着为每个类别有两条线,例如,两个红色点都与一条线相连,其他颜色也是如此。然后,用不同形状的点来区分类别中的两条线。

我一直在玩facet_grid,但我仍然不太熟悉ggplot2,而且我似乎无法理解它。

任何帮助都是非常感谢的。

谢谢,

编辑:对不起,我没有正确解释自己,但我会再试一次。因此,正如您在图中所看到的,水平轴中有几个类别( ISCED 1,ISCED 2,等等)。对于每个类别,现在有一个垂直线包含6个点(2个红色,2个绿色和2个蓝色)。1红色属于社会出身=1,另一红色等于社会本源= 0。我想要的不是一条6点的垂直线,而是两条每条3点的垂直线。一条垂直线是socialorigin=1,另一条是socialorigin=0,然后用一条线把垂直线1上的红点和垂直线2上的红点连接起来,以此类推。它适用于横轴中的所有类别( ISCED 1、ISCED 2等)。如果这还不清楚,我将尝试显示一个图像,以模仿我想要的。

希望这能让事情更清楚。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-29 13:23:48

编辑:我想就是这个?这需要一些黑客的工作,因为我们是用一条线连接躲避点。首先,让我们构建基本的地块:

代码语言:javascript
运行
AI代码解释
复制
p <- ggplot(workdataset, aes(x = Level, y = Prob, group = socialorigin, colour = dadedu)) + 
         geom_point(aes(shape = dadedu), position = position_dodge(width = 0.50))

现在,我们希望使用ggplot_build来获取数据:

代码语言:javascript
运行
AI代码解释
复制
newdat <- ggplot_build(p)$data[[1]]

newdat现在是x和y,组和颜色为我们的情节。我们需要根据形状、颜色和x的组合(这里由于躲避而四舍五入)获得一个新的var来分组:

代码语言:javascript
运行
AI代码解释
复制
newdat$group2 <- paste0(newdat$shape, newdat$colour, round(newdat$xmin))

然后把它添加到情节中:

代码语言:javascript
运行
AI代码解释
复制
p + geom_line(data = newdat,aes(x,y, group = group2), colour = newdat$colour)

先前的答覆如下:

我认为您需要为socialorigindadedu的组合创建一个新变量

代码语言:javascript
运行
AI代码解释
复制
workdataset$comb <- paste0(workdataset$dadedu, workdataset$socialorigin)

然后,我们可以使用它对线条进行分组,并使用socialorigin生成点形状:

代码语言:javascript
运行
AI代码解释
复制
library(ggplot2)
ggplot(workdataset, aes(x = Level, y = Prob, colour = dadedu)) +
    geom_point(aes(shape = factor(socialorigin)), size = 3) +
    geom_line(aes(group = comb))

这意味着:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33988071

复制
相关文章
全局作用域、函数作用域、块级作用域的理解
ES6中新增的概念,在ES5中是没有的,ES5中没有? 没有的时候我们代码也写的好好的,现在新增的概念,我不用不行吗? 来,拋一个典型的问题出来,你就明白块级作用域出现的重要性了。
yuezhongbao
2019/02/26
3.2K0
全局作用域、函数作用域、块级作用域的理解
作用域与作用域链
通常来说,一段程序代码中所用到的名字并不总是有效或可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域scope。当一个方法或成员被声明,他就拥有当前的执行上下文context环境。在有具体值的context中,表达式是可见也都能够被引用。如果一个变量或者其他表达式不在当前的作用域,则将无法使用。作用域也可以根据代码层次分层,以便子作用域可以访问父作用域,通常是指沿着链式的作用域链查找,而不能从父作用域引用子作用域中的变量和引用。
WindRunnerMax
2020/08/27
2K0
java作用域-什么是JavaScript作用域、作用域链?
作用域、作用域链也是面试中出镜率很高的问题之一java作用域java作用域,同时也是中最重要的基础概念之一。
宜轩
2022/12/29
2K0
作用域和作用域链的简单理解
javascript采用的静态作用域,也可以称为词法作用域,意思是说作用域是在定义的时候就创建了, 而不是运行的时候。此话对于初学者很不好理解,看看下面这个例子:
ZEHAN
2020/09/23
8510
作用域和作用域链的简单理解
JavaScript中的作用域和作用域链
作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。可能这两句话并不好理解,我们先来看个例子:
刘亦枫
2020/03/19
2.3K0
JavaScript中的作用域和作用域链
Rust中的作用域及作用域的规则
所有权是 Rust 最独特的特性,它使 Rust 能够在不需要 GC 的情况下保证内存安全。在本章中,我们将讨论所有权以及几个相关特性:借用/切片,以及 Rust 如何在内存中布局数据。
端碗吹水
2022/06/02
4K1
Rust中的作用域及作用域的规则
作用域及作用域链的解释说明
javascript中作用域是指变量与函数可访问的范围。作用域分为两类,一种是全局作用域,一种是局部作用域。全局变量拥有全局作用域,在JavaScript代码中的任何地方都有定义。局部变量是在函数体内声明而且只作用在函数体内部以及该函数体的子函数的变量。下面我们对全局作用域和局部作用域来做一个深入的理解。
OECOM
2020/07/02
1.2K0
作用域及作用域链的解释说明
静态作用域和动态作用域
所谓作用域规则就是程序解析名字的方法。如果一个变量的名称不在当前作用域内,则这样的变量称为 unbound variable,例如有一个函数 (lambda () (+ a a)),a 就是一个 unbound variable,在当前作用域内我们无法找到这个变量。那么调用这个函数的求值结果是什么呢?显然要根据 context 来确定,对于 unbound variables 的解析,从解析的时机来划分,有两种规则,一种是「静态作用域」(Static Scope)也被称为「词法作用域」(Lexical Scope),另一种是「动态作用域」(Dynamic Scope)1。
zhiruili
2021/08/10
2.2K0
JS作用域和作用域链
全局变量的作用域是全局性的,即在JavaScript代码中,该全局变量处处都有定义。
前端_AWhile
2019/08/29
4.3K0
JS作用域和作用域链
作用域、执行环境、作用域链
作用域,之前有介绍过,JavaScript无块级作用域,只有函数作用域,简单点说就是JavaScript的作用域就是函数作用域。因为有函数作用域,所以我们有全局作用域和局部作用域的说法。
wade
2020/04/23
1.6K0
JavaScript作用域及作用域链
作用域 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。 JavaScript 采用词法作用域(lexical scoping),也就是静态作用域。 因为 JavaScript 采用的是词法作用域,函数的作用域在函数定义的时候就决定了。 而与词法作用域相对的是动态作用域,函数的作用域是在函数调用的时候才决定的。
青梅煮码
2023/03/02
1.6K0
JavaScript 作用域和作用域链
作用域就是变量与函数的可访问范围。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。
零式的天空
2022/03/02
1.8K0
函数作用域和块作用域
正如上一章讨论,作用域包含了一系列的“气泡”,每一个都可以作为容器,其中包含了标识符(变量、函数)的定义,这些气泡互相嵌套并且整齐地排列成蜂窝型,排列的结构是在写代码时定义的。
Karl Du
2020/10/23
2.5K0
java作用域-javaScript预编译、作用域,作用域链详解
  ES5中只分为全局作用域和函数作用域java作用域,也就是说for,if,while等语句是不会创建作用域的。ES6(let,const)除外。
宜轩
2022/12/29
1.5K0
四、作用域与作用域链
作用域与作用域链本应该是一个非常简单的概念。可是在近两年多的留言中,我发现这些概念反而成为了大多数人想不明白的点,而感到困惑的原因在于,别的文章里,常常会提到词法作用域,词法分析等概念,到底是什么东西?好像跟我说的有一点不一样,但又不知道哪里不对?
用户6901603
2020/07/25
1.6K0
JS作用域与作用域链
作用域就是一个独立的地盘,让变量不会外泄、暴露出去。也就是说作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。
剁椒鱼鳞
2023/05/30
1.7K0
JS作用域与作用域链
JS基础——作用域、作用域链
作用域 [[scope]],函数定义时自动生成的一个隐式属性,是用来存储函数作用域链 Scope Chain的容器。作用域链是用来存储函数执行上下文 AO和全局执行上下文 GO的容器。 函数被定义时,系统会为函数生成[[scope]],[[scope]]中保存该函数的作用域链,并从该作用域链的起始位置开始存储当前环境的作用域链。 函数被定义后&将要执行前会生成函数本身的AO,并将其插入作用域链的起始位置。 函数执行完毕,相应AO也会被销毁,等待下次执行时重新生成AO,如果函数内部嵌有其他
玖柒的小窝
2021/10/22
3.6K0
JS基础——作用域、作用域链
作用域
标识符的作用域有函数原型作用域、局部作用域(块作用域)、类作用域和 命名空间(namespace) 作用域
小飞侠xp
2022/05/13
9320
作用域
通常来说,一段程序代码中所用到的名字(变量名)并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
星辰_大海
2020/09/30
6630
作用域
实际上,确切地说,private访问权限被限定在class的内部,而且与方法声明顺序无关。推荐把private方法放到后面,因为public方法定义了类对外提供的功能,阅读代码的时候,应该先关注public方法:
背雷管的小青年
2020/07/08
5150

相似问题

最小不动点最大不动点

11

如何用两个补不动点加不动点?

10

Django模型:创建小值不动点

13

类型不动点

13

不动点迭代

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档