人生苦短,我要用pyecharts画图
公众号:经管人学数据分析
在《狄仁杰之四大天王》影评分析一文中,胡萝卜酱采用了pyecharts来画热力图,交流群里有小伙伴说这个库实在太好用了,于是这一次专门介绍一下这个库。pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。
01 基本使用
通过pip安装好pyecharts后,我们首先通过一个简单的示例来认识一下pyecharts吧。
1from pyecharts import Bar
2
3bar = Bar("我的第一个图表", "这里是副标题")
4bar.use_theme('light') #使用主题
5bar.add("服装", ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
6 [5, 20, 36, 10, 75, 90], is_more_utils=True)
7#bar.print_echarts_options() # 该行只为了打印配置项,方便调试时使用
8bar.render() # 生成本地 HTML 文件
add()
主要方法,用于添加图表的数据和设置各种配置项。数据一般为两个列表(长度一致)。如果你的数据是字典或者是带元组的字典。可利用cast()
方法转换。print_echarts_options()
打印输出图表的所有配置项render()
默认将会在根目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置,如 render(r"e:\my_first_chart.html"),文件用浏览器打开。use_theme()
自 0.5.2+ 起,pyecharts 支持更换主体色系。
如果想直接将图片保存为 png, pdf, gif 格式的文件,可以使用 pyecharts snapshot。使用该插件请确保你的系统上已经安装了 Nodejs 环境。
(Note: 使用 Pandas&Numpy 时,整数类型请确保为 int,而不是 numpy.int32。)
由于图表配置项实在太多了,这里就不介绍了,我们通过几个较为特殊的图来了解一些常用的配置项即可。
02 地理坐标图
可以通过pip安装一些地图扩展:
$ 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(英国地图)
我们通过简单的举例来展示一下,因为图例类型有'scatter', 'effectScatter', 'heatmap'可选,所以我们分别画一下。
1from pyecharts import Geo
2
3data = [
4 ("海门", 9),("鄂尔多斯", 12),("招远", 12),("舟山", 12),("齐齐哈尔", 14),("盐城", 15),
5 ("赤峰", 16),("青岛", 18),("乳山", 18),("金昌", 19),("泉州", 21),("莱西", 21),
6 ("日照", 21),("胶南", 22),("南通", 23),("拉萨", 24),("云浮", 24),("梅州", 25),
7 ("文登", 25),("上海", 25),("攀枝花", 25),("威海", 25),("承德", 25),("厦门", 26),
8 ("汕尾", 26),("潮州", 26),("丹东", 27),("太仓", 27),("曲靖", 27),("烟台", 28),
9 ("福州", 29),("瓦房店", 30),("即墨", 30),("抚顺", 31),("玉溪", 31),("张家口", 31),
10 ("阳泉", 31),("莱州", 32),("湖州", 32),("汕头", 32),("昆山", 33),("宁波", 33),
11 ("湛江", 33),("揭阳", 34),("荣成", 34),("连云港", 35),("葫芦岛", 35),("常熟", 36),
12 ("东莞", 36),("河源", 36),("淮安", 36),("泰州", 36),("南宁", 37),("营口", 37),
13 ("惠州", 37),("江阴", 37),("蓬莱", 37),("韶关", 38),("嘉峪关", 38),("广州", 38),
14 ("延安", 38),("太原", 39),("清远", 39),("中山", 39),("昆明", 39),("寿光", 40),
15 ("盘锦", 40),("长治", 41),("深圳", 41),("珠海", 42),("宿迁", 43),("咸阳", 43),
16 ("铜川", 44),("平度", 44),("佛山", 44),("海口", 44),("江门", 45),("章丘", 45),
17 ("肇庆", 46),("大连", 47),("临汾", 47),("吴江", 47),("石嘴山", 49),("沈阳", 50),
18 ("苏州", 50),("茂名", 50),("嘉兴", 51),("长春", 51),("胶州", 52),("银川", 52),
19 ("张家港", 52),("三门峡", 53),("锦州", 54),("南昌", 54),("柳州", 54),("三亚", 54),
20 ("自贡", 56),("吉林", 56),("阳江", 57),("泸州", 57),("西宁", 57),("宜宾", 58),
21 ("呼和浩特", 58),("成都", 58),("大同", 58),("镇江", 59),("桂林", 59),("张家界", 59),
22 ("宜兴", 59),("北海", 60),("西安", 61),("金坛", 62),("东营", 62),("牡丹江", 63),
23 ("遵义", 63),("绍兴", 63),("扬州", 64),("常州", 64),("潍坊", 65),("重庆", 66),
24 ("台州", 67),("南京", 67),("滨州", 70),("贵阳", 71),("无锡", 71),("本溪", 71),
25 ("克拉玛依", 72),("渭南", 72),("马鞍山", 72),("宝鸡", 72),("焦作", 75),("句容", 75),
26 ("北京", 79),("徐州", 79),("衡水", 80),("包头", 80),("绵阳", 80),("乌鲁木齐", 84),
27 ("枣庄", 84),("杭州", 84),("淄博", 85),("鞍山", 86),("溧阳", 86),("库尔勒", 86),
28 ("安阳", 90),("开封", 90),("济南", 92),("德阳", 93),("温州", 95),("九江", 96),
29 ("邯郸", 98),("临安", 99),("兰州", 99),("沧州", 100),("临沂", 103),("南充", 104),
30 ("天津", 105),("富阳", 106),("泰安", 112),("诸暨", 112),("郑州", 113),("哈尔滨", 114),
31 ("聊城", 116),("芜湖", 117),("唐山", 119),("平顶山", 119),("邢台", 119),("德州", 120),
32 ("济宁", 120),("荆州", 127),("宜昌", 130),("义乌", 132),("丽水", 133),("洛阳", 134),
33 ("秦皇岛", 136),("株洲", 143),("石家庄", 147),("莱芜", 148),("常德", 152),("保定", 153),
34 ("湘潭", 154),("金华", 157),("岳阳", 169),("长沙", 175),("衢州", 177),("廊坊", 193),
35 ("菏泽", 194),("合肥", 229),("武汉", 273),("大庆", 279)]
36
37geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff",
38 title_pos="center", width=1200,
39 height=600, background_color='#404a59')
40attr, value = geo.cast(data)
41geo.add("", attr, value, visual_range=[0, 200], visual_text_color="#fff",
42 symbol_size=15, is_visualmap=True)
43geo.render()
上图是默认的'scatter'类型,下面我们画一下 'effectScatter'类型:
1attr, value = geo.cast(data)
2geo.add("", attr, value, type="effectScatter", is_random=True, effect_scale=5)
3geo.render("effect.html")
下面画一下 'headmap'类型,这是非常常用的一种类型。
1geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff",
2 title_pos="center", width=1200,
3 height=600, background_color='#404a59')
4attr, value = geo.cast(data)
5geo.add("", attr, value, type="heatmap", is_visualmap=True, visual_range=[0, 300],
6 visual_text_color='#fff')
7geo.render("headmap.html")
下面再画一个地理坐标系线图,非常适合用以分析出行数据。
1from pyecharts import GeoLines, Style
2
3style = Style(title_top="#fff",title_pos = "center",width=1200,height=600,background_color="#404a59")
4style_geo = style.add(is_label_show=True,line_curve=0.2,line_opacity=0.6,legend_text_color="#eee",
5 legend_pos="right",geo_effect_symbol="plane",geo_effect_symbolsize=15,label_color=['#a6c84c', '#ffa022', '#46bee9'],
6 label_pos="right",label_formatter="{b}",label_text_color="#eee",)
7data_guangzhou = [
8 ["广州", "上海"],
9 ["广州", "北京"],
10 ["广州", "南京"],
11 ["广州", "重庆"],
12 ["广州", "兰州"],
13 ["广州", "杭州"]
14]
15geolines = GeoLines("GeoLines 示例", **style.init_style)
16geolines.add("从广州出发", data_guangzhou, **style_geo)
17geolines.render()
03 关系图
关系图是用于展现节点以及节点之间的关系的一种图,顾名思义,它用以分析关系最为适合,比如微博转发关系,文章引用关系等。
1from pyecharts import Graph
2
3nodes = [{"name": "结点1", "symbolSize": 10},
4 {"name": "结点2", "symbolSize": 20},
5 {"name": "结点3", "symbolSize": 30},
6 {"name": "结点4", "symbolSize": 40},
7 {"name": "结点5", "symbolSize": 50},
8 {"name": "结点6", "symbolSize": 40},
9 {"name": "结点7", "symbolSize": 30},
10 {"name": "结点8", "symbolSize": 20}]
11links = []
12for i in nodes:
13 for j in nodes:
14 links.append({"source": i.get('name'), "target": j.get('name')})
15graph = Graph("关系图-环形布局示例")
16graph.add("", nodes, links, is_label_show=True,
17 graph_repulsion=8000, graph_layout='circular',
18 label_text_color=None)
19graph.render("graph.html")
04 雷达图
雷达图多用于展示多变量数据。
1from pyecharts import Radar
2
3schema = [
4 ("销售", 6500), ("管理", 16000), ("信息技术", 30000),
5 ("客服", 38000), ("研发", 52000), ("市场", 25000)
6]
7v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
8v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]
9radar = Radar()
10radar.config(schema)
11radar.add("预算分配", v1, is_splitline=True, is_axisline_show=True)
12radar.add("实际开销", v2, label_color=["#4e79a7"], is_area_show=False,
13 legend_selectedmode='single')
14radar.render()
05 词云图
《狄仁杰》一文中,用的是wordcloud和matplotlib库画的词云图,用pyecharts也能画出词云图。
1from pyecharts import WordCloud
2
3name = [
4 'Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications',
5 'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp',
6 'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham',
7 'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break']
8value = [
9 10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112,
10 965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265]
11wordcloud = WordCloud(width=1300, height=620)
12wordcloud.add("", name, value, word_size_range=[20, 100])
13wordcloud.render("wordcloud.html")
06 结语
pyecharts功能十分强大,它几乎可以画出你想要的任何图,如果你使用 Jupyter Notebook 来展示图表,只需要调用自身实例即可,同时兼容 Python2 和 Python3 的 Jupyter Notebook 环境。所有图表均可正常显示,与浏览器一致的交互体验,这下展示报告连 PPT 都省了!!
你需要的一切,都可以在https://github.com/pyecharts/pyecharts找到,加油吧!!!
此文花费了不少功夫,赞赏、点赞、转发都是对作者的认可和支持。
Python爱好者社区历史文章大合集:
Python爱好者社区历史文章列表(每周append更新一次)
关注后在公众号内回复“课程”即可获取:
小编的Python入门免费视频课程!!!
【最新免费微课】小编的Python快速上手matplotlib可视化库!!!
崔老师爬虫实战案例免费学习视频。
陈老师数据分析报告制作免费学习视频。
玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。