R传单连续图例中的相反顺序

R传单连续图例中的相反顺序,r,leaflet,legend,R,Leaflet,Legend,我正在尝试反转我的传单图例在R中的值显示。这包括分类数据,但我使用的是连续数据。下面是一个玩具示例: map <- leaflet() %>% addProviderTiles('Esri.WorldTopoMap') x <- 1:100 pal <- colorNumeric(c("#d7191c","#fdae61","#ffffbf","#abd9e9", "#2c7bb6"), x) map %>% addLegend('topright', pal=pa

我正在尝试反转我的
传单
图例在R中的值显示。这包括分类数据,但我使用的是连续数据。下面是一个玩具示例:

map <- leaflet() %>% addProviderTiles('Esri.WorldTopoMap')
x <- 1:100
pal <- colorNumeric(c("#d7191c","#fdae61","#ffffbf","#abd9e9", "#2c7bb6"), x)
map %>% addLegend('topright', pal=pal, values=x)
map%addProviderTiles('Esri.WorldTopoMap')

x我刚刚发现内置的
labelFormat
函数有一个
transform
参数,它接受一个函数。因此我在那里传递了
sort
函数。 用同样的例子来说

map %>% addLegend('topright',
              pal = pal, 
              values = x, 
              labFormat = labelFormat(transform = function(x) sort(x, decreasing = TRUE)))

不幸的是,公认的答案会使数字与它们所代表的颜色不一致(事实上完全相反)

以下是最初提出的解决方案,我认为这是不正确的:

map <- leaflet() %>% addProviderTiles('Esri.WorldTopoMap')
x <- 1:100
pal <- colorNumeric(c("#d7191c","#fdae61","#ffffbf","#abd9e9", "#2c7bb6"), x)
map %>% addLegend('topright', pal=pal, values=x)

# This solution shows 100 as red
map %>% addLegend('topright',
                  pal = pal, 
                  values = x, 
                  labFormat = labelFormat(transform = function(x) sort(x, decreasing = TRUE)))

我认为解决方案是定义将颜色分配给数字的函数,一个用于图例,另一个用于实际绘制:

pal_rev <- colorNumeric(c("#d7191c","#fdae61","#ffffbf","#abd9e9", "#2c7bb6"), x, reverse = TRUE)

map %>% addLegend('topright',
                  pal = pal_rev, 
                  values = x, 
                  labFormat = labelFormat(transform = function(x) sort(x, decreasing = TRUE)))
pal\u版本%addLegend('topright'),
pal=pal_rev,
值=x,
labFormat=labelFormat(转换=函数(x)排序(x,递减=真)))
这为我们提供了一个与我们将绘制的任何内容相匹配的图例,ie 100现在正确显示为蓝色:


虽然接受的答案确实会翻转图例的颜色和标签,但地图的颜色与图例不对应。这里有一个(偷来的)解决方案。基本上创建了一个名为
addLegend\u discreating
的新函数,该函数的工作原理与
addLegend
完全相同,并带有一个额外的参数:
discreating=FALSE
,该参数反转图例的颜色和标签,正确定位地图的颜色。以下是功能代码:


addLegend\u减少,除非我大错特错,否则由此产生的图例颠倒了标签,但没有颜色,因此它确实很长。您可以通过
绘图(1:10,1:10,pch=19,cex=3,col=pal(100))来检查这一点。
显示x=100显示为蓝色,尽管图例上显示为红色。
pal_rev <- colorNumeric(c("#d7191c","#fdae61","#ffffbf","#abd9e9", "#2c7bb6"), x, reverse = TRUE)

map %>% addLegend('topright',
                  pal = pal_rev, 
                  values = x, 
                  labFormat = labelFormat(transform = function(x) sort(x, decreasing = TRUE)))