ggplot2|发散性“正负”图
时间:2022-07-22
本文章向大家介绍ggplot2|发散性“正负”图,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前面介绍了一些ggplot绘图,ggplot2|从0开始绘制直方图,ggplot2|从0开始绘制箱线图,ggplot2|从0开始绘制折线图,这次介绍一下当数据为发散性正负值的时候,几种比较合适的展示方式。
一 载入数据并处理
library(ggplot2)
# 使用mtcars数据集
data("mtcars")
# 保留car name ,新建一列
mtcars$car_name <- rownames(mtcars)
# 对mpg进行标准化处理
mtcars$mpg_z <- round((mtcars$mpg - mean(mtcars$mpg))/sd(mtcars$mpg), 2)
# 按照0未阈值 ,分上 下
mtcars$mpg_type <- ifelse(mtcars$mpg_z < 0, "below", "above")
mtcars <- mtcars[order(mtcars$mpg_z), ] # 为展示美观,数据排序
# 改为因子,能够保持原顺序
mtcars$car_name <- factor(mtcars$car_name, levels = mtcars$car_name)
注:改为因子使图形按照原顺序输出,很常用。
二 Diverging bars
Diverging bars是一种可以同时处理负值和正值的条形图。注意为了使柱状图创建柱形图而不是直方图,需要确保:
(1)设置stat=identity
(2)在aes()中同时提供x和y,其中x是字符或因子,y是数值。
Diverging Barcharts
ggplot(mtcars, aes(x=car_name, y=mpg_z, label=mpg_z)) + geom_bar(stat='identity', aes(fill=mpg_type), width=.5) + scale_fill_manual(name="Mileage",
labels = c("Above Average", "Below Average"),
values = c("above"="#00ba38", "below"="#f8766d")) + labs(subtitle="Normalised mileage from 'mtcars'",
title= "Diverging Bars") + coord_flip() + theme_bw()
三 Diverging Lollipop Chart
Lollipop Chart与上述类似,而是使用 geom_point 和 geom_segment 来获得想展示的图。
ggplot(mtcars, aes(x=car_name, y=mpg_z, label=mpg_z)) + geom_point(stat='identity', color="orange",size=4) + geom_segment(aes(y = 0,
x =car_name,
yend = mpg_z,
xend =car_name),
color = "grey") + labs(title="Diverging Lollipop Chart") + ylim(-2.5, 2.5) + coord_flip() + theme_bw()
四 Diverging Dot Plot
同样可以用点图传达相似的信息,圈圈里面加上具体的数值。
ggplot(mtcars, aes(x=car_name, y=mpg_z, label=mpg_z)) + geom_point(stat='identity', aes(col=mpg_type), size=6) + scale_color_manual(name="Mileage",
labels = c("Above Average", "Below Average"),
values = c("above"="#00ba38", "below"="#f8766d")) + geom_text(color="white", size=2) + labs(title="Diverging Dot Plot",
subtitle="Normalized mileage from 'mtcars': Dotplot") + ylim(-2.5, 2.5) + coord_flip() + theme_bw()
五 参考资料
http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.html
- FrameLayout(框架布局)
- WordPress 中变量$allowedposttags 添加自定义HTML属性
- 移动端UC /QQ 浏览器的部分私有Meta 属性
- RelativeLayout(相对布局)
- TableLayout(表格布局)
- 【MindiaX实例】 PHP 在foreach 中获取JSON 单个数据
- 史上十大最严重黑客袭击事件盘点
- LinearLayout(线性布局)
- 服务化了,没想到耦合更加严重?
- 利用好注册的域名
- Android中TextView
- 腾讯 DCI 上线基于集中控制的 SR-TE 方案
- 如何从VS2003升级到VS2008
- js中多个Date对象变量间赋值互相影响
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 震惊! GC原来是这个样子.
- 2020-09-21:已知最大公约数和最小公倍数,如何判断这两个数是否存在?
- 如何设计一个牛逼的API接口(技术创作101训练营)
- shell 运算符; 判断中 if -a 与运算 -o或运算
- Linux crond 计划任务添加
- linux 环境下安装使用 git
- linux下禁止root ssh远程登录和添加允许新用户登录ssh
- Python 常见数据结构整理
- mapreduce的二次排序-分区分组
- GATK RNA-Seq Snps Indel 分析
- 【技术创作101训练营】腾讯云主机上部署 FRP+Teamviewer 穿透内网进行远程运维
- 图像处理笔记(7)---- OpenCV 绘制无填充矩形
- 图像处理笔记(8)---- OpenCV 获取追踪对象的HSV值
- (数据科学学习手札95)elyra——jupyter lab平台最强插件集
- Python 序列化/反序列化自定义类型