人生苦短,我要用pyecharts画图

浏览: 3247

作者: 胡萝卜酱

公众号:经管人学数据分析


《狄仁杰之四大天王》影评分析一文中,胡萝卜酱采用了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        [52036107590], 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=[0200], 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=[0300],
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 = [[43001000028000350005000019000]]
8v2 = [[50001400028000310004200021000]]
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    1000061814386405524672244189814841112,
10    965847582555550462366360282273265]
11wordcloud = WordCloud(width=1300, height=620)
12wordcloud.add("", name, value, word_size_range=[20100])
13wordcloud.render("wordcloud.html")


06 结语



pyecharts功能十分强大,它几乎可以画出你想要的任何图,如果你使用 Jupyter Notebook 来展示图表,只需要调用自身实例即可,同时兼容 Python2 和 Python3 的 Jupyter Notebook 环境。所有图表均可正常显示,与浏览器一致的交互体验,这下展示报告连 PPT 都省了!!


你需要的一切,都可以在https://github.com/pyecharts/pyecharts找到,加油吧!!!

此文花费了不少功夫,赞赏、点赞、转发都是对作者的认可和支持。

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复课程即可获取

小编的Python入门免费视频课程!!!

【最新免费微课】小编的Python快速上手matplotlib可视化库!!!

崔老师爬虫实战案例免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。


推荐 0
本文由 Python爱好者社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册