Leaflet包:从入门到跑路(二)

前言

上一节我们学习了leaflet包是如何添加底图、修改底图、在底图上添加图标、绘制点、添加地图数据,在上一节的结尾,我们小科普了一个名为RColorBrewer包的配色包,说到颜色,令我好奇的是如何在leaflet包里实现从属性到颜色的映射。

Leaflet包中的颜色

那么接下来就介绍一下leaflet包里关于颜色的设置:
leaflet中设置颜色的方法很简单,首先你得有一个“颜色盒子",这个颜色盒子里面装着你喜欢的颜色,还有一些关于颜色透明度的说明、颜色范围的设置,怎么创建一个属于自己的颜色盒子呢?

Colorbox颜色盒子

leaflet中有4个函数可以生成这种颜色盒子,分别是colorNumeric()、colorBin、
colorQuantile()、colorFactor(),那么这四个盒子可以用来涂不同的东西,比如前三个函
数生成的盒子用来涂数值型的东西,最后一个函数colorFactor()用来渲染类别型的东西
效果最佳。
创建颜色的方法很简单:

colorbox1 <- colorNumeric() #使用colorNumeric()函数创建我的色彩盒
colorbox2 <- colorBin() #使用colorBin()函数创建我的色彩盒
colorbox3 <- colorQuantile() #使用colorQuantile()函数创建我的色彩盒
colorbox4 <- colorFactor() #使用colorFactor()函数创建我的色彩盒

用上述的方法创建完之后会得到一个空的颜色盒子,因为你盒子里面的颜色还没定义,
那么下一步就是把你喜欢的颜色装进这个colorbox里面去,怎么装进去呢?leaflet包里提
供了一个palette的参数,把这个参数放在上面四个函数里面,接收用户喜欢的颜色,形
如:

colorbox1 <- colorNumeric( palette = "我喜欢的颜色")

这里的颜色可以是来自其他包里的色带,例如你看上了RColorBrewer包里面的某一款色
带,那么你可以这样写:

#使用RColorBrewer包中的YIOrRd色带作为我喜欢的颜色,存放在我的色彩盒子里
colorbox1 <- colorNumeric( palette = "YIOrRd") 

在这里插入图片描述
也可以是自己定义的颜色向量:c("yellow","black","orange","red")
也可以是R语言提供的调色板:heat.colors,rainbow

其他参数的设置

除了颜色的选择,还有一些关于颜色的范围、透明度、颜色排序的设置,形如:

olorbox1 <- colorNumeric( palettr = "YIOrRd",domain = "颜色范围",alpha =
"透明度",reverse = "颜色排序")
  • domain — 颜色的值域,例如规定了色彩对应的值域为0:100,那么如果是一个0到60
    的数值型数据,该数据最终的色域将会占据该色带的前3/5;如果设置domain为NULL,则被着色的值跨越整个色域。
  • reverse—调色板中的颜色(或颜色功能)是否应以相反的顺序使用。例如,如果调色
    板的默认顺序从蓝色变为绿色,则reverse = TRUE将导致颜色从绿色变为蓝色

在这里插入图片描述

应用示例

#导入实验数据
library("rgdal")
data <- readOGR("zhongshan2.shp",stringsAsFactors = FALSE)
#定义几个颜色小盒子,装着我想要的颜色,默认颜色范围为整个色带
colorbox1 <- colorNumeric(palette = "PuBu",
							domain = Null)
colorbox2 <- colorNumeric(palette = c("orange","blue","yellow","grey"),
							domain = NULL)
colorbor3 <- colorNumeric(palette = "rainbow(10)",
							domain = NULL)
colorbor4 <- colorNumeric(palette = heat.colors(10),
							domain = NULL)
leaflet(data) %>%
	addTiles() %>%
		addPolygons(
			stroke = TRUE, #是否描边
			smoothFactor = 0.3, #简化折线的等级
			illOpacity = 0.8, #填充透明度
			color = ~colorbox1(data$F2) )

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
需要注意的是

  1. ColorNumeric是用来渲染连续型的数据,例如1~100的数据。
  2. ColorBin可以用于数据切片分箱,可以指定breaks分割点来分箱,也可以通过bin参数指定分箱数量来分箱。如果pretty = TRUE(默认),将得到nice round的分割点,但是可能分箱数并不非你指定的。
  3. ColorQuantile也用于数据切片分箱,与ColorBin不同的是,它的数据分箱是通过分位数来实现,默认是4个箱子,5个间断点breaks。
  4. ColorFactor用于类别型数据渲染,也就是需要根据一个字符型向量来指定渲染颜色,如果指定的类别数量与实际数据的类别不符合,它会使用内插法进行类别的颜色渲染。

添加图例

leaflet包中添加图例的方法比较简单,使用addlegend函数添加即可。
addlegend中关键的参数有两个,一个是values的设置,用于从palette参数中生成颜色的值,一个是pal的设置,用于调用我们颜色盒子来作为图例的样式
例如:

#创建一个分位数分箱的颜色盒子,设置箱子数为7
colorbox5 <- colorQuantile(palette = rainbow(10),
domain = NULL,n = 7)
leaflet(data) %>%
	addTiles() %>%
		addPolygons(
			stroke = TRUE, #是否描边
			smoothFactor = 0.3, #简化折线等级
			fillOpacity = 0.8, #填充透明度
			color = ~colorbox5(data$F2) ) %>%
				addLegend(
				position = "topleft",
				pal = colorbox5,values = data$F2,group = "data$F2")%>%
					addLayersControl(overlayGroups = "data$F2")

在这里插入图片描述

#创建一个连续型颜色盒子,采用彩虹配色
colorbox6 <- colorNumeric(palette = rainbow(10),
							domain = NULL),
#创建一个分箱型颜色盒子,采用heat.colors配色,分箱数为7
colorbox7 <- colorBin(palette = rainbow(5),
						domain = data$F2,bins = 7)
#创建一个分位数颜色盒子,采用topo.color配色,分箱数为5
colorbox8 <- colorNumeric(palette = rainbow(10),
							domain = NULL)
leaflet(data) %>%
	addTiles() %>%
		addPolygons(
			stroke = TRUE, #是否描边
			smoothFactor = 0.3, #简化折线等级
			fillOpacity = 0.8, #填充透明度
			color = ~colorbox6(data$F2)) %>%
				addLegend( #添加ColorNumeric颜色的图例
						position = "topleft",
						pal = colorbox6,
						values = ~F2)%>%
				addLegend( #添加ColorBin颜色的图例
						position = "topright",
						pal = colorbox7,
						values = ~F2)%>%
				addLegend( #添加ColorQuantiel颜色的图例
						position = "bottomleft",
						pal = colorbox8,
						values = ~F2)

在这里插入图片描述

图例的美化

1. 位置的修改(position)
图例的位置包括四个:topleft(左上角)、topright(右上角)、bottomleft(左下角)、bottomright(右下角)
2. 缺省值的设置
在图例上,缺省值的表示可以自定义设置

na.label = NA

3. 标题的添加
使用title添加图例的标题
4. 修改图例标注
图例标注的修改可以使用labFormat = labelFormat()参数进行修改,在labelFormat()这个函数里面,提供了若干个参数,例如:

  • prefix、suffix ——前/后缀的修改,
  • between——中间分隔符的修改

5. 数据格式的转化
使用transform = function(x)的方法进行数据的处理,其中function(x)可以由用户自定义。

实验代码如下:

#创建一个连续型颜色盒子,采用彩虹配色
colorbox6 <- colorNumeric(palette = rainbow(10),
							domain = NULL)
leaflet(data) %>%
	addTiles() %>%
		addPolygons(
			stroke = TRUE, #是否描边
			smoothFactor = 0.3, #简化折线等级
			fillOpacity = 0.8, #填充透明度
			color = ~colorbox5(data$F2) ) %>%
				addLegend(
					position = "bottomleft", #位置设置为左下角
					pal = colorbox6, #采用colorbox6作为图例配色
					values = data$F2,
					group = "data$F2",
					title = "中山市某年镇域人口分布",
					opacity = 0.5, #不透明度设置
					labFormat = labelFormat(
									prefix = " ",
									suffix = "(万人)", #添加标注后缀
									between = "~",
									transform = function(x) {
														x =
														x/10000 #定义funcyion函数}))

在这里插入图片描述

结语

leaflet包中有关颜色和图例的设置也就差不多齐全了,当然这些也只是入门的基础知识,但everything moves with The Times, so does knowledge, and so should you,在实践中发挥自己的创意,找寻更多关于leaflet包的美吧!

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值