使用ggplot2绘制心形
林筱越:华东政法大学 社会学专业 R语言爱好者
由于最近在学习Hadley大神的《R for data science》和Winston Chang的《R graphics cookbook》,并且受到傅兴[R图秀:情人节快乐]的启发并且想检验一下自己学习的成果,所以就打算给gf用ggplot2包画了爱心(因为忘记买礼物了!
绘制思路:
总体而言思路还是比较简单的,主要为以下部分:
绘制心形:主要通过函数来构建(本人文科生……所以只能寻求google和百度帮助了);当然最后还是参考了统计之都一篇文章的步骤: (https://cosx.org/2012/02/valentines-gift-by-using-r)
心形上色并添加想要说的话的文本
删除多余的图像元素:网格线、背景、边框等
准备工作
#加载包
library(tidyverse) # 或者使用'ggplot2'包也是可以的
#设定数据集
t = seq(0, 2 * pi, by = 0.1)
x = 16 * sin(t)^3
y = 13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t)
a = (x - min(x))/(max(x) - min(x))
b = (y - min(y))/(max(y) - min(y))
绘图
#绘图构造:
##用线图`geom_line`来画出大致轮廓
##用`geom_polygon`来进行填充
ggplot(data=NULL, aes(x=x, y=y)) +
geom_line(aes(color=I('white'))) + #手动设置心形边框线颜色
geom_polygon(aes(fill='red'), show.legend = F) + #填充心形并隐藏图例
#隐藏坐标轴:这里使用标度系统来调整x和y轴
scale_x_continuous(labels = NULL) +
scale_y_continuous(labels = NULL) +
#设定主题:主题主要用来控制图像的整体布局
theme_bw() + #设定白色主题
theme(panel.grid.major = element_blank(), #删除网格线
panel.grid.minor = element_blank(), #删除网格线
panel.border = element_blank(), #删除边框线
axis.ticks = element_blank(), #删除刻度线
axis.title = element_blank()) + #去除x和y的标签名
#添加注释
#使用label来添加想要说的话
#` `函数表示换行,#`'`表示将分号作为文本处理
annotate('text', x=median(a), y=median(b),
label=' To Kyt: Happy Valentine's Day your pig',
size=5)
#保存为png格式(也可以存为jpg或者pdf格式都行)
#保存完后使用`getwd()`函数来查看存储路径就可以找到啦~
#dpi表示图像保存的质量,dpi越大图片质量越好
ggsave('heart.png', plot = last_plot(), dpi = 300)
注:
系统一般都在「文档」下,如果没有则通过复制路径来查找即可
如果是手动敲入代码注意不要漏掉“+”号,源代码中的函数最后都会有“+”号来连接
最终呈现效果
总结
1. 绘图最重要的就是要先有一个大概的思路,然后再慢慢去优化修改;
2. 即使出错了也不要畏惧,通过百度或google(还有stackoverflow)来寻找是否有能为你提供解决当前问题的方案,这对于个人掌握ggplot2或是启发绘图思路、甚至是以后的学习都是有着极大的帮助。 (Hadley在《R for data science》 说自己即使已经用R好多年了也经常会出错)
3. “不择手段”地去实现自己想要的效果。当然这里并不是鼓励大家copy别人的代码拿来修改,而是说不一定别人的代码就是唯一方法;方法是多种多样的,无论代码简洁或者复杂,对于新手而言,能实现自己的预期效果的代码,就是合理的代码(就类比于for循环和apply族函数的应用,数据量不大的时候for速度也挺快的),即「不管黑猫白猫,能捉老鼠的就是好猫」
以上就是个人实现“爱心”的全部过程,总体而言只要是对ggplot2函数有了基本的理解,应该都可以读懂以上代码;当然可能还有更简单的代码表示方法,这些步骤都只用于我个人自己对复习自己所学和掌握情况进行了解,仅供参考~
公众号后台回复关键字即可学习
回复 R R语言快速入门及数据挖掘
回复 Kaggle案例 Kaggle十大案例精讲(连载中)
回复 文本挖掘 手把手教你做文本挖掘
回复 可视化 R语言可视化在商务场景中的应用
回复 大数据 大数据系列免费视频教程
回复 量化投资 张丹教你如何用R语言量化投资
回复 用户画像 京东大数据,揭秘用户画像
回复 数据挖掘 常用数据挖掘算法原理解释与应用
回复 机器学习 人工智能系列之机器学习与实践
回复 爬虫 R语言爬虫实战案例分享