R 数据可视化——ggplot 标度(三)
bigegpt 2024-09-27 00:35 3 浏览
9. 位置
一幅图有两个位置标度,即指定水平位置的 X 轴和指定竖直位置的 Y 轴。
针对不同的数据类型,标度函数又可以分为连续型、离散型和日期标度。
9.1 连续型
连续型位置标度主要是 scale_x_continuous() 和 scale_y_continuous()。用于将连续型数据映射到 X 和 Y 轴。
每个连续型标度函数都接受一个 trans 参数,用于对输入的数据进行变换后绘图。
内置的转换函数包括:
"asn", "atanh", "boxcox",
"date", "exp", "hms",
"identity", "log", "log10",
"log1p", "log2", "logit",
"modulus", "probability", "probit",
"pseudo_log", "reciprocal", "reverse",
"sqrt" "time"
一些常用的转换函数会有对应的简便写法,如
scale_x/y_log10()
scale_x/y_reverse()
scale_x/y_sqrt()
即 scale_x_log10() 和 scale_x_continuous(trans = "log10") 是等价的
当然,我们可以先对数据进行转换,然后再绘制图片。这样可以更好地自定义自己的转换方式
例如下面这个例子
p1 <- ggplot(diamonds, aes(log10(carat), log10(price))) +
geom_point()
p2 <- ggplot(diamonds, aes(carat, price)) +
geom_point() +
scale_x_log10() +
scale_y_log10()
plot_grid(p1, p2, labels = LETTERS[1:2])
可以看到,在绘图前后变换的数据主体是完全相同的,但是坐标轴的刻度却不一样。这将在后面的坐标系调整中进行说明
数据转换
p1 <- ggplot(mpg, aes(displ, hwy)) +
geom_point()
p2 <- p1 + scale_y_log10()
p3 <- p1 + scale_y_sqrt()
p4 <- p1 + scale_y_reverse()
plot_grid(p1, p2, p3, p4,
labels = LETTERS[1:4], ncol = 2)
也可以使用 scales 包定义的转换函数
p1 + scale_y_continuous(trans = scales::reciprocal_trans())
对数据进行分箱
p1 <- ggplot(mpg, aes(displ, hwy)) +
geom_point()
p2 <- p1 + scale_x_continuous(
breaks = c(2, 4, 6),
label = c("two", "four", "six")
)
plot_grid(p1, p2, labels = LETTERS[1:2])
使用 scales 包中的函数为轴标签设置格式
df <- data.frame(
x = rnorm(10) * 100000,
y = seq(0, 1, length.out = 10)
)
p2 <- ggplot(df, aes(x, y)) + geom_point()
p3 <- p2 + scale_y_continuous(labels = scales::percent)
p4 <- p2 + scale_y_continuous(labels = scales::dollar)
p5 <- p2 + scale_x_continuous(labels = scales::comma)
plot_grid(p2, p3, p4, p5,
labels = LETTERS[1:4], ncol = 2)
9.2 离散型
scale_x_discrete() 和 scale_y_discrete() 两个函数用于将离散型数据映射到坐标轴上。
d <- ggplot(subset(diamonds, carat > 1), aes(cut, clarity)) +
geom_jitter()
# 重置 X 轴的标签映射
p2 <- d + scale_x_discrete("Cut", labels = c("Fair" = "F","Good" = "G",
"Very Good" = "VG","Perfect" = "P","Ideal" = "I"))
p3 <- d + scale_x_discrete(limits = c("Fair","Ideal"))
p4 <- d + xlim("Fair","Ideal", "Good") + ylim("I1", "IF")
plot_grid(d, p2, p3, p4, labels = LETTERS[1:4], nrow = 2)
对标签进行重排
p1 <- ggplot(mpg, aes(manufacturer, cty)) + geom_point()
p2 <- ggplot(mpg, aes(reorder(manufacturer, cty), cty)) + geom_point()
p3 <- ggplot(mpg, aes(reorder(manufacturer, displ), cty)) + geom_point()
p4 <- ggplot(mpg, aes(reorder(manufacturer, displ), cty)) +
geom_point() +
scale_x_discrete(labels = abbreviate)
plot_grid(d, p2, p3, p4, labels = LETTERS[1:4], nrow = 2)
在 D 图中,我们使用 abbreviate 函数将 X 轴的标签设置为简写
9.3 日期和时间
虽然日期和时间也是连续型的,但是在标注坐标轴时还是有些不一样的。
共支持三种类型的时间日期,其中 scale_*_date 处理 Date 类型,scale_*_datetime 用于处理 POSIXct 类型的时间,scale_*_time 用于处理 hms 类型的时间
这些函数主要有三个特殊的参数
- date_breaks:一个字符串,用于设置时间间隔。如 "2 weeks" 或 "10 years"。
如果同时指定 break 和 date_breaks,则以 date_breaks 为准
- date_labels:一个字符串,为 labels 提供格式化规范。
如果同时指定了 label 和 date_labels,则以 date_labels 为准
常用的数据格式编码有:
更详细的格式介绍可以参考:
https://rdrr.io/r/base/strptime.html
- date_minor_breaks:一个字符串,给出次要标签之间的时间间距。如 "2 weeks" 或 "10 years"。
如果同时指定了 minor_breaks 和 date_minor_breaks,则以 date_minor_breaks 为准。
对于如下例子
last_month <- Sys.Date() - 0:29
df <- data.frame(
date = last_month,
price = runif(30)
)
base <- ggplot(df, aes(date, price)) +
geom_line()
设置格式
p1 <- p + scale_x_date(date_labels = "%b %d")
p2 <- p + scale_x_date(date_breaks = "1 week", date_labels = "%W")
p3 <- p + scale_x_date(date_minor_breaks = "1 day")
# 限制范围
p4 <- p + scale_x_date(limits = c(Sys.Date() - 7, NA))
plot_grid(p1, p2, p3, p4, labels = LETTERS[1:4], nrow = 2)
注意:在这里会有一个问题,就是英文月份无法显示。那该如何设置呢?
首先,尝试使用如下命令来设置
Sys.setlocale("LC_TIME", "English")
如果在运行该命令时报出如下错误
> Sys.setlocale("LC_TIME", "English")
[1] ""
Warning message:
In Sys.setlocale("LC_TIME", "English") :
操作系统报告说无法执行将本地化设成"English"的请求这个问题的原因可能是系统语言的问题,网上有人推荐说更改系统语言。但是这样改很麻烦,所以我尝试了如下代码
Sys.setlocale("LC_TIME", "C")
再次运行,已经解决了该问题了。不需要更改系统语言
相关推荐
- 有些人能留在你的心里,但不能留在你生活里。
-
有时候,你必须要明白,有些人能留在你的心里,但不能留在你生活里。Sometimes,youhavetorealize,Somepeoplecanstayinyourheart,...
- Python学不会来打我(34)python函数爬取百度图片_附源码
-
随着人工智能和大数据的发展,图像数据的获取变得越来越重要。作为Python初学者,掌握如何从网页中抓取图片并保存到本地是一项非常实用的技能。本文将手把手教你使用Python函数编写一个简单的百度图片...
- 软网推荐:图像变变变 一“软”见分晓
-
当我们仅需要改变一些图片的分辨率、裁减尺寸、添加水印、标注文本、更改图片颜色,或将一种图片转换为另一种格式时,总比较讨厌使用一些大型的图像处理软件,尤其是当尚未安装此类软件时,更是如此。实际上,只需一...
- 首款WP8.1图片搜索应用,搜照片得资料
-
首款WP8.1图片搜索应用,搜照片得资料出处:IT之家原创(天际)2014-11-1114:32:15评论WP之家报道,《反向图片搜索》(ReverseImageSearch)是Window...
- 盗墓笔记电视剧精美海报 盗墓笔记电视剧全集高清种子下载
-
出身“老九门”世家的吴邪,因身为考古学家的父母在某次保护国家文物行动时被国外盗墓团伙杀害,吴家为保护吴邪安全将他送去德国读书,因而吴邪对“考古”事业有着与生俱来的兴趣。在一次护宝过程中他偶然获得一张...
- 微软调整Win11 24H2装机策略:6月起36款预装应用改为完整版
-
IT之家7月16日消息,微软公司今天(7月16日)发布公告,表示自今年6月更新开始,已默认更新Windows1124H2和WindowsServer2025系统中预装...
- 谷歌手把手教你成为谣言终结者 | 域外
-
刺猬公社出品,必属原创,严禁转载。合作事宜,请联系微信号:yunlugongby贾宸琰编译、整理11月23日,由谷歌新闻实验室(GoogleNewsLab)联合Bellingcat、DigD...
- NAS 部署网盘资源搜索神器:全网资源一键搜,免费看剧听歌超爽!
-
还在为找不到想看的电影、电视剧、音乐而烦恼?还在各个网盘之间来回切换,浪费大量时间?今天就教你如何在NAS上部署aipan-netdisk-search,一款强大的网盘资源搜索神器,让你全网资源...
- 使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建
-
前言回顾在上一篇文章《搭建持久化的INFINIConsole与Easysearch容器环境》中,我们详细介绍了如何使用基础的dockerrun命令,手动启动和配置INFINICon...
- 为庆祝杜特尔特到访,这个国家宣布全国放假?
-
(观察者网讯)近日,一篇流传甚广的脸书推文称,为庆祝杜特尔特去年访问印度,印度宣布全国放假,并举办了街头集会以示欢迎。菲媒对此做出澄清,这则消息其实是“假新闻”。据《菲律宾世界日报》2日报道,该贴子...
- 一课译词:毛骨悚然(毛骨悚然的意思是?)
-
PhotobyMoosePhotosfromPexels“毛骨悚然”,汉语成语,意思是毛发竖起,脊梁骨发冷;形容恐惧惊骇的样子(withone'shairstandingonend...
- Bing Overtakes Google in China's PC Search Market, Fueled by AI and Microsoft Ecosystem
-
ScreenshotofBingChinahomepageTMTPOST--Inastunningturnintheglobalsearchenginerace,Mic...
- 找图不求人!6个以图搜图的识图网站推荐
-
【本文由小黑盒作者@crystalz于03月08日发布,转载请标明出处!】前言以图搜图,专业说法叫“反向图片搜索引擎”,是专门用来搜索相似图片、原始图片或图片来源的方法。常用来寻找现有图片的原始发布出...
- 浏览器功能和“油管”有什么关联?为什么要下载
-
现在有没有一款插件可以实现全部的功能,同时占用又小呢,主题主要是网站的一个外观,而且插件则主要是实现wordpress网站的一些功能,它不仅仅可以定制网站的外观,还可以实现很多插件的功能,搭载chro...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- libcrypto.so (74)
- linux安装minio (74)
- ubuntuunzip (67)
- vscode使用技巧 (83)
- secure-file-priv (67)
- vue阻止冒泡 (67)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)