我们知道在python的世界里画图的工具很多,例如之前说到的streamlit 和 matplotlib.pyplot , 而今天我们要介绍另外一个python环境的画图利器。pyecharts是一个国人开发的一个Echarts与Python结合的轮子,是一款将python与echarts结合的强大的数据可视化工具。Apache ECharts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。
1、前言
有一点注意,就是python2.x和python3.x的编码问题,在python3.x中你可以把它看做默认是unicode编码,但在python2.x中并不是默认的,原因就在它的bytes对象定义的混乱,而pycharts是使用unicode编码来处理字符串和文件的,所以当你使用的是python2.x时,请务必在上方插入此代码:
from future import unicode_literals
2、安装
pip install pyecharts # 由于墙的原因,下载时会出现断线和速度过慢的问题导致下载失败;可用下边方式优化 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts
3、全局配置项(visualmapopts 视觉映射配置项)
# 先引入相关包 from pyecharts import options as opts from pyecharts.charts import Map from pyecharts.faker import Faker
3、1 分段型配置
cq_city = ["北碚区", "巴南区", "渝北区", "九龙坡区","渝中区","江北区","南岸区","沙坪坝区","大渡口区"] GDP_value = [552, 781, 1443, 1211,1204,1028,725,936,228] c = ( Map() .add("", [list(z) for z in zip(cq_city, GDP_value)], "重庆",is_map_symbol_show=False,) #不显示标记图形 .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) #不显示标签(城市名) .set_global_opts( # VisualMapOpts:视觉映射配置项 visualmap_opts=opts.VisualMapOpts(max_=2000, is_piecewise=True, pieces=[ {"max": 1499, "min": 1200, "label": ">=1200", "color": "#B40404"}, {"max": 1199, "min": 900, "label": "900-1199", "color": "#DF0101"}, {"max": 899, "min": 600, "label": "600-899", "color": "#F78181"}, {"max": 599, "min": 300, "label": "300-599", "color": "#F5A9A9"}, {"max": 299, "min": 0, "label": "0-299", "color": "#FFFFCC"}, ] )) .render("chongqing.html") )

3、2 不分段型配置
c = ( Map() .add("", [list(z) for z in zip(cq_city, Faker.values())], "重庆", is_map_symbol_show=False, ) # 不显示标记图形 .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 不显示标签(城市名) .set_global_opts( # VisualMapOpts:视觉映射配置项 visualmap_opts=opts.VisualMapOpts( # 是否显示视觉映射配置 is_show=True, # 映射过渡类型,可选,"color", "size" (颜色映射还是大小映射)(重要!!!) type_="color", # 指定 visualMapPiecewise 组件的最小值。 min_=0, # 指定 visualMapPiecewise 组件的最大值。 max_=100, # 两端的文本,如['High', 'Low'],(自定义) range_text: Union[list, tuple] = None, range_text=['高', '低'], # visualMap 组件过渡颜色 (可以自定义)(颜色从淡到深) range_color: Union[Sequence[str]] = None, range_color=['#CCEBFF', '#22DDDD', '#0099FF', '#003D66'], # visualMap 组件过渡 symbol 大小.range_size: Union[Sequence[int]] = None, range_size=None, # visualMap 图元以及其附属物(如文字标签)的透明度。range_opacity: Optional[Numeric] = None, range_opacity=None, # 如何放置 visualMap 组件,水平('horizontal')或者竖直('vertical')。 orient='horizontal', # visualMap 组件离容器左侧的距离。 # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比, # 也可以是 'left', 'center', 'right'。 # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。 pos_left='center', # visualMap 组件离容器右侧的距离(同上)。 # right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。 pos_right=None, # visualMap 组件离容器上侧的距离(同上)。 # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比, # 也可以是 'top', 'middle', 'bottom'。 # 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。 pos_top=None, # visualMap 组件离容器下侧的距离(同上)。 # bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。 pos_bottom=None, # 对于连续型数据,自动平均切分成几段。默认为5段。连续数据的范围需要 max 和 min 来指定 split_number=5, # 指定取哪个系列的数据,默认取所有系列。series_index: Union[Numeric, Sequence, None] = None, series_index=None, # 组件映射维度Optional[Numeric] dimension=None, # 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)。 is_calculable=True, # 是否为分段型 is_piecewise=False, # 是否反转 visualMap 组件(默认False) is_inverse=True, # 自定义的每一段的范围,以及每一段的文字,以及每一段的特别的样式。例如: # pieces: [ # {"min": 1500}, // 不指定 max,表示 max 为无限大(Infinity)。 # {"min": 900, "max": 1500}, # {"min": 310, "max": 1000}, # {"min": 200, "max": 300}, # {"min": 10, "max": 200, "label": '10 到 200(自定义label)'}, # {"value": 123, "label": '123(自定义特殊颜色)', "color": 'grey'}, //表示 value 等于 123 的情况 # {"max": 5} // 不指定 min,表示 min 为无限大(-Infinity)。 # ] pieces=None, # 定义 在选中范围外 的视觉元素。(用户可以和 visualMap 组件交互,用鼠标或触摸选择范围) # 可选的视觉元素有: # symbol: 图元的图形类别。 # symbolSize: 图元的大小。 # color: 图元的颜色。 # colorAlpha: 图元的颜色的透明度。 # opacity: 图元以及其附属物(如文字标签)的透明度。 # colorLightness: 颜色的明暗度,参见 HSL。 # colorSaturation: 颜色的饱和度,参见 HSL。 # colorHue: 颜色的色调,参见 HSL。 out_of_range=None, # 图形的宽度,即长条的宽度。 item_width=0, # 图形的高度,即长条的高度。 item_height=0, # visualMap 组件的背景色。 background_color='#CCCC33', # visualMap 组件的边框颜色。 border_color='#EE1111', # visualMap 边框线宽,单位px。 border_width=2, # 文字样式配置项,参考 `series_options.TextStyleOpts` textstyle_opts=None, ) ) .render("chongqing1.html") )
4、柱状图-Bar
#导入柱状图-Bar from pyecharts.charts import Bar bar = ( Bar() .add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"]) .add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105]) .add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49]) .set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况")) ) bar.render()

5、3D柱状图
import random from pyecharts import options as opts from pyecharts.charts import Bar3D x_data = y_data = list(range(10)) def generate_data(): data = [] for j in range(10): for k in range(10): value = random.randint(0, 9) data.append([j, k, value * 2 + 4]) return data bar3d = Bar3D() for _ in range(10): bar3d.add( "", generate_data(), shading="lambert", xaxis3d_opts=opts.Axis3DOpts(data=x_data, type_="value"), yaxis3d_opts=opts.Axis3DOpts(data=y_data, type_="value"), zaxis3d_opts=opts.Axis3DOpts(type_="value"), ) bar3d.set_global_opts(title_opts=opts.TitleOpts("Bar3D-堆叠柱状图示例")) bar3d.set_series_opts(**{"stack": "stack"}) bar3d.render("bar3d_stack.html")

6、饼图
from pyecharts import options as opts from pyecharts.charts import Pie from pyecharts.commons.utils import JsCode fn = """ function(params) { if(params.name == '其他') return '\\n\\n\\n' + params.name + ' : ' + params.value + '%'; return params.name + ' : ' + params.value + '%'; } """ def new_label_opts(): return opts.LabelOpts(formatter=JsCode(fn), position="center") c = ( Pie() .add( "", [list(z) for z in zip(["剧情", "其他"], [25, 75])], center=["20%", "30%"], radius=[60, 80], label_opts=new_label_opts(), ) .add( "", [list(z) for z in zip(["奇幻", "其他"], [24, 76])], center=["55%", "30%"], radius=[60, 80], label_opts=new_label_opts(), ) .add( "", [list(z) for z in zip(["爱情", "其他"], [14, 86])], center=["20%", "70%"], radius=[60, 80], label_opts=new_label_opts(), ) .add( "", [list(z) for z in zip(["惊悚", "其他"], [11, 89])], center=["55%", "70%"], radius=[60, 80], label_opts=new_label_opts(), ) .set_global_opts( title_opts=opts.TitleOpts(title="Pie-多饼图基本示例"), legend_opts=opts.LegendOpts( type_="scroll", pos_top="20%", pos_left="80%", orient="vertical" ), ) .render("mutiple_pie.html") )

7、雷达图
from pyecharts import options as opts from pyecharts.charts import Radar data = [{"value": [4, -4, 2, 3, 0, 1], "name": "预算分配"}] c_schema = [ {"name": "销售", "max": 4, "min": -4}, {"name": "管理", "max": 4, "min": -4}, {"name": "技术", "max": 4, "min": -4}, {"name": "客服", "max": 4, "min": -4}, {"name": "研发", "max": 4, "min": -4}, {"name": "市场", "max": 4, "min": -4}, ] c = ( Radar() .set_colors(["#4587E7"]) .add_schema( schema=c_schema, shape="circle", center=["50%", "50%"], radius="80%", angleaxis_opts=opts.AngleAxisOpts( min_=0, max_=360, is_clockwise=False, interval=5, axistick_opts=opts.AxisTickOpts(is_show=False), axislabel_opts=opts.LabelOpts(is_show=False), axisline_opts=opts.AxisLineOpts(is_show=False), splitline_opts=opts.SplitLineOpts(is_show=False), ), radiusaxis_opts=opts.RadiusAxisOpts( min_=-4, max_=4, interval=2, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) ), ), polar_opts=opts.PolarOpts(), splitarea_opt=opts.SplitAreaOpts(is_show=False), splitline_opt=opts.SplitLineOpts(is_show=False), ) .add( series_name="预算", data=data, areastyle_opts=opts.AreaStyleOpts(opacity=0.1), linestyle_opts=opts.LineStyleOpts(width=1), ) .render("radar_angle_radius_axis.html") )

8、基本操作流程
- 导入相关图表包
- 进行图表的基础设置,创建图表对象
- 利用add()方法进行数据输入与图表设置(可以使用print_echarts_options()来输出所有可配置项)
- 利用render()方法来进行图表保存