ggplot里的各种mapping
来源:互联网 发布:adobe pdf reader mac 编辑:程序博客网 时间:2024/06/15 03:10
又有新任务= = 发现ggplot的mapping 不仅有 aes 一个函数,还有很多方便使用的变式,跟大家分享下。今天来不及把图片保存,下次有空补上~
男友想做下面这件事,用一个 for 循坏,每次对 ggplot 加一条线,最后打印。
library(ggplot2)v <- c("wt", "disp")p <- ggplot(mtcars)for(i in 1:2){ p <- p + geom_line(aes(x = mpg, y = mtcars[[v[i]]]))}print(p)
可是,结果却无论如何只打出了一条线。不解。研究了很久,发现ggplot 画图看起来好像是按顺序叠加,但其实本质上叠加过程只发生在定义,实际绘图的时候是同时的!而且上述方法不能成功的本质是,ggplot 把 mtcars[[v[i]]]
这个东东,注意带有 i 赋值给了y,并没有把具体的对应那列赋值(至于为什么要两个中括号,大家可以思考一下),所以只会按照最后的i(=2) 绘图。
那怎么解决呢?我很神奇的发现了 aes_string
这个函数,可以用字符串来代替本来写在 aes 里面的变量名。
p <- ggplot(mtcars)for(i in 1:2){ p <- p + geom_line(aes_string(x = "mpg", y = v[i], colour = quote(v[i])))}print(p)
这样就可以画出两条线啦,当然标记颜色的时候又遇到了刚刚的问题,就是颜色的赋值是v[i],而非具体的值,所以两条线只有一种颜色。(大家可能会想,为什么要加 quote 呀,如果不加的话,相当于用某变量的值来标记颜色)
最后,我又很神奇的发现了 aes_
这个函数,不得不感叹ggplot 真是博大精深。
p <- ggplot(mtcars)for(i in 1:2){ p <- p + geom_line(aes_(x = ~mpg, y = as.name(v[i]), colour = v[i]))}print(p)
在 aes_ 里面,~和quote 的作用是一样的,而as.name 把字符串转成了名字(其实不是非常理解)。具体等价例子参见 http://docs.ggplot2.org/current/aes_.html 而且ggplot2 index 真的很方便,查起来一目了然~
0 0
- ggplot里的各种mapping
- xfire 里的集合Mapping
- ggplot的使用
- ggplot
- hibernate-mapping的各种属性配置
- hibernate-mapping的各种属性配置
- hibernate-mapping的各种属性配置
- python的ggplot库实例
- 转载 很好的ggplot文章
- ggplot 的 legend 是一门学问
- JAVA里的各种包
- cocos2d里的各种动作
- cocos2d里的各种动作
- shell里的各种括号
- JS里的各种检测
- web.xml里filter-mapping中的dispatcher的用途
- 关于servlet-mapping里的url-pattern说明
- web.xml:<filter-mapping>里的dispatcher:404错误
- OpenCV 打开摄像头并短暂延时后获取一张图片
- C++11中的std::function
- hdu1052
- C++赋值运算符谨记
- CentOS下二进制安装MySQL
- ggplot里的各种mapping
- ssh整合中遇到的问题及解决记录
- AWS Boto3 使用介绍(一)
- Filter、Filter Chain的实现
- IO流_File类的获取功能
- JavaScript定时器基础二
- 处理器(比如Intel)如何实现原子操作?
- 看过的觉得好的TED演讲(Update@0521)
- Android开发之Manifest.xml