基于Python的数据可视化工具pyecharts

本文属于转载,对原文进行了校对和微调,如有兴趣请参考原文。

原文地址:https://blog.csdn.net/youzhouliu/article/details/78361503

如何做Python 的数据可视化?

pyecharts 是一个用于生成 Echarts 图表的类库。 Echarts 是百度开源的一个数据可视化 JS 库。主要用于数据可视化。

一、安装

pyecharts 兼容 Python2 和 Python3。目前版本为 0.1.4

pip install pyecharts
二、入门

首先开始来绘制你的第一个图表

from pyecharts import Bar

bar =Bar("我的第一个图表", "这里是副标题")

bar.add("服装", ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"], [5, 20, 36, 10, 75, 90])

bar.show_config()

bar.render()

Tip:可以按右边的下载按钮将图片下载到本地

  • add()

    主要方法,用于添加图表的数据和设置各种配置项

  • show_config()

    打印输出图表的所有配置项

  • render()

    默认将会在根目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置,如 render(r"e:my_first_chart.html"),文件用浏览器打开。

    默认的编码类型为 UTF-8,在 Python3 中是没什么问题的,Python3 对中文的支持好很多。但是在 Python2 中,编码的处理是个很头疼的问题,暂时没能找到完美的解决方法,目前只能通过文本编辑器自己进行二次编码,我用的是 Visual Studio Code,先通过 Gbk 编码重新打开,然后再用 UTF-8 重新保存,这样用浏览器打开的话就不会出现中文乱码问题了。

基本上所有的图表类型都是这样绘制的:

  1. chart_name = Type() 初始化具体类型图表。

  2. add() 添加数据及配置项。

  3. render() 生成 .html 文件。

三、图表类型

因篇幅原因,这里只给出了每种图表类型的示例(代码 + 生成图表),目的是为了引起读者的兴趣。详细参数的介绍请参考项目 README.md 文档

1 Bar(柱状图/条形图)
from pyecharts import Bar
bar =Bar("标记线和标记点示例")
bar.add("商家A", attr, v1, mark_point=["average"])
bar.add("商家B", attr, v2, mark_line=["min""max"])
bar.render()
from pyecharts import Bar
bar =Bar("x 轴和 y 轴交换")
bar.add("商家A", attr, v1)
bar.add("商家B", attr, v2, is_convert=True)
bar.render()

2 EffectScatter(带有涟漪特效动画的散点图)
from pyecharts import EffectScatter
v1 =[102030405060]
v2 =[252015106033]
es =EffectScatter("动态散点图示例")
es.add("effectScatter", v1, v2)
es.render()
es =EffectScatter("动态散点图各种图形示例")
es.add("", [10], [10], symbol_size=20effect_scale=3.5effect_period=3symbol="pin")
es.add("", [20], [20], symbol_size=12effect_scale=4.5effect_period=4symbol="rect")
es.add("", [30], [30], symbol_size=30effect_scale=5.5effect_period=5symbol="roundRect")
es.add("", [40], [40], symbol_size=10effect_scale=6.5effect_brushtype='fill'symbol="diamond")
es.add("", [50], [50], symbol_size=16effect_scale=5.5effect_period=3symbol="arrow")
es.add("", [60], [60], symbol_size=6effect_scale=2.5effect_period=3symbol="triangle")
es.render()

3 Funnel(漏斗图)

from pyecharts import Funnel

attr =["衬衫""羊毛衫""雪纺衫""裤子""高跟鞋""袜子"]

value =[20406080100120]

funnel =Funnel("漏斗图示例")

funnel.add("商品", attr, value, is_label_show=Truelabel_pos="inside"label_text_color="#fff")

funnel.render()


4 Gauge(仪表盘)
from pyecharts import Gauge
gauge =Gauge("仪表盘示例")
gauge.add("业务指标""完成率"66.66)
gauge.show_config()
gauge.render()

5 Geo(地理坐标系)
from pyecharts import Geo
data =[ ("海门"9),("鄂尔多斯"12),("招远"12),("舟山"12),("齐齐哈尔"14),("盐城"15), ("赤峰"16),("青岛"18),("乳山"18),("金昌"19),("泉州"21),("莱西"21), ("日照"21),("胶南"22),("南通"23),("拉萨"24),("云浮"24),("梅州"25)...]
geo Geo("全国主要城市空气质量""data from pm2.5"title_color="#fff"title_pos="center",width=1200height=600background_color='#404a59')
attr, value geo.cast(data)
geo.add("", attr, value, visual_range=[0200], visual_text_color="#fff"symbol_size=15is_visualmap=True)
geo.show_config()
geo.render()

from pyecharts import Geo
data [("海门"9), ("鄂尔多斯"12), ("招远"12), ("舟山"12), ("齐齐哈尔"14), ("盐城"15)]
geo Geo("全国主要城市空气质量""data from pm2.5"title_color="#fff"title_pos="center"width=1200height=600background_color='#404a59')
attr, value geo.cast(data)
geo.add("", attr, value, type="effectScatter"is_random=Trueeffect_scale=5)
geo.show_config()
geo.render()

6 Graph(关系图)
from pyecharts import Graph
nodes [{"name""结点1""symbolSize"10}, {"name""结点2""symbolSize"20}, {"name""结点3""symbolSize"30}, {"name""结点4""symbolSize"40}, {"name""结点5""symbolSize"50}, {"name""结点6""symbolSize"40}, {"name""结点7""symbolSize"30}, {"name""结点8""symbolSize"20}]
links []
for in nodes: 
    for in nodes:
        links.append({"source": i.get('name'), "target": j.get('name')})
graph Graph("关系图-环形布局示例")
graph.add("", nodes, links, is_label_show=Truerepulsion=8000layout='circular'label_text_color=None)
graph.show_config()
graph.render()

from pyecharts import Graph

import json 
with open("..jsonweibo.json""r"encoding="utf-8"as f:
    j =json.load(f)
    nodes, links, categories, cont, mid, userl j
 graph =Graph("微博转发关系图"width=1200height=600)
graph.add("", nodes, links, categories, label_pos="right"repulsion=50is_legend_show=Falseline_curve=0.2label_text_color=None)
graph.show_config()
graph.render()

7 Line(折线/面积图)
from pyecharts import Line
attr =["衬衫""羊毛衫""雪纺衫""裤子""高跟鞋""袜子"]
v1 =[520361010100]
v2 =[556016201580]
line =Line("折线图示例")
line.add("商家A", attr, v1, mark_point=["average"])
line.add("商家B", attr, v2, is_smooth=Truemark_line=["max""average"])
line.show_config()

line.render()

line =Line("折线图-阶梯图示例")
line.add("商家A", attr, v1, is_step=Trueis_label_show=True)
line.show_config()
line.render()

line =Line("折线图-面积图示例")
line.add("商家A", attr, v1, is_fill=Trueline_opacity=0.2area_opacity=0.4symbol=None)
line.add("商家B", attr, v2, is_fill=Truearea_color='#000'area_opacity=0.3is_smooth=True)
line.show_config()
line.render()

8 Liquid(水球图)
from pyecharts import Liquid
liquid =Liquid("水球图示例")
liquid.add("Liquid", [0.6])
liquid.show_config()
liquid.render()

from pyecharts import Liquid
liquid =Liquid("水球图示例")
liquid.add("Liquid", [0.60.50.40.3], is_liquid_outline_show=False)
liquid.show_config()
liquid.render()

from pyecharts import Liquid
liquid =Liquid("水球图示例")
liquid.add("Liquid", [0.60.50.40.3], is_liquid_animation=Falseshape='diamond')
liquid.show_config()
liquid.render()

9 Map(地图)
from pyecharts import Map
value =[15510667833801905349.6]
attr =["福建""山东""北京""上海""甘肃""新疆""河南""广西""西藏"]
map=Map("Map 结合 VisualMap 示例"width=1200height=600)
map.add("", attr, value, maptype='china'is_visualmap=Truevisual_text_color='#000')
map.show_config()
map.render()

from pyecharts import Map
value =[201902537765]
attr =['汕头市''汕尾市''揭阳市''阳江市''肇庆市']
map=Map("广东地图示例"width=1200height=600)
map.add("", attr, value, maptype='广东'is_visualmap=Truevisual_text_color='#000')
map.show_config()
map.render()

10 Parallel(平行坐标系)
from pyecharts import Parallel
c_schema =[ {"dim"0"name""data"},
                    {"dim"1"name""AQI"},

                    {"dim"2"name""PM2.5"},
                   {"dim"3"name""PM10"},
                   {"dim"4"name""CO"},
                    {"dim"5"name""NO2"},
                    {"dim"6"name""CO2"},
                    {"dim"7"name""等级""type""category""data": ['''''轻度污染''中度污染''重度污染''严重污染']}]

data =[ [191451250.823423""],

          [26527780.864529""],
          [38360841.097327""],
            [4109811211.286851"轻度污染"],
            [5106771141.075551"轻度污染"],
            [6109811211.286851"轻度污染"],
            [7106771141.075551"轻度污染"],
            [88965780.865126""],
            [95333470.645017""],
            [108055801.017524""],
            [11117811241.034524"轻度污染"],
            [1299711421.16242""],
            [1395691301.287450""],
            [14116871311.478440"轻度污染"]]

parallel =Parallel("平行坐标系-用户自定义指示器")
parallel.config(c_schema=c_schema)
parallel.add("parallel", data)
parallel.show_config()
parallel.render()

11 Pie(饼图)
from pyecharts import Pie
attr =["衬衫""羊毛衫""雪纺衫""裤子""高跟鞋""袜子"]
v1 =[111213101010]
pie =Pie("饼图示例")
pie.add("", attr, v1, is_label_show=True)
pie.show_config()
pie.render()

from pyecharts import Pie
attr =["衬衫""羊毛衫""雪纺衫""裤子""高跟鞋""袜子"]
v1 =[111213101010]
v2 =[192132202033]
pie =Pie("饼图-玫瑰图示例"title_pos='center'width=900)
pie.add("商品A", attr, v1, center=[2550], is_random=Trueradius=[3075], rosetype='radius')
pie.add("商品B", attr, v2, center=[7550], is_random=Trueradius=[3075], rosetype='area'is_legend_show=Falseis_label_show=True)
pie.show_config()
pie.render()

12 Polar(极坐标系)
from pyecharts import Polar
radius =['周一''周二''周三''周四''周五''周六''周日']
polar =Polar("极坐标系-堆叠柱状图示例"width=1200height=600)
polar.add("A", [1234351], radius_data=radius, type='barRadius'is_stack=True)
polar.add("B", [2461231], radius_data=radius, type='barRadius'is_stack=True)
polar.add("C", [1234125], radius_data=radius, type='barRadius'is_stack=True)
polar.show_config()
polar.render()

from pyecharts import Polar
radius =['周一''周二''周三''周四''周五''周六''周日']
polar =Polar("极坐标系-堆叠柱状图示例"width=1200height=600)
polar.add("", [1234351], radius_data=radius, type='barAngle'is_stack=True)
polar.add("", [2461231], radius_data=radius, type='barAngle'is_stack=True)
polar.add("", [1234125], radius_data=radius, type='barAngle'is_stack=True)
polar.show_config()
polar.render()

13 Radar(雷达图)
from pyecharts import Radar
schema =[ ("销售"6500), ("管理"16000), ("信息技术"30000), ("客服"38000), ("研发"52000), ("市场"25000)]
v1 =[[43001000028000350005000019000]]
v2 =[[50001400028000310004200021000]]
radar =Radar()
radar.config(schema)
radar.add("预算分配", v1, is_splitline=Trueis_axisline_show=True)
radar.add("实际开销", v2, label_color=["#4e79a7"], is_area_show=False)
radar.show_config()
radar.render()

value_bj =[ [559560.461861], [2511210.653492], [567630.31453], [337290.331664]...]
value_sh =[ [91451250.8234231], [6527780.8645292], [8360841.0973273], [109811211.2868514]...]
c_schema=[{"name""AQI""max"300"min"5}, {"name""PM2.5""max"250"min"20}, {"name""PM10""max"300"min"5}, {"name""CO""max"5}, {"name""NO2""max"200}, {"name""SO2""max"100}]
radar =Radar()
radar.config(c_schema=c_schema, shape='circle')
radar.add("北京", value_bj, item_color="#f9713c"symbol=None)
radar.add("上海", value_sh, item_color="#b3e4a1"symbol=None)
radar.show_config()
radar.render()

14 Scatter(散点图)
from pyecharts import Scatter
v1 =[102030405060]
v2 =[102030405060]
scatter =Scatter("散点图示例")
scatter.add("A", v1, v2)
scatter.add("B", v1[::-1], v2)
scatter.show_config()
scatter.render()

散点打印Pyecharts字体。

from pyecharts import Scatter
scatter =Scatter("散点图示例")
v1, v2 =scatter.draw("../images/pyecharts-0.png")
scatter.add("pyecharts", v1, v2, is_random=True)
scatter.show_config()
scatter.render()

15 WordCloud(词云图)
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 =[1000061814386405524672244189814841112965847582555550462366360282273265]
wordcloud =WordCloud(width=1300height=620)
wordcloud.add("", name, value, word_size_range=[20100])
wordcloud.show_config()
wordcloud.render()

wordcloud =WordCloud(width=1300height=620)
wordcloud.add("", name, value, word_size_range=[30100], shape='diamond')
wordcloud.show_config()
wordcloud.render()

五、用户自定义

用户还可以自定义结合 Line/Bar 图表

需使用 get_series() 和 custom() 方法

get_series()"""获取图表的 series 数据 """
custom(series)'''追加自定义图表类型 '''
  • series -> dict

    追加图表类型的 series 数据

先用 get_series() 获取数据,再使用 custom() 将图表结合在一起

from pyecharts import Bar, Line
attr =['A''B''C''D''E''F']
v1 =[102030405060]
v2 =[152535455565]
v3 =[382858487868]
bar =Bar("Line - Bar 示例")
bar.add("bar", attr, v1)
line =Line()
line.add("line", v2, v3)
bar.custom(line.get_series())
bar.show_config()
bar.render()

六、更多示例

用极坐标系画出一个爱心

import math 
from pyecharts import Polar
data =[]
for in range(101):
    theta =/100*360
    r =5*(1+math.sin(theta /180*math.pi))
    data.append([r, theta])
    hour =[i for in range(125)]
polar =Polar("极坐标系示例"width=1200height=600)
polar.add("Love", data, angle_data=hour, boundary_gap=False,start_angle=0)
polar.show_config()
polar.render()

用极坐标系画出一朵小花

import math
from pyecharts import Polar
data =[]
for in range(361):
    t =/180*math.pi
    r =math.sin(2*t) *math.cos(2*t)
    data.append([r, i])
polar =Polar("极坐标系示例"width=1200height=600)
polar.add("Flower", data, start_angle=0symbol=Noneaxis_range=[0None])
polar.show_config()
polar.render()

还可以给小花涂上颜色

import math
from pyecharts import Polar
data =[]
for in range(361):

     t =/180*math.pi 
    r =math.sin(2*t) *math.cos(2*t)
    data.append([r, i])
polar =Polar("极坐标系示例"width=1200height=600)
polar.add("Color-Flower", data, start_angle=0symbol=Noneaxis_range=[0None], area_color="#f71f24"area_opacity=0.6)
polar.show_config()
polar.render()

用散点图画出一个爱心

from pyecharts import Scatter
scatter =Scatter("散点图示例"width=800height=480)
v1 ,v2 =scatter.draw("../images/love.png")
scatter.add("Love", v1, v2)
scatter.render()

用散点图画出一个火辣的 Bra

from pyecharts import Scatter
scatter =Scatter("散点图示例"width=1000height=480)
v1 ,v2 =scatter.draw("../images/cup.png")
scatter.add("Cup", v1, v2)
scatter.render()

某地最低温和最高气温折线图

from pyecharts import Line
attr =['周一''周二''周三''周四''周五''周六''周日', ]
line =Line("折线图示例")
line.add("最高气温", attr, [11111513121310], mark_point=["max""min"], mark_line=["average"])
line.add("最低气温", attr, [1-225320], mark_point=["max""min"], mark_line=["average"], yaxis_formatter="°C")
line.show_config()
line.render()

饼图嵌套

from pyecharts import Pie
pie =Pie("饼图示例"title_pos='center'width=1000height=600)
pie.add("", ['A''B''C''D''E''F'], [335321234135251148], radius=[4055],is_label_show=True)
pie.add("", ['H''I''J'], [335679204], radius=[030], legend_orient='vertical'legend_pos='left')
pie.show_config()
pie.render()


饼图再嵌套

import random 
from pyecharts import Pie
attr =['A''B''C''D''E''F']pie =Pie("饼图示例"width=1000height=600)
pie.add("", attr, [random.randint(0100forinrange(6)], radius=[5055], center=[2550],is_random=True)
pie.add("", attr, [random.randint(20100forinrange(6)], radius=[045], center=[2550],rosetype='area')
pie.add("", attr, [random.randint(0100forinrange(6)], radius=[5055], center=[6550],is_random=True)
pie.add("", attr, [random.randint(20100forinrange(6)], radius=[045], center=[6550],rosetype='radius')
pie.show_config()

pie.render()


某地的降水量和蒸发量柱状图

from pyecharts import Bar
attr =["{}月".format(i) for in range(113)]
v1 =[2.04.97.023.225.676.7135.6162.232.620.06.43.3]
v2 =[2.65.99.026.428.770.7175.6182.248.718.86.02.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()

各类电影中"好片"所占的比例

from pyecharts import Pie
pie =Pie('各类电影中"好片"所占的比例'"数据来着豆瓣"title_pos='center')
pie.add("", ["剧情"""], [2575], center=[1030], radius=[1824], label_pos='center'is_label_show=Truelabel_text_color=None, )
pie.add("", ["奇幻"""], [2476], center=[3030], radius=[1824], label_pos='center'is_label_show=Truelabel_text_color=Nonelegend_pos='left')
pie.add("", ["爱情"""], [1486], center=[5030], radius=[1824], label_pos='center'is_label_show=Truelabel_text_color=None)
pie.add("", ["惊悚"""], [1189], center=[7030], radius=[1824], label_pos='center'is_label_show=Truelabel_text_color=None)
pie.add("", ["冒险"""], [2773], center=[9030], radius=[1824], label_pos='center'is_label_show=Truelabel_text_color=None)
pie.add("", ["动作"""], [1585], center=[1070], radius=[1824], label_pos='center'is_label_show=Truelabel_text_color=None)
pie.add("", ["喜剧"""], [5446], center=[3070], radius=[1824], label_pos='center'is_label_show=Truelabel_text_color=None)
pie.add("", ["科幻"""], [2674], center=[5070], radius=[1824], label_pos='center'is_label_show=Truelabel_text_color=None)
pie.add("", ["悬疑"""], [2575], center=[7070], radius=[1824], label_pos='center'is_label_show=Truelabel_text_color=None)
pie.add("", ["犯罪"""], [2872], center=[9070], radius=[1824], label_pos='center'is_label_show=Truelabel_text_color=Noneis_legend_show=Truelegend_top="center")
pie.show_config()
pie.render()

用极坐标系画出一个蜗牛壳

import math
from pyecharts import Polar
data =[]
for in range(5): 
    for in range(101):
        theta =/100*360
        alpha =*360+theta
        r =math.pow(math.e, 0.003*alpha)
        data.append([r, theta])
polar =Polar("极坐标系示例")
polar.add("", data, symbol_size=0symbol='circle'start_angle=-25is_radiusaxis_show=Falsearea_color="#f3c5b3"area_opacity=0.5is_angleaxis_show=False)
polar.show_config()
polar.render()

你可能感兴趣的:(数据分析,Python)