PyEcharts数据可视化




1、PyEcharts模块


ECharts是百度提供的基于JavaScript的开源可视化库,主要用于Web端数据可视化

Echarts是通过JS实现的,PyEcharts则可以使用Python来调用里面的API

PyEcharts特点:

  • 1)简洁的API设计,支持链式调用
  • 2)丰富的图表,包括地图
  • 3)支持主流Notebook环境,如JupyterLab
  • 4)可集成Flask、Django等主流Web框架

PyEcharts官方网站:https://pyecharts.org/

PyEcharts中文网站:https://pyecharts.org/#/zh-cn/

安装:

pip install pyecharts

基本使用如下:

注意:render(path)在Python文件的同级目录下生成render.html文件,可以通过path参数指定HTML输出路径

2、柱状图

from pyecharts.charts import Bar, Line, Pie, EffectScatter, Grid, WordCloud, Map
from pyecharts import options as opts
from pyecharts.globals import SymbolType
from pyecharts.faker import Faker
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
data_china = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]
data_russia = [1.6, 5.4, 9.3, 28.4, 22.7, 60.7, 162.6, 199.2, 56.7, 43.8, 3.0, 4.9]

1)基本柱状图

bar = Bar().\
    add_xaxis(x).\
    add_yaxis("China", data_china).\
    set_global_opts(title_opts=opts.TitleOpts(title="柱状图示例")).\
    render(r'C:\Users\cc\Desktop\bar.html')

2)多柱状图

bar_m = Bar().\
    add_xaxis(x).\
    add_yaxis("China", data_china).\
    add_yaxis("Russia", data_russia).\
    set_global_opts(title_opts=opts.TitleOpts(title="多柱状图示例")).\
    render(r'C:\Users\cc\Desktop\bar_m.html')

3)柱状图翻转

bar_t = Bar().\
    add_xaxis(x).\
    add_yaxis("China", data_china).\
    add_yaxis("Russia", data_russia).\
    reversal_axis().\
    set_series_opts(label_opts=opts.LabelOpts(position="right")).\
    set_global_opts(title_opts=opts.TitleOpts(title="柱状图翻转")).\
    render(r'C:\Users\cc\Desktop\bar_t.html')

3、折线图


1)基本折线图

line = Line().\
    add_xaxis(x).\
    add_yaxis("China", data_china).\
    set_global_opts(title_opts=opts.TitleOpts(title="折线图示例")).\
    render(r'C:\Users\cc\Desktop\line.html')

2)多折线图

line_m = Line().\
    add_xaxis(x).\
    add_yaxis("China", data_china).\
    add_yaxis("Russia", data_russia).\
    set_global_opts(title_opts=opts.TitleOpts(title="多折线图示例")).\
    render(r'C:\Users\cc\Desktop\line_m.html')

3)阶梯折线图

line_t = Line().\
    add_xaxis(x).\
    add_yaxis("China", data_china, is_step=True).\
    set_global_opts(title_opts=opts.TitleOpts(title="阶梯折线图")).\
    render(r'C:\Users\cc\Desktop\line_t.html')

4、饼图


1)基本饼图

pie = Pie().\
    add("", [list(z) for z in zip(x, data_china)]).\
    set_global_opts(title_opts=opts.TitleOpts(title="饼图示例")).\
    set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")).\
    render(r'C:\Users\cc\Desktop\pie.html')

2)环状饼图

pie_c = Pie(init_opts=opts.InitOpts(width="600px", height="400px")).\
    add(
        series_name="环状饼图",
        data_pair=[list(z) for z in zip(x, data_china)],
        radius=["50%", "70%"],
        label_opts=opts.LabelOpts(is_show=False, position="center")
    ).\
    set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical")).\
    set_series_opts(
        tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"),
        label_opts=opts.LabelOpts(formatter="{b}: {c}")
    ).\
    render(r'C:\Users\cc\Desktop\pie_c.html')

5、散点图

scatter = EffectScatter().\
    add_xaxis(x).\
    add_yaxis("China", data_china, symbol=SymbolType.ROUND_RECT).\
    set_global_opts(title_opts=opts.TitleOpts(title="散点图示例")).\
    render(r'C:\Users\cc\Desktop\scatter.html')

6、图表合并


例如,将柱状图和折线图放在一起

bar_m = Bar().\
    add_xaxis(x).\
    add_yaxis("China", data_china).\
    add_yaxis("Russia", data_russia).\
    set_global_opts(title_opts=opts.TitleOpts(title="多图合并"))

line_m = Line().\
    add_xaxis(x).\
    add_yaxis("蒸发量", [p + 50 for p in data_china])

bar_m.overlap(line_m)
grid = Grid()
grid.add(bar_m, opts.GridOpts(pos_left="5%", pos_right="5%"), is_control_axis_index=True)
grid.render(r'C:\Users\cc\Desktop\bar_line.html')

7、词云


PyEcharts支持词云,更贴心的是中文也完全没有问题,不会出现乱码

例如,已知词频统计结果:

data = [("生活资源", "999"), ("供热管理", "888"), ("供气质量", "777"), ("生活用水管理", "688"), ("一次供水问题", "588"),
        ("交通运输", "516"), ("城市交通", "515"), ("环境保护", "483"), ("房地产管理", "462"), ("城乡建设", "449"),
        ("社会保障与福利", "429"), ("社会保障", "407"), ("文体与教育管理", "406"), ("公共安全", "406"),
        ("公交运输管理", "386"), ("出租车运营管理", "385"), ("供热管理", "375"), ("市容环卫", "355"),
        ("自然资源管理", "355"), ("粉尘污染", "335"), ("噪声污染", "324"), ("土地资源管理", "304"),
        ("物业服务与管理", "304"), ("医疗卫生", "284"), ("粉煤灰污染", "284"), ("占道", "284"), ("供热发展", "254"),
        ("农村土地规划管理", "254"), ("生活噪音", "253"), ("供热单位影响", "253"), ("城市供电", "223"),
        ("房屋质量与安全", "223"), ("大气污染", "223"), ("房屋安全", "223"), ("文化活动", "223"), ("拆迁管理", "223"),
        ("公共设施", "223"), ("供气质量", "223"), ("供电管理", "223"), ("燃气管理", "152"), ("教育管理", "152"),
        ("医疗纠纷", "152"), ("执法监督", "152"), ("设备安全", "152"), ("政务建设", "152"), ("县区、开发区", "152"),
        ("宏观经济", "152"), ("教育管理", "112"), ("社会保障", "112"), ("生活用水管理", "112"),
        ("物业服务与管理", "112"), ("分类列表", "112"), ("农业生产", "112"), ("二次供水问题", "112"),
        ("城市公共设施", "92"), ("拆迁政策咨询", "92"), ("物业服务", "92"), ("物业管理", "92"),
        ("社会保障保险管理", "92"), ("低保管理", "92"), ("文娱市场管理", "72"), ("城市交通秩序管理", "72"),
        ("执法争议", "72"), ("商业烟尘污染", "72"), ("占道堆放", "71"), ("地上设施", "71"), ("水质", "71"),
        ("无水", "71"), ("供热单位影响", "71"), ("人行道管理", "71"), ("主网原因", "71"), ("集中供热", "71"),
        ("客运管理", "71"), ("国有公交(大巴)管理", "71"), ("工业粉尘污染", "71"), ("治安案件", "71"),
        ("压力容器安全", "71"), ("身份证管理", "71"), ("群众健身", "41"), ("工业排放污染", "41"),
        ("破坏森林资源", "41"), ("市场收费", "41"), ("生产资金", "41"), ("生产噪声", "41"), ("农村低保", "41"),
        ("劳动争议", "41"), ("劳动合同争议", "41"), ("劳动报酬与福利", "41"), ("医疗事故", "21"), ("停供", "21"),
        ("基础教育", "21"), ("职业教育", "21"), ("物业资质管理", "21"), ("拆迁补偿", "21"), ("设施维护", "21"),
        ("市场外溢", "11"), ("占道经营", "11"), ("树木管理", "11"), ("农村基础设施", "11"), ("无水", "11"),
        ("供气质量", "11"), ("停气", "11"), ("市政府工作部门(含部门管理机构、直属单位)", "11"), ("燃气管理", "11"),
        ("市容环卫", "11"), ("新闻传媒", "11"), ("人才招聘", "11"), ("市场环境", "11"), ("行政事业收费", "11"),
        ("食品安全与卫生", "11"), ("城市交通", "11"), ("房地产开发", "11"), ("房屋配套问题", "11"), ("物业服务", "11"),
        ("物业管理", "11"), ("占道", "11"), ("园林绿化", "11"), ("户籍管理及身份证", "11"), ("公交运输管理", "11"),
        ("公路(水路)交通", "11"), ("房屋与图纸不符", "11"), ("有线电视", "11"), ("社会治安", "11"), ("林业资源", "11"),
        ("其他行政事业收费", "11"), ("经营性收费", "11"), ("食品安全与卫生", "11"), ("体育活动", "11"),
        ("有线电视安装及调试维护", "11"), ("低保管理", "11"), ("劳动争议", "11"), ("社会福利及事务", "11"),
        ("一次供水问题", "11")]

绘制词云:

# 内置词云图轮廓shape:circle、cardioid、diamond、triangle-forward、triangle、pentagon、star
# 可自定义图片轮廓:支持jpg、jpeg、png、ico格式,由mask_image参数指定路径(打开结果需要刷新)
wordcloud = WordCloud().\
    add(series_name="词云分析",
        data_pair=data,
        word_size_range=[6, 66],    # 字体大小范围
        mask_image=r'C:\Users\cc\Desktop\china_map.jpg',             # 自定义轮廓图
        textstyle_opts=opts.TextStyleOpts(font_family='cursive'),    # 字体格式
        word_gap=20,       # 单词间隔
        rotate_step=45,    # 旋转角度
        width='600',       # 宽
        height='512'       # 高
    ).\
    set_global_opts(
        title_opts=opts.TitleOpts(title="热点分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)),
        tooltip_opts=opts.TooltipOpts(is_show=True)
    ).\
    render(r'C:\Users\cc\Desktop\wordcloud.html')

8、地图


1)中国地图

import random

# 中国地图
provinces = ['广东省', '湖北省', '上海市', '湖南省', '重庆市', '四川省', '新疆维吾尔自治区', '黑龙江省', '浙江省']
values = [random.randint(1, 1024) for p in provinces]

map = Map().\
    add("商家X", [z for z in zip(provinces, values)], "china").\
    set_global_opts(
        title_opts=opts.TitleOpts(title="地图示例"),
        visualmap_opts=opts.VisualMapOpts(max_=1024, is_piecewise=True)
    ).\
    render(r'C:\Users\cc\Desktop\map.html')

2)省地图

# 省地图
cities = ['西安市', '宝鸡市', '榆林市', '渭南市', '汉中市']
values = [random.randint(1, 1024) for c in cities]

map = Map().\
    add("商家Y", [z for z in zip(cities, values)], "陕西").\
    set_global_opts(
        title_opts=opts.TitleOpts(title="地图示例"),
        visualmap_opts=opts.VisualMapOpts(max_=1024, is_piecewise=True)
    ).\
    render(r'C:\Users\cc\Desktop\map_p.html')

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值