python:可交互式可视化

实验背景

关于数据可视化,R的ggplot2,python的matplotlib,js库的echarts都提供一套完整的可视化方案。ggplots2 和matplotlib生成的数据可视化是静态的,缺少交互。

R的交互式的可视化包有shiny

最近wedo实验君在github上发现一个python的可交互式的数据可视化库:pyecharts。 pyecharts用python的方式封装了echarts的特性。

今天wedo实验君和大家一起了解下pyecharts。

实验器材

● python

● pyecharts

● echarts

实验内容

1. 安装部署

pip install pyecharts

2.可视化组件

from pyecharts import Bar,Line,Grid,Scatter,Pie,Overlapattr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]v1 = [5, 20, 36, 10, 75, 90]v2 = [10, 25, 8, 60, 20, 80]bar = Bar("x 轴和 y 轴交换")bar.add("商家A", attr, v1)bar.add("商家B", attr, v2, is_convert=True)bar

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)bar.add("商家B", attr, v2, is_stack=True)bar

bar = Bar("标记线和标记点示例")v1 = [5, 20, 36, 10, 75, 90]v2 = [10, 25, 8, 60, 20, 80]bar.add("商家A", attr, v1, mark_point=["average"])bar.add("商家B", attr, v2, mark_line=["min", "max"])bar

attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]v1 = [5, 20, 36, 10, 10, 100]v2 = [55, 60, 16, 20, 15, 80]line = Line("折线图示例")line.add("商家A", attr, v1, mark_point=["average"])line.add("商家B", attr, v2, is_smooth=True, mark_line=["max", "average"])line.render()line

scatter = Scatter("散点图示例")v1 = [10, 20, 30, 40, 50, 60]v2 = [10, 20, 30, 40, 50, 60]scatter.add("A", v1, v2)scatter.add("B", v1[::-1], v2, is_visualmap=True, visual_type='size', visual_range_size=[20, 80])scatter.render()scatter

attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]v1 = [100, 12, 13, 60, 10, 10]pie = Pie("饼图示例", title_pos="55%")pie.add("", attr, v1, radius=[45, 65], center=[65, 50], legend_pos="80%", legend_orient='vertical')pie

attr = ['A', 'B', 'C', 'D', 'E', 'F']v1 = [10, 20, 30, 40, 50, 60]v2 = [38, 28, 58, 48, 78, 68]bar = Bar("Line - Bar 示例",jshost="https://cdn.kesci.com/nbextensions/echarts")bar.add("bar", attr, v1)line = Line()line.add("line", attr, v2)overlap = Overlap()overlap.add(bar)overlap.add(line)overlap.render()overlap

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]v3 = [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2]bar = Bar(width=1000, height=600,jshost="https://cdn.kesci.com/nbextensions/echarts")bar.add("蒸发量", attr, v1)bar.add("降水量", attr, v2, yaxis_formatter=" ml", yaxis_interval=50, yaxis_max=250)line = Line()line.add("平均温度", attr, v3, yaxis_formatter=" °C", yaxis_interval=5)overlap = Overlap()# 默认不新增 x y 轴,并且 x y 轴的索引都为 0overlap.add(bar)# 新增一个 y 轴,此时 y 轴的数量为 2,第二个 y 轴的索引为 1(索引从 0 开始),所以设置 yaxis_index = 1# 由于使用的是同一个 x 轴,所以 x 轴部分不用做出改变overlap.add(line, yaxis_index=1, is_add_yaxis=True)overlap.render()overlap

import randomattr = ["{}天".format(i) for i in range(30)]v1 = [random.randint(1, 30) for _ in range(30)]bar = Bar('数据滚动')bar.add("", attr, v1, is_label_show=True, is_datazoom_show=True)bar

from pyecharts import Bar3Dbar3d = Bar3D("3D 柱状图示例", width=1200, height=600)x_axis = [ "12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a", "12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p"]y_axis = [ "Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"]data = [ [0, 0, 5], [0, 1, 1], [0, 2, 0], [0, 3, 0], [0, 4, 0], [0, 5, 0], [0, 6, 0], [0, 7, 0], [0, 8, 0], [0, 9, 0], [0, 10, 0], [0, 11, 2], [0, 12, 4], [0, 13, 1], [0, 14, 1], [0, 15, 3], [0, 16, 4], [0, 17, 6], [0, 18, 4], [0, 19, 4], [0, 20, 3], [0, 21, 3], [0, 22, 2], [0, 23, 5], [1, 0, 7], [1, 1, 0], [1, 2, 0], [1, 3, 0], [1, 4, 0], [1, 5, 0], [1, 6, 0], [1, 7, 0], [1, 8, 0], [1, 9, 0], [1, 10, 5], [1, 11, 2], [1, 12, 2], [1, 13, 6], [1, 14, 9], [1, 15, 11], [1, 16, 6], [1, 17, 7], [1, 18, 8], [1, 19, 12], [1, 20, 5], [1, 21, 5], [1, 22, 7], [1, 23, 2], [2, 0, 1], [2, 1, 1], [2, 2, 0], [2, 3, 0], [2, 4, 0], [2, 5, 0], [2, 6, 0], [2, 7, 0], [2, 8, 0], [2, 9, 0], [2, 10, 3], [2, 11, 2], [2, 12, 1], [2, 13, 9], [2, 14, 8], [2, 15, 10], [2, 16, 6], [2, 17, 5], [2, 18, 5], [2, 19, 5], [2, 20, 7], [2, 21, 4], [2, 22, 2], [2, 23, 4], [3, 0, 7], [3, 1, 3], [3, 2, 0], [3, 3, 0], [3, 4, 0], [3, 5, 0], [3, 6, 0], [3, 7, 0], [3, 8, 1], [3, 9, 0], [3, 10, 5], [3, 11, 4], [3, 12, 7], [3, 13, 14], [3, 14, 13], [3, 15, 12], [3, 16, 9], [3, 17, 5], [3, 18, 5], [3, 19, 10], [3, 20, 6], [3, 21, 4], [3, 22, 4], [3, 23, 1], [4, 0, 1], [4, 1, 3], [4, 2, 0], [4, 3, 0], [4, 4, 0], [4, 5, 1], [4, 6, 0], [4, 7, 0], [4, 8, 0], [4, 9, 2], [4, 10, 4], [4, 11, 4], [4, 12, 2], [4, 13, 4], [4, 14, 4], [4, 15, 14], [4, 16, 12], [4, 17, 1], [4, 18, 8], [4, 19, 5], [4, 20, 3], [4, 21, 7], [4, 22, 3], [4, 23, 0], [5, 0, 2], [5, 1, 1], [5, 2, 0], [5, 3, 3], [5, 4, 0], [5, 5, 0], [5, 6, 0], [5, 7, 0], [5, 8, 2], [5, 9, 0], [5, 10, 4], [5, 11, 1], [5, 12, 5], [5, 13, 10], [5, 14, 5], [5, 15, 7], [5, 16, 11], [5, 17, 6], [5, 18, 0], [5, 19, 5], [5, 20, 3], [5, 21, 4], [5, 22, 2], [5, 23, 0], [6, 0, 1], [6, 1, 0], [6, 2, 0], [6, 3, 0], [6, 4, 0], [6, 5, 0], [6, 6, 0], [6, 7, 0], [6, 8, 0], [6, 9, 0], [6, 10, 1], [6, 11, 0], [6, 12, 2], [6, 13, 1], [6, 14, 3], [6, 15, 4], [6, 16, 0], [6, 17, 0], [6, 18, 0], [6, 19, 0], [6, 20, 1], [6, 21, 2], [6, 22, 2], [6, 23, 6] ]range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']bar3d.add("", x_axis, y_axis, [[d[1], d[0], d[2]] for d in data], is_visualmap=True, visual_range=[0, 20], visual_range_color=range_color, grid3d_width=200, grid3d_depth=80)bar3d

3.pyecharts实现原理

pyecharts是用python的方式封装了echarts。 通过python 拼接HTML 代码,把echarts囊括进行显示。

from IPython.display import HTML## 通过引入echarts js可HTML("

require.config(});##配置echarts属性和数据require(['echarts'],function(ec){ var myChart = echarts.init(document.getElementById('main')); var option = {} myChart.setOption(option);})")

实验结语

本实验wedo实验君和大家一个简单过了下,python可交互式可视化库:pyecharts。实际应用的时候可参见:

API:http://pyecharts.readthedocs.io/zh/latest/zh-cn/charts/

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180430G1FMVK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券