有时我们会很希望把数据展示在地图上,来做数据可视化,使数据更加清晰明了,可谓一图胜百文。先说说我用地图做什么了:微信好友全国分布,显示票房省份数据,全国评分显示等等,我这个语言能力很是头疼啊,进入正题吧!
在使用地图前需要安装一下适合自己的地图包:
要记得安装对应的地图拓展:
选择自己需要的安装
$ 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
主要地图来源于这两个 Map, Geo
from pyecharts import Map, Geo
定义数据
# 世界地图数据
value = [95.1, 23.2, 43.3, 66.4, 88.5]
attr= ["China", "Canada", "Brazil", "Russia", "United States"]
# 省和直辖市
province_distribution = {'河南': 45.23, '北京': 37.56, '河北': 21, '辽宁': 12, '江西': 6, '上海': 20, '安徽': 10, '江苏': 16, '湖南': 9, '浙江': 13, '海南': 2, '广东': 22, '湖北': 8, '黑龙江': 11, '澳门': 1, '陕西': 11, '四川': 7, '内蒙古': 3, '重庆': 3, '云南': 6, '贵州': 2, '吉林': 3, '山西': 12, '山东': 11, '福建': 4, '青海': 1, '舵主科技,质量保证': 1, '天津': 1, '其他': 1}
provice=list(province_distribution.keys())
values=list(province_distribution.values())
# 城市 -- 指定省的城市 xx市
city = ['郑州市', '安阳市', '洛阳市', '濮阳市', '南阳市', '开封市', '商丘市', '信阳市', '新乡市']
values2 = [1.07, 3.85, 6.38, 8.21, 2.53, 4.37, 9.38, 4.29, 6.1]
# 区县 -- 具体城市内的区县 xx县
quxian = ['夏邑县', '民权县', '梁园区', '睢阳区', '柘城县', '宁陵县']
values3 = [3, 5, 7, 8, 2, 4]
世界地图
map0 = Map("世界地图示例", width=1200, height=600)
map0.add("世界地图", attr, value, maptype="world", is_visualmap=True, visual_text_color='#000')
map0.render(path="./data/04-00世界地图.html")
中国地图:
# maptype='china' 只显示全国直辖市和省级
# 数据只能是省名和直辖市的名称
map = Map("中国地图",'中国地图', width=1200, height=600)
map.add("", provice, values, visual_range=[0, 50], maptype='china', is_visualmap=True,
visual_text_color='#000')
map.show_config()
map.render(path="./data/04-01中国地图.html")
# 河南地图 数据必须是省内放入城市名
map2 = Map("河南地图",'河南', width=1200, height=600)
map2.add('河南', city, values2, visual_range=[1, 10], maptype='河南', is_visualmap=True, visual_text_color='#000')
map2.show_config()
map2.render(path="./data/04-02河南地图.html")
区县地图
# # 商丘地图 数据为商丘市下的区县
map3 = Map("商丘地图",'商丘', width=1200, height=600)
map3.add("商丘", quxian, values3, visual_range=[1, 10], maptype='商丘', is_visualmap=True,
visual_text_color='#000')
map3.render(path="./data/04-03商丘地图.html")
热力分布图(可直接使用全国城市)
data = [
("海门", 9),("鄂尔多斯", 12),("招远", 12),("舟山", 12),("齐齐哈尔", 14),("盐城", 15),
("赤峰", 16),("青岛", 18),("乳山", 18),("金昌", 19),("泉州", 21),("莱西", 21),
("日照", 21),("胶南", 22),("南通", 23),("拉萨", 24),("云浮", 24),("梅州", 25)]
attr, value = geo.cast(data)
geo = Geo("全国主要城市空气质量热力图", "data from pm2.5", title_color="#fff", title_pos="center", width=1200, height=600, background_color='#404a59')
geo.add("空气质量热力图", attr, value, visual_range=[0, 25], type='heatmap',visual_text_color="#fff", symbol_size=15, is_visualmap=True, is_roam=False)
geo.show_config()
geo.render(path="./data/04-04空气质量热力图.html")
# 空气质量评分
indexs = ['上海', '北京', '合肥', '哈尔滨', '广州', '成都', '无锡', '杭州', '武汉', '深圳', '西安', '郑州', '重庆', '长沙']
values = [4.07, 1.85, 4.38, 2.21, 3.53, 4.37, 1.38, 4.29, 4.1, 1.31, 3.92, 4.47, 2.40, 3.60]
geo = Geo("全国主要城市空气质量评分", "data from pm2.5", title_color="#fff", title_pos="center", width=1200, height=600, background_color='#404a59')
# type="effectScatter", is_random=True, effect_scale=5 使点具有发散性
geo.add("空气质量评分", indexs, values, type="effectScatter", is_random=True, effect_scale=5, visual_range=[0, 5],visual_text_color="#fff", symbol_size=15, is_visualmap=True, is_roam=False)
geo.show_config()
geo.render(path="./data/04-05空气质量评分.html")
常用图形:柱形图-折线图-饼图-散点图
from pyecharts import Line, Bar, Pie, EffectScatter
# 数据
attr =["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 =[5, 20, 36, 10, 10, 100]
v2 =[55, 60, 16, 20, 15, 80]
柱形图
bar = Bar('柱形图', '库存量')
bar.add('服装', attr, v1, is_label_show=True)
bar.show_config()
bar.render(path='./data/01-01柱形图.html')
bar2 = Bar("显示标记线和标记点")
bar2.add('商家A', attr, v1, mark_point=['avgrage'])
bar2.add('商家B', attr, v2, mark_point=['min', 'max'])
bar2.show_config()
bar2.render(path='./data/01-02标记点柱形图.html')
bar3 = Bar("水平显示")
bar3.add('商家A', attr, v1)
bar3.add('商家B', attr, v2, is_convert=True)
bar3.show_config()
bar3.render(path='./data/01-03水平柱形图.html')
attr = ['衬衫','羊毛衫','雪纺衫','裤子','高跟鞋','袜子']
v1 = [5,20,36,10,75,90]
v2 = [10,25,8,60,20,80]
bar = Bar('柱状信息堆叠图')
bar.add('商家A',attr,v1,is_stack = True) #is_stack = True才表示堆叠在一起
bar.add('商家B',attr,v2,is_stack = True)
bar.render('./html/first03.html')
折线图
# 普通折线图
line = Line('折线图')
line.add('商家A', attr, v1, mark_point=['max'])
line.add('商家B', attr, v2, mark_point=['min'], is_smooth=True)
line.show_config()
line.render(path='./data/01-04折线图.html')
# 阶梯折线图
line2 = Line('阶梯折线图')
line2.add('商家A', attr, v1, is_step=True, is_label_show=True)
line2.show_config()
line2.render(path='./data/01-05阶梯折线图.html')
# 面积折线图
line3 =Line("面积折线图")
line3.add("商家A", attr, v1, is_fill=True, line_opacity=0.2, area_opacity=0.4, symbol=None, mark_point=['max'])
line3.add("商家B", attr, v2, is_fill=True, area_color='#a3aed5', area_opacity=0.3, is_smooth=True)
line3.show_config()
line3.render(path='./data/01-06面积折线图.html')
柱形图-折线图
# 柱形图-折线图
from pyecharts import Bar, Line, Overlap
att = ['A', 'B', 'C', 'D', 'E', 'F']
v3 = [10, 20, 30, 40, 50, 60]
v4 = [38, 28, 58, 48, 78, 68]
bar = Bar("柱形图-折线图")
bar.add('bar', att, v3)
line = Line()
line.add('line', att, v4)
overlap = Overlap()
overlap.add(bar)
overlap.add(line)
overlap.show_config()
overlap.render(path='./data/01-066柱形图-折线图.html')
饼图
# 饼图
pie = Pie('饼图')
pie.add('芝麻饼', attr, v1, is_label_show=True)
pie.show_config()
pie.render(path='./data/01-07饼图.html')
# 玫瑰饼图
pie2 = Pie("饼图-玫瑰图示例", title_pos='center', width=900)
pie2.add("商品A", attr, v1, center=[25, 50], is_random=True, radius=[30, 75], rosetype='radius')
pie2.add("商品B", attr, v2, center=[75, 50], is_random=True, radius=[30, 75], rosetype='area', is_legend_show=False, is_label_show=True)
pie2.show_config()
pie2.render(path='./data/01-08玫瑰饼图.html')
散点图
静态散点图
from pyecharts import Scatter
# 散点图
v1 =[10, 20, 30, 40, 50, 60]
v2 =[10, 20, 30, 40, 50, 60]
scatter =Scatter("散点图示例")
scatter.add("A", v1, v2)
scatter.add("B", v1[::-1], v2)
scatter.show_config()
scatter.render(path='./data/03-06散点图.html')
# 散点打印Pyecharts字体 白底图片
scatter =Scatter("散点图示例")
v1, v2 = scatter.draw("./data/two.jpg")
scatter.add("pyecharts", v1, v2, is_random=True)
scatter.show_config()
scatter.render(path='./data/03-06打印字体.html')
动态散点图
from pyecharts import EffectScatter
attr =["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 =[5, 20, 36, 10, 10, 100]
v2 =[55, 60, 16, 20, 15, 80]
# 动态散点图
es =EffectScatter("动态散点图")
# v1 x坐标 v2 y坐标
es.add("商家", v1, v2)
es.show_config()
es.render('./data/01-09散点图.html')
# 动态散点图各种图形
es = EffectScatter("动态散点图各种图形")
es.add("", [10], [10], symbol_size=20, effect_scale=3.5, effect_period=3, symbol="pin")
es.add("", [20], [20], symbol_size=12, effect_scale=4.5, effect_period=4,symbol="rect")
es.add("", [30], [30], symbol_size=30, effect_scale=5.5, effect_period=5,symbol="roundRect")
es.add("", [40], [40], symbol_size=10, effect_scale=6.5, effect_brushtype='fill',symbol="diamond")
es.add("", [50], [50], symbol_size=16, effect_scale=5.5, effect_period=3,symbol="arrow")
es.add("", [60], [60], symbol_size=6, effect_scale=2.5, effect_period=3,symbol="triangle")
es.show_config()
es.render(path = "./data/01-10动态散点图各种图形.html")
多个饼图
from pyecharts import Pie
pie =Pie('各类电影中"好片"所占的比例', "数据来着豆瓣", title_pos='center')
pie.add("", ["剧情", ""], [25, 75], center=[10, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None, )
pie.add("", ["奇幻", ""], [24, 76], center=[30, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None, legend_pos='left')
pie.add("", ["爱情", ""], [14, 86], center=[50, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["惊悚", ""], [11, 89], center=[70, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["冒险", ""], [27, 73], center=[90, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["动作", ""], [15, 85], center=[10, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["喜剧", ""], [54, 46], center=[30, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["科幻", ""], [26, 74], center=[50, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["悬疑", ""], [25, 75], center=[70, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["犯罪", ""], [28, 72], center=[90, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None, is_legend_show=True, legend_top="center")
pie.show_config()
pie.render(path='./data/01-多个饼图.html')
多标记柱形图
from pyecharts import Bar
attr =["{}月".format(i) for i in range(1, 13)]
v1 =[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
v2 =[2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]
bar =Bar("柱状图示例")
bar.add("蒸发量", attr, v1, mark_line=["average"], mark_point=["max", "min"])
bar.add("降水量", attr, v2, mark_line=["average"], mark_point=["max", "min"])
bar.show_config()
bar.render(path='./data/02-多标记柱形图.html')
支持保存做种格式
对象.render(path='snapshot.html')
对象.render(path='snapshot.png')
对象.render(path='snapshot.pdf')
举个例子:
bar = Bar("我的第一个图表", "这里是副标题")
bar.add("服装", ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"], [5, 20, 36, 10, 75, 90])
# bar.print_echarts_options()
bar.render(path='snapshot.html')
bar.render(path='snapshot.png')
bar.render(path='snapshot.pdf')
绘制图形: 仪表盘 - 漏斗图 - 关系图 - 水球 - 极坐标 - 雷达
from pyecharts import Funnel, Gauge, Graph
attr =["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 =[5, 20, 36, 56, 78, 100]
v2 =[55, 60, 16, 20, 15, 80]
仪表盘
# 仪表盘
gauge = Gauge("仪表盘")
gauge.add('业务指标', '完成率', 66.66)
gauge.show_config()
gauge.render(path="./data/02-02仪表盘.html")
漏斗图
# 漏斗图
funnel = Funnel('漏斗图')
funnel.add('商品', attr, v1, is_label_show=True, label_pos='inside', label_text_color="#fff")
funnel.show_config()
funnel.render(path="./data/02-01漏斗图.html")
关系图
from pyecharts import Graph
nodes = [{"name": "结点1", "symbolSize": 1},
{"name": "结点2", "symbolSize": 2},
{"name": "结点3", "symbolSize": 3},
{"name": "结点4", "symbolSize": 4},
{"name": "结点5", "symbolSize": 5},
]
links = []
for i in nodes:
for j in nodes:
links.append({"source": i.get('name'), "target": j.get('name')})
graph = Graph("关系图示例")
graph.add("",nodes,links,
categories=None, # 结点分类的类目,结点可以指定分类,也可以不指定。
is_focusnode=True, # 是否在鼠标移到节点上的时候突出显示节点以及节点的边和邻接节点。默认为 True
is_roam=True,
is_rotatelabel=True, # 是否旋转标签,默认为 False
graph_layout="force", # 布局类型,默认force=力引导图,circular=环形布局
graph_edge_length=300, # 力布局下边的两个节点之间的距离,这个距离也会受 repulsion 影响。默认为 50,TODO 值越大则长度越长
graph_gravity=0.5, # 点受到的向中心的引力因子。TODO 该值越大节点越往中心点靠拢。默认为 0.2
graph_repulsion=100, # 节点之间的斥力因子。默认为 50,TODO 值越大则斥力越大
is_label_show=True,
line_curve=0.2 # 线的弯曲度
)
graph.render("./pyecharts_html/关系图系列.html")
from pyecharts import Liquid, Polar, Radar
水球
liquid =Liquid("水球图")
liquid.add("Liquid", [0.6])
liquid.show_config()
liquid.render(path='./data/03-01水球.html')
# 圆形水球
liquid2 =Liquid("水球图示例")
liquid2.add("Liquid", [0.6, 0.5, 0.4, 0.3], is_liquid_outline_show=False)
liquid2.show_config()
liquid2.render(path='./data/03-02圆形水球.html')
# 菱形水球
liquid3 =Liquid("水球图示例")
liquid3.add("Liquid", [0.6, 0.5, 0.4, 0.3], is_liquid_animation=False, shape='diamond')
liquid3.show_config()
liquid3.render(path='./data/03-03菱形水球.html')
极坐标
# 极坐标
radius =['周一', '周二', '周三', '周四', '周五', '周六', '周日']
polar =Polar("极坐标系-堆叠柱状图示例", width=1200, height=600)
polar.add("A", [1, 2, 3, 4, 3, 5, 1], radius_data=radius, type='barRadius', is_stack=True)
polar.add("B", [2, 4, 6, 1, 2, 3, 1], radius_data=radius, type='barRadius', is_stack=True)
polar.add("C", [1, 2, 3, 4, 1, 2, 5], radius_data=radius, type='barRadius', is_stack=True)
polar.show_config()
polar.render(path='./data/03-04极坐标.html')
雷达图
# 雷达图
schema =[ ("销售", 6500), ("管理", 16000), ("信息技术", 30000), ("客服", 38000), ("研发", 52000), ("市场", 25000)]
v1 =[[4300, 10000, 28000, 35000, 50000, 19000]]
v2 =[[5000, 14000, 28000, 31000, 42000, 21000]]
radar =Radar()
radar.config(schema)
radar.add("预算分配", v1, is_splitline=True, is_axisline_show=True)
radar.add("实际开销", v2, label_color=["#4e79a7"], is_area_show=False)
radar.show_config()
radar.render(path='./data/03-05雷达图.html')
from pyecharts import WordCloud
name =['Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications', 'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp', 'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham', 'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break']
value =[10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112, 965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265]
wordcloud =WordCloud(width=1300, height=620)
wordcloud.add("", name, value, word_size_range=[20, 100])
wordcloud.show_config()
wordcloud.render(path='./data/05-01权重词云.html')
wordcloud2 =WordCloud(width=1300, height=620)
wordcloud2.add("", name, value, word_size_range=[30, 100], shape='diamond')
wordcloud2.show_config()
wordcloud2.render(path='./data/05-02变形词云.html')
image.png
中文词云
# 中文显示
from wordcloud import WordCloud, ImageColorGenerator
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
words = ['好看', '不错', '人性', '可以', '值得', '真的', '一部', '感觉', '喜欢', '一般', '演技', '还是',
'剧情', '一出', '有点', '出好', '好戏', '不是', '没有', '非常', '哈哈', '喜剧', '就是', '一个',
'现实', '什么', '支持', '还行', '但是', '很多', '觉得', '搞笑', '值得一看', '故事', '看好',
'这部', '哈哈哈', '失望', '最后', '导演', '自己', '演员', '看完', '社会', '特别', '看到', '不好',
'比较', '表达', '那么', '作品', '个人', '东西', '思考', '这个', '第一', '不过', '情节',
'哈哈哈哈', '意思', '一直', '推荐', '一般般', '时候', '开始', '般般', '片子', '知道', '处女',
'期待', '很棒', '影院', '深度', '反应', '无聊', '可能', '一些', '精彩', '爱情', '这么', '希望',
'一点', '不知', '有些', '还好', '恐怖', '看着', '没看', '还有', '观看', '后面', '真实', '因为',
'如果', '出来', '部分', '确实', '我们', '意义', '深刻']
new_worlds = " ".join(words)
# 参照图片
coloring = np.array(Image.open("./data/huangbo.jpg"))
# simkai.ttf 必填项 识别中文的字体,例:simkai.ttf,
my_wordcloud = WordCloud(background_color="white", max_words=800,
mask=coloring, max_font_size=120, random_state=30, scale=2,font_path="./data/simkai.ttf").generate(new_worlds)
image_colors = ImageColorGenerator(coloring)
plt.imshow(my_wordcloud.recolor(color_func=image_colors))
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
# 保存图片
my_wordcloud.to_file('./data/05-03signature.png')
作者:Python疯子
链接:https://www.jianshu.com/p/96fe420ddd76
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处