首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何创建要使用ggplot渲染的绘图列表?

如何创建要使用ggplot渲染的绘图列表?
EN

Stack Overflow用户
提问于 2021-08-03 00:33:39
回答 2查看 51关注 0票数 0

我正在尝试构建一个ggplot图形列表,稍后将绘制该列表。到目前为止,我以Anscombe的四重奏为例,是:

代码语言:javascript
运行
AI代码解释
复制
library(ggplot2)
library(gridExtra)
base <- ggplot() + xlim(4,19)
plots = vector(mode = "list", length = 4)
for(i in 1:4) {
  x <- anscombe[,i]
  y <- anscombe[,i+4]
  p <- geom_point(aes(x,y),colour="blue")
  q <- geom_smooth(aes(x,y),method="lm",colour="red",fullrange=T)
  plots[[i]] <- base+p+q
}
grid.arrange(grobs = plots,ncol=2)

当我遍历循环时,我希望将图p和q的当前值与基本图相加到列表的第i个值中。也就是说,列表元素编号i包含与数据集中第i个x和y列相关的图。

然而,发生的情况是最后一个图只被绘制了四次。我用base R做了一些非常类似的事情,使用了mfrowplotabline,所以我相信我的逻辑是正确的,但我的实现不正确。我怀疑问题出在下面这几行代码上:

代码语言:javascript
运行
AI代码解释
复制
plots = vector(mode = "list", length = 4)
plots[[i]] <- base+p+q

如何创建一个ggplot图形列表;从一个空列表开始?

(如果这是一个琐碎而愚蠢的问题,我道歉。我对R和图形语法都是新手。)

EN

回答 2

Stack Overflow用户

发布于 2021-08-03 00:43:07

如果使用lapply()而不是for循环,则代码可以正常工作。

代码语言:javascript
运行
AI代码解释
复制
plots <- lapply(1:4, function(i) { 
  # create plot number i
})

这个问题的原因是ggplot使用了惰性计算。在渲染绘图时,循环已经迭代到i=4,最后一个绘图将显示四次。

完整的工作示例:

代码语言:javascript
运行
AI代码解释
复制
library(ggplot2)
library(gridExtra)
base <- ggplot() + xlim(4,19)
plots <- lapply(1:4, function(i) {
  x <- anscombe[,i]
  y <- anscombe[,i+4]
  p <- geom_point(aes(x,y),colour="blue")
  q <- geom_smooth(aes(x,y),method="lm",colour="red",fullrange=T)
  base+p+q
})
grid.arrange(grobs = plots,ncol=2)
票数 1
EN

Stack Overflow用户

发布于 2021-08-03 01:12:37

要强制求值,有一个简单的解决方案,将aes(...)更改为aes_(...),您的代码就可以正常工作。

代码语言:javascript
运行
AI代码解释
复制
library(ggplot2)
library(gridExtra)
base <- ggplot() + xlim(4,19)
plots <- lapply(1:4, function(i) {
  x <- anscombe[,i]
  y <- anscombe[,i+4]
  p <- geom_point(aes_(x,y),colour="blue")
  q <- geom_smooth(aes_(x,y),method="lm",colour="red",fullrange=T)
  base+p+q
})
grid.arrange(grobs = plots,ncol=2)

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

https://stackoverflow.com/questions/68632779

复制
相关文章
创建动态库时,建议使用的链接选项Bsymbolic
回归正题,前段时间项目开发中,实现了一个动态库,封装了一些方法。然后基于这个动态库,实现了一个应用程序。应用程序中含有全局变量A,动态库中也含有全局变量A,当我调用动态库中函数后,发现应用程序的A发生了变化!!!O,My God!对于我这种还没在Linux下做过开发的人来说,一头雾水。。。。。。 于是我尝试着,将A中的变量名称改为B,这样问题也就没有了~~~
河边一枝柳
2021/08/06
1.7K0
select动态绑定vue.js
<select v-model="selected"> <option v-for="option in options" v-bind:value="option.value"> {{ option.text }} </option> </select> <span>Selected: {{ selected }}</span>  只要保证data里面有个options,options里有value就行了。
ydymz
2018/09/10
6.3K0
Java中的静态绑定和动态绑定
一个Java程序的执行要经过编译和执行(解释)这两个步骤,同时Java又是面向对象的编程语言。当子类和父类存在同一个方法,子类重写了父类的 方法,程序在运行时调用方法是调用父类的方法还是子类的重写方法呢,这应该是我们在初学Java时遇到的问题。这里首先我们将确定这种调用何种方法实现或 者变量的操作叫做绑定。
哲洛不闹
2018/09/19
2.1K0
Java中的静态绑定和动态绑定
一个Java程序的执行要经过编译和执行(解释)这两个步骤,同时Java又是面向对象的编程语言。当子类和父类存在同一个方法,子类重写了父类的方法,程序在运行时调用方法是调用父类的方法还是子类的重写方法呢,这应该是我们在初学Java时遇到的问题。这里首先我们将确定这种调用何种方法实现或者变量的操作叫做绑定。
技术小黑屋
2018/09/05
1.8K0
Java中的静态绑定和动态绑定
一个Java程序的执行要经过编译和执行(解释)这两个步骤,同时Java又是面向对象的编程语言。当子类和父类存在同一个方法,子类重写了父类的 方法,程序在运行时调用方法是调用父类的方法还是子类的重写方法呢,这应该是我们在初学Java时遇到的问题。这里首先我们将确定这种调用何种方法实现或 者变量的操作叫做绑定。
哲洛不闹
2018/09/19
1.6K0
Java中的静态绑定与动态绑定
由上面我们可以得出结论,如果一个方法不可被继承或者继承后不可被覆盖,那么这个方法就采用的静态绑定。
俺也想起舞
2019/07/24
1.6K0
小程序中监听textarea或者input输入的值动态改变data中数组的对象的值
小程序中监听textarea或者input输入的值动态改变data中数组的对象的值,不能通过setData设置数组对应索引的对象的值来改变,改变之后,能检测到改变,但是值为空。先通过赋值改变其中数组中的对象的值,然后重新设置数组。
用户4792944
2019/04/20
5.6K0
js:如何获取select选中的值
<select id=”select”> <option value=”A” url=”http://www.baidu.com”>第一个option</option> <option value=”B” url=”http://www.qq.com”>第二个option</option> </select> 一:JavaScript原生的方法
全栈程序员站长
2022/11/04
27.1K0
小程序中监听textarea或者input输入的值动态改变data中数组的对象的值
小程序中监听textarea或者input输入的值动态改变data中数组的对象的值,不能通过setData设置数组对应索引的对象的值来改变,改变之后,能检测到改变,但是值为空。先通过赋值改变其中数组中的对象的值,然后重新设置数组。
蓓蕾心晴
2018/07/24
4.5K0
Gas 优化:Solidity 中的使用动态值数组
在 Datona 实验室的 Solidity 智能数据访问合约(S-DAC)模板的开发和测试过程中,我们经常需要处理一些像用户ID这样数据小但未知长度的数据。理想情况下,这些数据存储在一个小数值的动态值数组中。
Tiny熊
2021/12/13
3.4K0
问与答124:如何根据输入值进行动态筛选?
Q:我想在工作表中应用动态筛选,当我在文本框中输入时,Excel会根据我输入的数据动态显示工作表中与输入值相匹配的数据,如何实现?
fanjy
2021/05/07
2.1K0
Python动态绑定属性slots的使用
当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。废话不多说,我们看一个例子:
py3study
2020/01/17
1.7K0
如何动态绑定样式
这个是我想要的页面效果,每个卡片的背景颜色都不一样 image.png 第一次需要动态绑定颜色,发现怎么写都不对。。。众大佬支招终于解决了~ 当遍历出来的每个项都需要不同的样式的时候,按照以下这个格式套进去就可以了 :style = "{'background-color':item.bgc}" image.png 如果样式绑定在遍历的每个项中,也可以通过插槽的方式获取到当行的样式 image.png
xyzzz
2020/11/25
2.2K0
如何动态绑定样式
python中属性和方法的动态绑定
# 定义一个类 class Student(object):     pass # 实例化一个对象     s = Student() # 给这个对象绑定一个属性name s.name = 'John' print(s.name) John # 定义一个方法 def set_age(self, age):     self.age = age # 导入模块     from types import MethodType #给s这个对象绑定一个set_age的方法 s.set_age = Meth
py3study
2020/01/13
1.7K0
Java中的静态绑定与动态绑定的区别,讲明白了
在静态绑定中,绑定可以在运行时或编译时解析。所有static,final和private方法的绑定过程都在编译时完成。
用户1289394
2019/03/08
1.9K0
Java中的静态绑定与动态绑定的区别,讲明白了
element的select控制输入格式
<el-select v-model="formList[0].value" filterable allow-create placeholder="请输入内容" @focus="dropDownInformation(formList[0].name)" @input.nativ
肥晨
2023/02/17
1.5K0
element的select控制输入格式
关于WebDriver中下拉框选项操作 ---- >>Select类的使用:
在UI测试的过程中,我们经常会遇到对下拉框的处理, 笔者在日常的维护中, 对下拉框的处理的太多, 各种好定位的不好定位的, 这里可以分享两种定位方法:
呆呆
2021/05/18
1.2K0
如何对动态创建控件进行验证以及在Ajax环境中的使用
首先给一个常规的动态创建控件,并进行验证的代码 [前端aspx代码] <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htm
菩提树下的杨过
2018/01/22
7.9K0
静态绑定和动态绑定的介绍?
动态类型:当前对象所指的类型,在运行期决定,对象的动态类型可变,静态类型无法更改。
kdyonly
2023/03/03
2.1K0
vue+elementUI中select怎么绑定对象
4、是不是一定要用id呢,推荐这么用,但是你非要用别的也可以,但是要和对象中的数据对应就可以,比如你的value-key=“label” 那么你的label就一定要存在且对应! 以后还有什么问题的话,就私信问我就好了!看到了问题不大就回答了,问题比较频繁的就直接写一篇文章说明!收工
何处锦绣不灰堆
2021/04/09
2.4K0
vue+elementUI中select怎么绑定对象

相似问题

如何绑定svelte动态组件值

14

如何在Svelte中动态定义“值”绑定?

24

如何在Svelte中绑定子组件的输入值?

13

如何使用选项填充动态创建的select

236

如何绑定html select选项中的值?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文