数据可视化——由Map类创建的地图用于绘制不同地区不同配色的地图

目录

前言:

pyecharts概念:

一、效果展示

 二、所需工具与环境配置

三、实操过程

1.导入相关库

2.构造数据

3.地图显示设置

4.解决方法:配置分段色阶

5.除此之外,我们还可以编写一个能够生成pieces参数对象的函数

 四、总结


前言:

博主只是一个普普通通的计算机专业女大学生,虽然说学的专业是计算机,但是技术学的不是很好,老师说期末考核要写一个博客,我也不知道要写什么,就迷迷糊糊写了这篇map类色阶地图,有什么说的不对的地方,还请大家多多指点,谢谢大家。

pyecharts概念:

1、pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果很是棒,pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。使用pyecharts能够生成独立的网页,也能够在flask、django中集成使用。

2、pyecharts中提供了两种地图,map地图和geo地理坐标系,两者都能够满足地图显示需求,但在实际应用过程中,需要调整的地方还有很多。本文主要介绍关于map显示调整,因为需求为图片输出,所以不涉及交互效果部分内容。

一、效果展示

本文使用python库——pyecharts绘制地图,修改标签样式并调色。

 二、所需工具与环境配置

  • 打开Anaconda,下载pyecharts插件
pip install pyecharts
  • 版本检查
pyecharts.__version__
  • 使用map需要在Anaconda中下载地图拓展包(新版Anaconda已经不需要手动下载)map是实现地图区域可视化,是区域可视化,需要安装以下额外拓展包
pip install echarts-countries-pypkg     

pip install echarts-china-provinces-pypkg 

pip install echarts-china-cities-pypkg 

pip install echarts-china-counties-pypkg

pip install echarts-china-misc-pypkg

pip install echarts-united-kingdom-pypkg

三、实操过程

1.导入相关库

from pyecharts import options as opts
from pyecharts.charts import Map

2.构造数据

地图对象接收的数据需要是二维列表。[[省份,数据],...,...]

provinces = ['广东省','广西壮族自治区','湖南省','江西省']
values = [20,50,80,1000]
data = [list(z) for z in zip(provinces, values)]
data

3.地图显示设置

c = (
    Map()
    .add("", data , "china")
    .set_global_opts(title_opts=opts.TitleOpts(title="Map-基本示例"),
                     visualmap_opts=opts.VisualMapOpts(
                         range_color = ['yellow','red'],
                         max_ = 1000
                     ), # 色阶配置项,用颜色表示数字大小
                    )
)
c.render_notebook()

一顿操作猛如虎,随后我们就得到了下面这张图

得到这张图以后,我们就会发现,这图做出来的效果和我们预想的效果不一样啊,这湖南、广东、广西的图形颜色差异性都没有体现出来。

4.解决方法:配置分段色阶

调用色阶配置项visualmap_opts来对不同数据对应的区域进行颜色配置。

# 分段色阶基本配置方法
pieces = [
    {'max': 50, 'label': '100以下', 'color': 'yellow'},
    {'min': 50, 'max': 100, 'label': '100以下', 'color': 'orange'},
    {'min': 100, 'label': '100以上', 'color': 'red'}  # 有下限无上限
]
c = (
    Map()
    .add("", data , "china")
    .set_global_opts(title_opts=opts.TitleOpts(title="Map-基本示例"),
                     visualmap_opts=opts.VisualMapOpts(
                        is_piecewise = True,
                        pieces = pieces
                     ), # 色阶配置项,用颜色表示数字大小
                    )
)
c.render_notebook()

配置好以后,我们就得到了一个新的预想图

5.除此之外,我们还可以编写一个能够生成pieces参数对象的函数

  • 方法一:颜色用循环生成,其他参数手写
import numpy as np
pieces = [
    {'max': 1, 'label': '0以下', 'color': ''},
    {'min': 1, 'max': 10, 'label': '1-10', 'color': ''},
    {'min': 10, 'max': 20, 'label': '10-20', 'color': ''},
    {'min': 20, 'max': 30, 'label': '20-30', 'color': ''},
    {'min': 30, 'max': 50, 'label': '30-50', 'color': ''},
    {'min': 50, 'max': 100, 'label': '50-100', 'color': ''},
    {'min': 100, 'max': 200, 'label': '100-200', 'color': ''},
    {'min': 200, 'label': '200以上', 'color': ''}  # 有下限无上限
]

设置颜色的等差数列

color = [f'rgb(255,{i},255)' for i in np.linspace(255,150,8)]

把颜色代码赋值到pieces中

for i in range(8): 
    pieces[i]['color'] = color[i]
pieces
  • 方法二:所有参数均用循环生成
min_list = [0,10,20,30,50,100,200]
max_list = [min_list[i+1] if i<len(min_list)-1 else 0 for i in range(len(min_list))]
label_list = [f'{i}-{j}' if j!=0 else f'{i}以上' for i,j in zip(min_list,max_list)]
color_list = [f'rgb(255,{i},255)' for i in np.linspace(255,150,len(min_list))]
pieces = [{'min': a,'max':b,'label':c,'color':d} if b!=0 else {'min': a,'label':c,'color':d} for a,b,c,d in zip(min_list,max_list,label_list,color_list)]
pieces

生成一个pieces参数值得函数

def get_pieces(min_list,r,g,b,c_begin,c_end):
    '''
    min_list:接收各区间的最小值
    r,g,b:都接收数字,表示三元色的参数,若数值介于[0,255]之间,则表示该颜色参数为固定值,若数值为-1,则表示相应的颜色参数为变化的值
    c_begin:颜色参数变化的起始值
    c_end:颜色参数变化的末尾值
    '''
    max_list = [min_list[i+1] if i<len(min_list)-1 else 0 for i in range(len(min_list))]
    label_list = [f'{i}-{j}' if j!=0 else f'{i}以上' for i,j in zip(min_list,max_list)]
    if r==-1 and g>=0 and b>=0 :
        color_list = [f'rgb({i},{g},{b})' for i in np.linspace(c_begin,c_end,len(min_list))]
    elif r>=0 and g==-1 and b>=0:
        color_list = [f'rgb({r},{i},{b})' for i in np.linspace(c_begin,c_end,len(min_list))]
    elif r>=0 and g>=0 and b==-1:
        color_list = [f'rgb({r},{g},{i})' for i in np.linspace(c_begin,c_end,len(min_list))]
    else:
        print(r'目前只能指定一个变化的颜色参数,请在r\g\b中选一个并设置其参数为-1,其他设置为>0的定值。')
    pieces = [{'min': a,'max':b,'label':c,'color':d} if b!=0 else {'min': a,'label':c,'color':d} for a,b,c,d in zip(min_list,max_list,label_list,color_list)]
    return pieces

地图显示设置

pieces = get_pieces(
    min_list = [0,50,100,200,500],
    r = 0, g = -1, b = 255,
    c_begin = 255, c_end = 100
)
c = (
    Map()
    .add("", data , "china")
    .set_global_opts(title_opts=opts.TitleOpts(title="Map-基本示例"),
                     visualmap_opts=opts.VisualMapOpts(
                         is_piecewise = True,
                         pieces = pieces
                     ), # 色阶配置项,用颜色表示数字大小
                    )
)
c.render_notebook()

不管是运用哪一种方法最终都能实现预想图

 

 四、总结

这是我学习数据可视化的内容之一,这也是我第一次发表博客文章,我知道自己写的这篇文章呈现的内容不是很好,我自己本身也有很多的不足之处,还请大家多多指点指点。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值