可视化 | 教你用Python实现热力图(一)

本文正在参与新星计划Python学习方向,详情请看:(93条消息) lifein的博客_CSDN博客-SQL SERVER,计算机三级——数据库领域博主

目录


一、导引

        在可视化中,热力图可以使用颜色深浅或者指定颜色来直观的表示目前已有数据情况。热力图的表现形式不只有上面的地图热力图,在Pearson相关性系数的时候也同样会用到热力图。

        本文将会围绕地图热力图和Pearson相关性系数的可视化进行讲解(并附代码)。

二、内容

(一)地图热力图:(动态地图)

1、环境搭建:

如果没有下载相关绘图的包,需要先

pip install pyecharts
#pip install pyecharts
from pyecharts import options as opts
from pyecharts.charts import Map
import pandas as pd

2、地图代码:(原始)

        1)初始化配置

class Map(
    # 初始化配置项
    init_opts: opts.InitOpts = opts.InitOpts()
)
#Map(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION))

        · theme: pyecharts内置提供了10+ 种不同的风格。

        2)添加数据:add() 

def add(
    series_name: str,
    data_pair: types.Sequence[types.Union[types.Sequence, opts.MapItem, dict]],
    maptype: str = "china",
    is_selected: bool = True,
    # 是否开启鼠标缩放和平移漫游。
    is_roam: bool = True,
    # 当前视角的中心点,用经纬度表示
    center: Optional[Sequence] = None,
    # 参数用于 scale 地图的长宽比。
    aspect_scale: types.Numeric = 0.75,
    # 二维数组,定义定位的左上角以及右下角分别所对应的经纬度。
    bounding_coords: types.Optional[types.Sequence[types.Numeric]] = None,
    # 最小的缩放值。
    min_scale_limit: types.Optional[types.Numeric] = None,
    # 最大的缩放值。
    max_scale_limit: types.Optional[types.Numeric] = None,
    # 默认是 'name',针对 GeoJSON 要素的自定义属性名称,作为主键用于关联数据点和 GeoJSON 地理要素。
    name_property: str = "name",
    # 选中模式,表示是否支持多个选中,默认关闭,支持布尔值和字符串。
    # 字符串取值可选'single'表示单选,或者'multiple'表示多选。
    selected_mode: types.Union[bool, str] = False,
    # 当前视角的缩放比例。
    zoom: Optional[Numeric] = 1,
    # 自定义地区的名称映射
    name_map: Optional[dict] = None,
    # 标记图形形状
    symbol: Optional[str] = None,
    # 多个拥有相同地图类型的系列会使用同一个地图展现。
    # 如果多个系列都在同一个区域有值,ECharts 会对这些值统计得到一个数据。
    # 这个配置项就是用于配置统计的方式,目前有:
    # 'sum' 取和。
    # 'average' 取平均值。
    # 'max' 取最大值。
    # 'min' 取最小值。
    map_value_calculation: str = "sum",
    # 是否显示标记图形
    is_map_symbol_show: bool = True,
    # pyecharts 暂时没有提供 left/top/right/bottom 的配置
    # layoutCenter 和 layoutSize 提供了除了 left/right/top/bottom/width/height 之外的布局手段。
    # 在使用 left/right/top/bottom/width/height 的时候
    # 可能很难在保持地图高宽比的情况下把地图放在某个盒形区域的正中间,并且保证不超出盒形的范围。
    # 此时可以通过 layoutCenter 属性定义地图中心在屏幕中的位置,layoutSize 定义地图的大小。
    # 如下示例
    # layoutCenter: ['30%', '30%'],
    # // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
    # layoutSize: 100
    layout_center: types.Optional[types.Sequence[str]] = None,
    # 地图的大小,见 layoutCenter。支持相对于屏幕宽高的百分比或者绝对的像素大小。
    layout_size: types.Union[str, types.Numeric] = None,
    # 标签配置项,参考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
    # 提示框组件配置项,参考 `series_options.TooltipOpts`
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
    # 高亮标签配置项,参考 `series_options.LabelOpts`
    emphasis_label_opts: Union[opts.LabelOpts, dict, None] = None,
    # 高亮图元样式配置项,参考 `series_options.ItemStyleOpts`
    emphasis_itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)

        主要参数解释:

        · series_name:系列名称,用于 tooltip 的显示,legend 的图例筛选。

        · data_pair:数据项 (坐标点名称,坐标点值)

        · maptype:地图类型

        · is_selected:是否选中图例

        · aspect_scale:参数用于 scale 地图的长宽比

        · min_scale_limit:最小的缩放值

        · max_scale_limit:最大的缩放值

        · layout_size:地图的大小,支持相对于屏幕宽高的百分比或者绝对的像素大小。

        · label_opts:标签配置项

        3)MapItem:地图数据项

class MapItem(
    # 数据所对应的地图区域的名称,例如 '广东','浙江'。
    name: Optional[str] = None,
    # 该区域的数据值。
    value: Optional[Numeric] = None,
    # 该区域是否选中。
    is_selected: bool = False,
    # 标签配置项,参考 `series_options.LabelOpts`
    label_opts: Union[LabelOpts, dict, None] = None,
    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,
    # 提示框组件配置项,参考 `series_options.TooltipOpts`
    tooltip_opts: Union[TooltipOpts, dict, None] = None,
)

        4)设置系列配置项

.set_series_opts()

除了在.add()中设置部分配置项外,就是使用.set_series_opts()配置图元样式、文字样式、标签样式、点线样式等。

        5)设置全局配置项

.set_global_opts()

 配置标题、动画、坐标轴、图例等。

        6)案例

def china_map(data_pair):
    Map(init_opts=opts.InitOpts(theme='white', width='1280px', height='720px')
        ).add(  series_name="",
                data_pair=data_pair,
                maptype="china",
                label_opts=opts.LabelOpts(is_show=True,position='inside',),is_map_symbol_show=False,
    ).set_global_opts(
        title_opts=opts.TitleOpts(
            title="2022年6月各省票房排名 热力图",
            pos_left="center",
            pos_top="20",
            title_textstyle_opts=opts.TextStyleOpts(
                font_size=28,
                font_family="Microsoft YaHei",),
            subtitle='统计时间:2022年6月',
            subtitle_textstyle_opts=opts.TextStyleOpts(
                font_size=12, font_family="Microsoft YaHei"),
        ),
        tooltip_opts=opts.TooltipOpts(
            is_show=True,
            formatter="{b} : 现有票房{c}万元",
        ),
        visualmap_opts=opts.VisualMapOpts(
            is_piecewise=True,
            dimension=0,
            pos_left="10",
            pos_bottom="20",
            pieces=[
                {'max': 1, 'min': 0, 'label': '0-1', 'color': '#FFFFFF'},
                {'max': 9, 'min': 1, 'label': '1-9', 'color': '#FFFFCC'},
                {'max': 99, 'min': 10, 'label': '10-99', 'color': '#FFC4B3'},
                {'max': 499, 'min': 100, 'label': '100-499', 'color': '#FF9985'},
                {'max': 999, 'min': 500, 'label': '500-999', 'color': '#F57567'},
                {'max': 4999, 'min': 1000, 'label': '1000-4999', 'color': '#E64546'},
                {'max': 9999, 'min': 5000, 'label': '5000-9999', 'color': '#B80909'},
                {'max': 49999, 'min': 10000, 'label': '10000-49999', 'color': '#8A0808'},
                {'max': 99999, 'min': 50000, 'label': '>=50000', 'color': '#660000'}
            ]
        )
    ).render('前100城市排名202206.html')

if __name__ == '__main__':
    df = pd.read_excel('filename')  # 利用pandas读取数据
    City_list = df["省区市"] # 各省/区的名字列表
    data_list = df["票房"] # 数据
    data_pair = [x for x in zip(City_list, data_list)]
china_map(data_pair)

有任何问题,欢迎在下方评论留言。

更多可视化内容,详见个人主页:

(97条消息) lifein的博客_CSDN博客-SQL SERVER,计算机三级——数据库领域博主

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年5月24日
下一篇 2023年5月24日

相关推荐