在不使用R的情况下,制作类似于Shiny Leaflet示例的内容

时间:2015-09-02 15:39:13

标签: shiny leaflet

是否可以制作类似于this示例的内容,该示例是使用Shiny Leaflet库构建的,但实际上没有使用R? 是否有基于值的缩放点或用于制作示例中的图表的传单控制插件? 我试图找出闪亮的图书馆用来制作图表的内容,但我没有 - 可能是因为我缺乏R的经验..

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

Shiny图表在服务器端生成为静态.png图像,并在更改时更新。所以你可以在那里重复使用。但是,您可以使用与示例地图类似的方式在Leaflet中设置circleMarkers样式。可以使用创建图层时调用的样式函数来缩放基于值的颜色和大小。

如果在名为dots的GeoJSON对象中有一些点几何,则可以执行以下操作:

dotlayer = L.geoJson(dots, {
    pointToLayer: function (feature, latlng) {
        return L.circleMarker(latlng, style(feature));
    },
    onEachFeature: onEachDot
}).addTo(map);

其中style(feature)是一个函数:

function style(feature) {
    return {
        radius: getRadius(feature.properties.size),
        fillColor: getColor(feature.properties.year),
        color: "#000",
        weight: 1,
        opacity: 0,
        fillOpacity: 0.8
    };
}

反过来调用另外两个函数来从要素属性中获取颜色和半径:

function getColor(y) {
    return y > 2000 ? '#6068F0' : 
           y > 1980 ? '#7660C9' : 
           y > 1960 ? '#8C58A3' : 
           y > 1940 ? '#A3507C' : 
           y > 1920 ? '#B94856' :
                      '#D04030';
}

function getRadius(y) {
    r = Math.sqrt(y / Math.PI)
    return r;
}

使用colorbrewer之类的外部实用程序计算颜色渐变。在此示例函数中,缩放半径以使圆的面积与原始数量成比例,但您的函数可以以对地图最有意义的任何方式缩放它。

情节和图例确实需要使用控件,但是当你有一个工作示例时,它会更容易。所以这里有一些不太优雅的例子:

http://fiddle.jshell.net/nathansnider/o563bg44/

它没有闪亮地图的所有花里胡哨(如地图移动时自动更新地图),但这是一个开始。