目录
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()
不管是运用哪一种方法最终都能实现预想图
四、总结
这是我学习数据可视化的内容之一,这也是我第一次发表博客文章,我知道自己写的这篇文章呈现的内容不是很好,我自己本身也有很多的不足之处,还请大家多多指点指点。