R 数据可视化——ggplot 标度(二)
bigegpt 2024-09-27 00:35 3 浏览
3. 设置值范围
除了设置坐标轴的范围,我们也可以设置图形中必须包含某个或某些值。
可以使用 expand_limits() 函数,该函数接受一个命名列表,名称必须为图形属性
示例
对于下面这张散点图
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
> mtcars %>% distinct(mpg) %>% summarise(min=min(.), max=max(.))
min max
1 10.4 33.9
> mtcars %>% distinct(wt) %>% summarise(min=min(.), max=max(.))
min max
1 1.513 5.424
从上面的结果中,我们可以计算出:X 轴(mpg)和 Y 轴(wt)的数据范围
下面,让我们用 expand_limits 来调整数据范围
p1 <- p + expand_limits(x = 0)
p2 <- p + expand_limits(y = c(1, 9))
p3 <- p + expand_limits(x = 0, y = 0)
plot_grid(p1, p2, p3, labels = c('A', 'B', 'C'), nrow = 1)
在图 A 中,我们设置 X 轴数据要包含 0,尽管并没有对应的值,但是 X 坐标轴还是会从 0 开始。
类似的,图 B 设置了 Y 轴需要包含 1 和 9,超过了数据的范围,相当于扩大了 Y 轴的范围
我们还可以对颜色进行设置
p1 <- ggplot(mtcars, aes(mpg, wt)) +
geom_point(aes(colour = cyl)) +
expand_limits(colour = seq(2, 10, by = 2))
p2 <- ggplot(mtcars, aes(mpg, wt)) +
geom_point(aes(colour = factor(cyl))) +
expand_limits(colour = factor(seq(2, 10, by = 2)))
plot_grid(p1, p2, labels = c('A', 'B'))
A 图设置了渐变色,B 图是离散配色。
> mtcars %>% distinct(cyl)
cyl
Mazda RX4 6
Datsun 710 4
Hornet Sportabout 8
我们可以看到,其实颜色的值只有三个 4、6、8,但是我们设置了 5 个不同的颜色层级。
从 B 图可以明显看出,2 和 10 的颜色并没有显示,因为不存在相应的数据
4. 设置间隔
可以使用 expansion() 函数设置数据与轴之间的间隔,该函数主要搭配 scale_(x|y)_continuous 与 scale_(x|y)_discrete 使用。
# 推荐使用
expansion(mult = 0, add = 0)
# 已被弃用
expand_scale(mult = 0, add = 0)
该函数包含两个参数:
- mult: 百分比间距,接受一个向量,如果向量长度为 1,则上下间距的间隔是一样的,如果长度为 2,则 mult[1] 为下间距,mult[2] 为上间距
- add: 常数值单位间距,类似 mult
示例
p1 <- ggplot(mtcars) +
geom_bar(aes(x = factor(cyl)))
p2 <- ggplot(mtcars) +
geom_bar(aes(x = factor(cyl))) +
scale_y_continuous(expand = expansion(mult = c(0, .1)))
p3 <- ggplot(subset(diamonds, carat > 2), aes(cut, clarity)) +
geom_jitter() +
scale_x_discrete(expand = expansion(add = 2))
p4 <- ggplot(subset(diamonds, carat > 2), aes(cut, price)) +
geom_jitter() +
scale_x_discrete(expand = expansion(add = .6)) +
scale_y_continuous(expand = expansion(mult = .05))
plot_grid(p1, p2, p3, p4, labels = LETTERS[1:4],
nrow = 2)
其中,D 图所设置的间距是默认值
5. 设置透明度
alpha 透明度并不是非常有用,但它可以方便地从视觉上降低不太重要的观察结果的权重
设置透明度的函数包括:
scale_alpha(..., range = c(0.1, 1))
scale_alpha_continuous(..., range = c(0.1, 1))
scale_alpha_binned(..., range = c(0.1, 1))
scale_alpha_discrete(...)
scale_alpha_ordinal(..., range = c(0.1, 1))
其中 scale_alpha 是 scale_alpha_continuous 的别名,因为这个函数是最常用的。
其中 range 参数的值为透明度的范围,必须在 0-1 之间。
其他参数分别被 continuous_scale(), binned_scale, 和 discrete_scale() 解析
示例
首先在 aes 中设置透明度,如
p <- ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(alpha = year))
然后使用标度函数来修改透明度范围
p1 <- p + scale_alpha("cylinders")
p2 <- p + scale_alpha(range = c(0.4, 0.8))
plot_grid(p1, p2, labels = LETTERS[1:2],
nrow = 1)
在图 A 中,我们传递了一个字符串,相当于设置了 name 参数的值,更改了图例的名称
自定义透明度
p <- ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(alpha = factor(year)))
p + scale_alpha_manual(values = c(0.1, 0.2))
6. 设置线条类型
线条的类型可以使用 0-6 之间的整数来指定,分别代表
0 = blank 1 = solid
2 = dashed 3 = dotted
4 = dotdash 5 = longdash
6 = twodash
绘制所有的线条类型
df_lines <- tibble(
linetype = factor(0:6)
)
ggplot(df_lines) +
geom_hline(aes(linetype = linetype, yintercept = 0), size = 2) +
scale_linetype_discrete() +
facet_grid(linetype ~ .) +
theme_void(20)
线条类型不支持连续型数据,因为无法将连续型数据映射到线型。但是可以使用 scale_linetype_binned(),由于线型没有固定的顺序,也不推荐这样使用
示例
对于数据
> economics_long
# A tibble: 2,870 x 4
date variable value value01
<date> <chr> <dbl> <dbl>
1 1967-07-01 pce 507. 0
2 1967-08-01 pce 510. 0.000265
3 1967-09-01 pce 516. 0.000762
4 1967-10-01 pce 512. 0.000471
5 1967-11-01 pce 517. 0.000916
6 1967-12-01 pce 525. 0.00157
7 1968-01-01 pce 531. 0.00207
8 1968-02-01 pce 534. 0.00230
9 1968-03-01 pce 544. 0.00322
10 1968-04-01 pce 544 0.00319
# … with 2,860 more rows
我们根据 variable 变量进行分组,绘制折线图
base <- ggplot(economics_long, aes(date, value01))
base + geom_line(aes(group = variable))
注意:我们是通过设置 group = variable 来设置分组的,但是组与组之间没有区分度。
为图片添加线型和颜色
base + geom_line(aes(linetype = variable, colour=variable))
这样,每组之间的趋势就很明显了。
自定义线条映射
df <- economics_long %>% filter(variable %in% c("pop", "pce", "uempmed"))
lt <- c("pop"=1, "pce"=3, "uempmed"=5)
ggplot(df, mapping = aes(date, value01)) +
geom_line(aes(linetype = variable, colour=variable)) +
scale_linetype_manual(values = lt)
7. 设置形状
scale_shape() 函数可以将离散变量映射为 6 个不同的形状。
如果你有超过 6 个类别,你将会得到一个警告信息,并且第 7 个或更后面的类别将不会在图片中显示
形状与线型一样,不支持连续型数据,也不推荐使用 scale_shape_binned 函数来设置
scale_shape(..., solid = TRUE)
scale_shape_binned(..., solid = TRUE)
其中 solid 参数控制形状是不是实心的
下面的代码展示了所有的形状
df_shapes <- data.frame(shape = 0:25)
ggplot(df_shapes, aes(0, 0, shape = shape)) +
geom_point(aes(shape = shape), size = 5, fill = 'red') +
scale_shape_identity() +
facet_wrap(~shape) +
theme_void()
取值范围为 0-25,共 26 个整数值分别代表了相应的形状。
注意:红色的形状是可以设置填充色(fill)的,其他形状只能设置轮廓颜色(colour)。
示例
dsmall <- diamonds[sample(nrow(diamonds), 100), ]
d <- ggplot(dsmall, aes(carat, price)) + geom_point(aes(shape = cut))
p2 <- d + scale_shape(solid = FALSE)
p3 <- d + scale_shape(name = "Cut of diamond")
levels(dsmall$cut) <- c("Fair", "Good", "Very Good", "Premium", "Ideal")
p4 <- ggplot(dsmall, aes(price, carat)) + geom_point(aes(shape = cut))
plot_grid(d, p2, p3, p4, labels = LETTERS[1:4])
注意:在绘制图 D 时,会输出警告信息,提示不建议对排序的变量设置形状
自定义形状映射
shape_map <- c("Fair"=13, "Good"=20, "Very Good"=15, "Premium"=2, "Ideal"=11)
d + scale_shape(solid = FALSE) +
scale_shape_manual(values = shape_map)
8. 设置大小
一般只有点图和文本需要设置大小。而我们通常是将数据映射到点的面积,而不是映射到半径。
标度函数如下
scale_size(..., range = c(1, 6))
scale_radius(..., range = c(1, 6))
scale_size_binned(..., range = c(1, 6))
scale_size_area(..., max_size = 6)
scale_size_binned_area(..., max_size = 6)
如果需要将值为 0 的点映射为 0,需要使用 scale_size_area 函数
示例
例如,下面这张散点图
p <- ggplot(mpg, aes(displ, hwy, size = hwy)) +
geom_point()
# 设置图例标题
p1 <- p + scale_size("Highway mpg")
# 设置点的大小范围
p2 <- p + scale_size(range = c(0, 10))
# 允许将 0 值映射为面积为 0 的点(不绘制)
p3 <- p + scale_size_area()
# 方便从看出图例中看出分箱
p4 <- p + scale_size_binned()
# This is most useful when size is a count
p5 <- ggplot(mpg, aes(class, cyl)) +
geom_count() +
scale_size_area()
# 将数据映射为半径,不推荐
p6 <- p + scale_radius()
plot_grid(p1, p2, p3, p4, p5, p6,
labels = LETTERS[1:6], nrow = 3)
自定义数据大小,我们根据 cyl 的值倒序设置点的大小
ggplot(mpg, aes(displ, hwy, size = factor(cyl))) +
geom_point() +
scale_size_manual(
name="cyl",
values = c(
"4" = 5,
"5" = 4,
"6" = 3,
"8" = 2
))
相关推荐
- 有些人能留在你的心里,但不能留在你生活里。
-
有时候,你必须要明白,有些人能留在你的心里,但不能留在你生活里。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)