def test_heat_map(): x_data = [] y_data = [] c_data = [] x_data.append(-73.96524) x_data.append(-73.96118) x_data.append(-73.97324) x_data.append(-73.98456) y_data.append(40.73747) y_data.append(40.74507) y_data.append(40.75890) y_data.append(40.77654) c_data.append(10) c_data.append(20) c_data.append(30) c_data.append(40) arr_x = pandas.Series(x_data) arr_y = pandas.Series(y_data) arr_c = pandas.Series(c_data) points = arctern.ST_Point(arr_x, arr_y) vega = vega_heatmap( 1024, 896, bounding_box=[-73.998427, 40.730309, -73.954348, 40.780816], map_zoom_level=13.0, coordinate_system='EPSG:4326') heat_map1 = arctern.heat_map_layer(vega, points, arr_c) save_png(heat_map1, "/tmp/test_heat_map1.png")
def heatmap(ax, points, weights, bounding_box, map_zoom_level=None, coordinate_system='EPSG:3857', aggregation_type='max', **extra_contextily_params): """ :type ax: AxesSubplot :param ax: Matplotlib axes object on which to add the basemap. :type points: Series(dtype: object) :param points: Points in WKB form :type bounding_box: (float, float, float, float) :param bounding_box: The bounding rectangle, as a [left, upper, right, lower]-tuple. value should be of :coordinate_system: :type coordinate_system: str :param coordinate_system: either 'EPSG:4326' or 'EPSG:3857' :type extra_contextily_params: dict :param extra_contextily_params: extra parameters for contextily.add_basemap. See https://contextily.readthedocs.io/en/latest/reference.html """ from matplotlib import pyplot as plt import contextily as cx bbox = _transform_bbox(bounding_box, coordinate_system, 'epsg:3857') w, h = _get_recom_size(bbox[2] - bbox[0], bbox[3] - bbox[1]) if map_zoom_level is None: map_zoom_level = _calc_zoom(bounding_box, coordinate_system) vega = vega_heatmap(w, h, bounding_box=bounding_box, map_zoom_level=map_zoom_level, aggregation_type=aggregation_type, coordinate_system=coordinate_system) hexstr = arctern.heat_map_layer(vega, points, weights) f = io.BytesIO(base64.b64decode(hexstr)) img = plt.imread(f) ax.set(xlim=(bbox[0], bbox[2]), ylim=(bbox[1], bbox[3])) cx.add_basemap(ax, **extra_contextily_params) ax.imshow(img, alpha=img[:, :, 3], extent=(bbox[0], bbox[2], bbox[1], bbox[3]))
def heatmap(ax, points, weights, bounding_box, map_zoom_level=None, coordinate_system='EPSG:3857', aggregation_type='max', **extra_contextily_params): """ Plot heatmap in matplotlibs :type ax: AxesSubplot :param ax: Matplotlib axes object on which to add the basemap. :type points: GeoSeries :param points: Sequence of Points :type weights: Series(dtype: float|int64) :param weights: Weights of point intensity :type bounding_box: list :param bounding_box: Specify the bounding rectangle [west, south, east, north]. :type map_zoom_level: int :param map_zoom_level: Zoom level of heatmap. Default as auto. :type coordinate_system: str :param coordinate_system: Coordinate Reference System of the geometry objects. Must be SRID formed, e.g. 'EPSG:4326' or 'EPSG:3857' Default as 'EPSG:3857' :type aggregation_type: str :param aggregation_type: Aggregation type of data processing. Default as 'max' :type extra_contextily_params: dict :param extra_contextily_params: Extra parameters will be passed to contextily.add_basemap. See https://contextily.readthedocs.io/en/latest/reference.html for details :example: >>> import pandas as pd >>> import numpy as np >>> import arctern >>> import matplotlib.pyplot as plt >>> # read from test_data.csv >>> # Download link: https://raw.githubusercontent.com/arctern-io/arctern-resources/benchmarks/benchmarks/dataset/layer_rendering_test_data/test_data.csv >>> df = pd.read_csv("/path/to/test_data.csv", dtype={'longitude':np.float64, 'latitude':np.float64, 'color_weights':np.float64, 'size_weights':np.float64, 'region_boundaries':np.object}) >>> points = arctern.GeoSeries.point(df['longitude'], df['latitude']) >>> >>> # plot heatmap >>> fig, ax = plt.subplots(figsize=(10, 6), dpi=200) >>> arctern.plot.heatmap(ax, points, df['color_weights'], bounding_box=[-74.01424568752932, 40.72759334104623, -73.96056823889673, 40.76721122683304], coordinate_system='EPSG:4326') >>> plt.show() """ from matplotlib import pyplot as plt import contextily as cx bbox = _transform_bbox(bounding_box, coordinate_system, 'epsg:3857') w, h = _get_recom_size(bbox[2] - bbox[0], bbox[3] - bbox[1]) if map_zoom_level is None: map_zoom_level = _calc_zoom(bounding_box, coordinate_system) vega = vega_heatmap(w, h, bounding_box=bounding_box, map_zoom_level=map_zoom_level, aggregation_type=aggregation_type, coordinate_system=coordinate_system) hexstr = arctern.heat_map_layer(vega, points, weights) f = io.BytesIO(base64.b64decode(hexstr)) img = plt.imread(f) ax.set(xlim=(bbox[0], bbox[2]), ylim=(bbox[1], bbox[3])) cx.add_basemap(ax, **extra_contextily_params) ax.imshow(img, alpha=img[:, :, 3], extent=(bbox[0], bbox[2], bbox[1], bbox[3])) ax.axis('off')
def heatmap(ax, points, weights, bounding_box, map_zoom_level=None, coordinate_system='EPSG:3857', aggregation_type='max', **extra_contextily_params): """ Plots a heat map in matplotlib. Parameters ---------- ax : matplotlib.axes.Axes Axes where geometries will be plotted. points : GeoSeries Sequence of points. weights : Series Weights of point intensity. bounding_box : list Bounding box of the map. For example, [west, south, east, north]. map_zoom_level : [type], optional Zoom level of the map by default 'auto'. coordinate_system : str, optional The Coordinate Reference System (CRS) set to all geometries, by default 'EPSG:3857'. Only supports SRID as a WKT representation of CRS by now. aggregation_type : str, optional Aggregation type, by default 'max'. **extra_contextily_params: dict Extra parameters passed to `contextily.add_basemap. <https://contextily.readthedocs.io/en/latest/reference.html>`_ Examples ------- >>> import pandas as pd >>> import numpy as np >>> import arctern >>> import matplotlib.pyplot as plt >>> # read from test_data.csv >>> # Download link: https://raw.githubusercontent.com/arctern-io/arctern-resources/benchmarks/benchmarks/dataset/layer_rendering_test_data/test_data.csv >>> df = pd.read_csv("/path/to/test_data.csv", dtype={'longitude':np.float64, 'latitude':np.float64, 'color_weights':np.float64, 'size_weights':np.float64, 'region_boundaries':np.object}) >>> points = arctern.GeoSeries.point(df['longitude'], df['latitude']) >>> >>> # plot heatmap >>> fig, ax = plt.subplots(figsize=(10, 6), dpi=200) >>> arctern.plot.heatmap(ax, points, df['color_weights'], bounding_box=[-74.01424568752932, 40.72759334104623, -73.96056823889673, 40.76721122683304], coordinate_system='EPSG:4326') >>> plt.show() """ from matplotlib import pyplot as plt import contextily as cx bbox = _transform_bbox(bounding_box, coordinate_system, 'epsg:3857') w, h = _get_recom_size(bbox[2] - bbox[0], bbox[3] - bbox[1]) if map_zoom_level is None: map_zoom_level = _calc_zoom(bounding_box, coordinate_system) vega = vega_heatmap(w, h, bounding_box=bounding_box, map_zoom_level=map_zoom_level, aggregation_type=aggregation_type, coordinate_system=coordinate_system) hexstr = arctern.heat_map_layer(vega, points, weights) f = io.BytesIO(base64.b64decode(hexstr)) img = plt.imread(f) ax.set(xlim=(bbox[0], bbox[2]), ylim=(bbox[1], bbox[3])) cx.add_basemap(ax, **extra_contextily_params) ax.imshow(img, alpha=img[:, :, 3], extent=(bbox[0], bbox[2], bbox[1], bbox[3])) ax.axis('off')
def heatmap_wkb(point, w, conf=vega): from arctern import heat_map_layer return heat_map_layer(conf, point, w, False)