这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

作者:JackTian
来源:杰哥的IT之旅(ID:Jake_Internet)
转载请联系授权(微信ID:Hc220088)

原文链接:这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

一、Pyecharts简介和安装

1、简介

Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。

  • 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
  • 囊括了 30+ 种常见图表,应有尽有
  • 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
  • 可轻松集成至 Flask,Sanic,Django 等主流 Web 框架
  • 高度灵活的配置项,可轻松搭配出精美的图表
  • 详细的文档和示例,帮助开发者更快的上手项目
  • 多达 400+ 地图文件,并且支持原生百度地图,为地理数据可视化提供强有力的支持

pyecharts版本v0.5.x 和 v1 间不兼容,v1 是一个全新的版本,语法也有很大不同。

2、安装

安装 pyecharts

pip install pyecharts -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
import pyecharts

print(pyecharts.__version__)         # 查看pyecharts版本复制代码

安装相关的地图扩展包

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-countries-pypkg           # 全球国家地图
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-china-provinces-pypkg   # 中国省级地图
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-china-cities-pypkg      # 中国市级地图
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-china-counties-pypkg    # 中国县区级地图复制代码

二、绘制地理图表

1、世界地图—数据可视化

利用 Starbucks.csv 中的数据,首先计算每个国家(Country)对应的门店数量,然后使用世界地图表示星巴克门面店在全球的分布。

import pandas as pd
from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.globals import ThemeType, CurrentConfig

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

# 用pandas读取csv文件里的数据
df = pd.read_csv("Starbucks.csv")['Country']
data = df.value_counts()
datas = [(i, int(j)) for i, j in zip(data.index, data.values)]


# 实例化一个Map对象
map_ = Map(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION))
# 世界地图
map_.add("门店数量", data_pair=datas, maptype="world")
map_.set_series_opts(label_opts=opts.LabelOpts(is_show=False))   # 不显示label
map_.set_global_opts(
     title_opts=opts.TitleOpts(title="星巴克门店数量在全球分布", pos_left='40%', pos_top='10'),   # 调整title位置
     legend_opts=opts.LegendOpts(is_show=False),
     visualmap_opts=opts.VisualMapOpts(max_=13608, min_=1, is_piecewise=True,
     pieces=[{"max": 9, "min": 1, "label": "1-9", "color": "#00FFFF"},        # 分段  添加图例注释和颜色
          {"max": 99, "min": 10, "label": "10-99", "color": "#A52A2A"},
          {"max": 499, "min": 100, "label": "100-499", "color": "#0000FF    "},
          {"max": 999, "min": 500, "label": "500-999", "color": "#FF00FF"},
          {"max": 2000, "min": 1000, "label": "1000-2000", "color": "#228B22"},
          {"max": 3000, "min": 2000, "label": "2000-3000", "color": "#FF0000"},
          {"max": 20000, "min": 10000, "label": ">=10000", "color": "#FFD700"}
             ])
     )

# 渲染在网页上   有交互性
map_.render('星巴克门店在全球的分布.html')复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

2、国家地图—数据可视化

涟漪散点图

利用china.csv 中的数据,首先计算每个城市(City)对应的门店数量,然后使用 pyecharts包内 Geo 模块绘制星巴克门面店在中国分布的涟漪散点地图。

import pandas as pd
from pyecharts.globals import ThemeType, CurrentConfig, GeoType
from pyecharts import options as opts
from pyecharts.charts import Geo

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
# pandas读取csv文件数据
df = pd.read_csv("china.csv")['City']
data = df.value_counts()

datas = [(i, int(j)) for i, j in zip(data.index, data.values)]
print(datas)

geo = Geo(init_opts=opts.InitOpts(width='1000px', height='600px', theme=ThemeType.DARK))
geo.add_schema(maptype='china', label_opts=opts.LabelOpts(is_show=True))   # 显示label  省名
geo.add('门店数量', data_pair=datas, type_=GeoType.EFFECT_SCATTER, symbol_size=8)
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.set_global_opts(title_opts=opts.TitleOpts(title='星巴克门店在中国的分布'),
                    visualmap_opts=opts.VisualMapOpts(max_=550, is_piecewise=True,
                    pieces=[{"max": 50, "min": 0, "label": "0-50", "color": "#708090"},        # 分段  添加图例注释  和颜色
                              {"max": 100, "min": 51, "label": "51-100", "color": "#00FFFF"},
                              {"max": 200, "min": 101, "label": "101-200", "color": "#00008B"},
                              {"max": 300, "min": 201, "label": "201-300", "color": "#8B008B"},
                              {"max": 600, "min": 500, "label": "500-600", "color": "#FF0000"},
                                 ])
                    )

geo.render("星巴克门店在中国的分布.html")复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

动态轨迹图

from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType, CurrentConfig

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
# 链式调用
c = (
    Geo()
    .add_schema(
        maptype="china",
        itemstyle_opts=opts.ItemStyleOpts(color="#323c48", border_color="#111"),
        label_opts=opts.LabelOpts(is_show=True)
    )
    .add(
        "",
        [("广州", 55), ("北京", 66), ("杭州", 77), ("重庆", 88), ('成都', 100), ('海口', 80)],
        type_=ChartType.EFFECT_SCATTER,
        color="white",
    )
    .add(
        "",
        [("广州", "上海"), ("广州", "北京"), ("广州", "杭州"), ("广州", "重庆"),
         ('成都', '海口'), ('海口', '北京'), ('海口', '重庆'), ('重庆', '上海')
         ],
        type_=ChartType.LINES,
        effect_opts=opts.EffectOpts(
            symbol=SymbolType.ARROW, symbol_size=6, color="blue"
        ),
        linestyle_opts=opts.LineStyleOpts(curve=0.2),
    )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(title_opts=opts.TitleOpts(title="动态轨迹图"))
    .render("geo_lines_background.html")
)复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

3、省市地图—数据可视化

热力图

代码如下:

from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.faker import Faker
from pyecharts.globals import GeoType, CurrentConfig

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

c = (
    Geo()
    .add_schema(maptype="广东", label_opts=opts.LabelOpts(is_show=True))
    .add(
        "热力图",
        [list(z) for z in zip(Faker.guangdong_city, Faker.values())],
        type_=GeoType.HEATMAP,
    )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True))
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="Geo-广东地图")
    )
    .render("geo_guangdong.html")
)复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

在地图上批量添加地址、经纬度数据,地理数据可视化

代码如下:

import pandas as pd     # 导入数据分析模块
from pyecharts.charts import Geo    # 导入地理信息处理模块
from pyecharts import options as opts   # 配置
from pyecharts.globals import GeoType, CurrentConfig, ThemeType

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

df = pd.read_excel("hotel.xlsx")

# 获取 地点  经纬度信息
geo_sight_coord = {df.iloc[i]['酒店地址']: [df.iloc[i]['经度'], df.iloc[i]['纬度']] for i in range(len(df))}
data = [(df['酒店地址'][j], f"{int(df['最低价'][j])}元(最低价)") for j in range(len(df))]
# print(data)
# print(geo_sight_coord)

g = Geo(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, width="1000px", height="600px"))
g.add_schema(maptype="北京")
for k, v in list(geo_sight_coord.items()):
    # 添加地址、经纬度数据
    g.add_coordinate(k, v[0], v[1])

# 涟漪散点图
g.add("", data_pair=data, type_=GeoType.EFFECT_SCATTER, symbol_size=6)
g.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
g.set_global_opts(title_opts=opts.TitleOpts(title="北京-酒店地址分布"))
g.render("酒店地址分布.html")复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

三、柱形图

代码如下:

from pyecharts.charts import Bar
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType, CurrentConfig
from pyecharts import options as opts


CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
# 链式调用
c = (
    Bar(
        init_opts=opts.InitOpts(           # 初始配置项
            theme=ThemeType.MACARONS,
            animation_opts=opts.AnimationOpts(
                animation_delay=1000, animation_easing="cubicOut"   # 初始动画延迟和缓动效果
            ))
        )
    .add_xaxis(xaxis_data=Faker.choose())      # x轴
    .add_yaxis(series_name="商家A", yaxis_data=Faker.values())       # y轴
    .add_yaxis(series_name="商家B", yaxis_data=Faker.values())       # y轴
    .set_global_opts(
        title_opts=opts.TitleOpts(title='标题', subtitle='副标题',   # 标题配置和调整位置
                                  title_textstyle_opts=opts.TextStyleOpts(
                                  font_family='SimHei', font_size=25, font_weight='bold', color='red',
                                  ), pos_left="90%", pos_top="10",
                                  ),
        xaxis_opts=opts.AxisOpts(name='x轴名称', axislabel_opts=opts.LabelOpts(rotate=45)),  # 设置x名称和Label rotate解决标签名字过长使用
        yaxis_opts=opts.AxisOpts(name='y轴名称'),

    )
    .render("bar_001.html")
)复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

代码如下:

import pandas as pd
import collections
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType, CurrentConfig
import random

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

df = pd.read_excel("hotel.xlsx")
area = list(df['酒店地址'])
area_list = []
for i in area:
    _index = i.find("区")
    # 字符串切片得到行政区名
    i = i[:_index + 1]
    area_list.append(i)

area_count = collections.Counter(area_list)
area_dic = dict(area_count)

# 两个列表对应   行政区  对应的酒店数量
area = [x for x in list(area_dic.keys())][0:10]
nums = [y for y in list(area_dic.values())][:10]

# 定制风格
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
colors = ['red', '#0000CD', '#000000', '#008000', '#FF1493', '#FFD700', '#FF4500', '#00FA9A', '#191970', '#9932CC']
random.shuffle(colors)
# 配置y轴数据  Baritem
y = []
for i in range(10):
    y.append(
        opts.BarItem(
            value=nums[i],
            itemstyle_opts=opts.ItemStyleOpts(color=colors[i])   # 设置每根柱子的颜色
        )
    )
bar.add_xaxis(xaxis_data=area)
bar.add_yaxis("酒店数量", yaxis_data=y)
bar.set_global_opts(xaxis_opts=opts.AxisOpts(
                                    name='行政区',
                                    axislabel_opts=opts.LabelOpts(rotate=45)
                                    ),
                    yaxis_opts=opts.AxisOpts(
                                    name='酒店数量', min_=0, max_=330,     # y轴刻度的最小值 最大值
                    ),
                    title_opts=opts.TitleOpts(
                        title="行政区-酒店数量",
                        title_textstyle_opts=opts.TextStyleOpts(
                            font_family="KaiTi", font_size=25, color="black"
                        )
                    ))
# 标记最大值  最小值  平均值   标记平均线
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False),
                    markpoint_opts=opts.MarkPointOpts(
                    data=[
                        opts.MarkPointItem(type_="max", name="最大值"),
                        opts.MarkPointItem(type_="min", name="最小值"),
                        opts.MarkPointItem(type_="average", name="平均值")]),
                    markline_opts=opts.MarkLineOpts(
                    data=[
                        opts.MarkLineItem(type_="average", name="平均值")]))
bar.render("行政区酒店数量最多的Top10.html")复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

代码如下:

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType, CurrentConfig

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
c = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
    .add_xaxis(xaxis_data=Faker.days_attrs)
    .add_yaxis("商家A", yaxis_data=Faker.days_values)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Bar-DataZoom(slider+inside)"),
        datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],
    )
    .render("bar_datazoom_both.html")
)复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

四、饼图

代码如下:

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
from pyecharts.globals import CurrentConfig

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
c = (
    Pie()
    .add(
        "",
        [list(z) for z in zip(Faker.choose(), Faker.values())],
        # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
        # 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
        center=["35%", "50%"],
    )
    .set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])   # 设置颜色
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Pie-设置颜色-调整图例位置"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="70%", orient="vertical"),  # 调整图例位置
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render("pie_set_color.html")
)复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

代码如下:

import pyecharts.options as opts
from pyecharts.charts import Pie
from pyecharts.globals import CurrentConfig

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

x_data = ["深度学习", "数据分析", "Web开发", "爬虫", "图像处理"]
y_data = [688, 888, 560, 388, 480]
data_pair = [list(z) for z in zip(x_data, y_data)]
data_pair.sort(key=lambda x: x[1])

c = (
    # 宽  高  背景颜色
    Pie(init_opts=opts.InitOpts(width="1200px", height="800px", bg_color="#2c343c"))
    .add(
        series_name="学习方向",    # 系列名称
        data_pair=data_pair,      # 系列数据项,格式为 [(key1, value1), (key2, value2)]
        rosetype="radius",        # radius:扇区圆心角展现数据的百分比,半径展现数据的大小
        radius="55%",             # 饼图的半径
        center=["50%", "50%"],    # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
        label_opts=opts.LabelOpts(is_show=False, position="center"),   #  标签配置项
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="Customized Pie",
            pos_left="center",
            pos_top="20",
            title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    )
    .set_series_opts(
        tooltip_opts=opts.TooltipOpts(
            trigger="item", formatter="{a} 
{b}: {c} ({d}%)"  # 'item': 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用
         ),
        label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),
    )
    .render("customized_pie.html")
)复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

五、环图

代码如下:

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
from pyecharts.globals import CurrentConfig

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
c = (
    Pie()
    .add(
        "",
        [list(z) for z in zip(Faker.choose(), Faker.values())],
        # 饼图的半径,数组的第一项是内半径,第二项是外半径
        # 默认设置成百分比,相对于容器高宽中较小的一项的一半
        radius=["40%", "60%"],
    )
    .set_colors(["blue", "green", "    #800000", "red", "#000000", "orange", "purple"])
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Pie-Radius"),
        legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render("pie_radius.html")
)复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

代码如下:

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
from pyecharts.globals import CurrentConfig

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
c = (
    Pie()
    .add(
        "",
        [list(z) for z in zip(Faker.choose(), Faker.values())],
        radius=["40%", "60%"],
        label_opts=opts.LabelOpts(
            position="outside",
            formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c}  {per|{d}%}  ",
            background_color="#eee",
            border_color="#aaa",
            border_width=1,
            border_radius=4,
            rich={
                "a": {"color": "#999", "lineHeight": 22, "align": "center"},
                "abg": {
                    "backgroundColor": "#e3e3e3",
                    "width": "100%",
                    "align": "right",
                    "height": 22,
                    "borderRadius": [4, 4, 0, 0],
                },
                "hr": {
                    "borderColor": "#aaa",
                    "width": "100%",
                    "borderWidth": 0.5,
                    "height": 0,
                },
                "b": {"fontSize": 16, "lineHeight": 33},
                "per": {
                    "color": "#eee",
                    "backgroundColor": "#334455",
                    "padding": [2, 4],
                    "borderRadius": 2,
                },
            },
        ),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-富文本示例"))
    .render("pie_rich_label.html")
)复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

六、玫瑰图

代码如下:

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
from pyecharts.globals import CurrentConfig

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
labels = ['可乐', '雪碧', '橙汁', '奶茶', '冰啤酒', '柠檬水']
values = [6, 12, 28, 52, 72, 96]
v = Faker.choose()
c = (
    Pie()
    .add(
        "",
        [list(z) for z in zip(v, Faker.values())],
        radius=["40%", "75%"],
        center=["22%", "50%"],
        rosetype="radius",
        label_opts=opts.LabelOpts(is_show=False),
    )
    .add(
        "",
        [list(z) for z in zip(labels, values)],
        radius=["40%", "75%"],
        center=["70%", "50%"],
        rosetype="area",
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例"),
                     legend_opts=opts.LegendOpts(is_show=False)
                     )
    .render("pie_rosetype.html")
)复制代码

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.globals import CurrentConfig
import pandas as pd

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
provinces = ['北京','上海','黑龙江','吉林','辽宁','内蒙古','*','*','青海','四川','云南','陕西','重庆',
             '贵州','广西','海南','澳门','湖南','江西','福建','安徽','浙江','江苏','宁夏','山西','河北','天津']
num = [1,1,1,17,9,22,23,42,35,7,20,21,16,24,16,21,37,12,13,14,13,7,22,8,16,13,13]
color_series = ['#FAE927','#E9E416','#C9DA36','#9ECB3C','#6DBC49',
                '#37B44E','#3DBA78','#14ADCF','#209AC9','#1E91CA',
                '#2C6BA0','#2B55A1','#2D3D8E','#44388E','#6A368B'
                '#7D3990','#A63F98','#C31C88','#D52178','#D5225B',
                '#D02C2A','#D44C2D','#F57A34','#FA8F2F','#D99D21',
                '#CF7B25','#CF7B25','#CF7B25']

# 创建DataFrame
df = pd.DataFrame({'provinces': provinces, 'num': num})
# 降序排序
df.sort_values(by='num', ascending=False, inplace=True)

# 提取数据
v = df['provinces'].values.tolist()
d = df['num'].values.tolist()
# 绘制饼图
pie1 = Pie(init_opts=opts.InitOpts(width='1250px', height='750px'))
# 设置颜色
pie1.set_colors(color_series)

pie1.add("", [list(z) for z in zip(v, d)],
        radius=["30%", "100%"],
        center=["50%", "50%"],
        rosetype="area"
        )
# 设置全局配置项
pie1.set_global_opts(title_opts=opts.TitleOpts(title='多省区市\n确诊病例连续多日',subtitle='零新增',
                                               title_textstyle_opts=opts.TextStyleOpts(font_size=25,color= '#0085c3'),
                                               subtitle_textstyle_opts= opts.TextStyleOpts(font_size=50,color= '#003399'),
                                               pos_right= 'center',pos_left= 'center',pos_top='42%',pos_bottom='center'
                                              ),
                     legend_opts=opts.LegendOpts(is_show=False),
                     toolbox_opts=opts.ToolboxOpts())
# 设置系列配置项
pie1.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="inside", font_size=12,
                                               formatter="{b}:{c}天", font_style="italic",
                                               font_weight="bold", font_family="SimHei"
                                               ),
                     )
# 渲染在html页面上
pie1.render('南丁格尔玫瑰图示例.html')复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

七、词云图

词云就是通过形成关键词云层或关键词渲染,过滤掉大量的文本信息,对网络文本中出现频率较高的关键词的视觉上的突出。

import jieba
import collections
import re
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType
from pyecharts import options as opts
from pyecharts.globals import ThemeType, CurrentConfig

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

with open('barrages.txt') as f:
    data = f.read()

# 文本预处理  去除一些无用的字符   只提取出中文出来
new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S)  # 只要字符串中的中文
new_data = " ".join(new_data)

# 文本分词--精确模式
seg_list_exact = jieba.cut(new_data, cut_all=False)

result_list = []
with open('stop_words.txt', encoding='utf-8') as f:
    con = f.readlines()
    stop_words = set()
    for i in con:
        i = i.replace("\n", "")   # 去掉读取每一行数据的\n
        stop_words.add(i)

for word in seg_list_exact:
    # 设置停用词并去除单个词
    if word not in stop_words and len(word) > 1:
        result_list.append(word)
print(result_list)

# 筛选后统计
word_counts = collections.Counter(result_list)
# 获取前100最高频的词
word_counts_top100 = word_counts.most_common(100)
# 打印出来看看统计的词频
print(word_counts_top100)

# 链式调用
c = (
    WordCloud(
        init_opts=opts.InitOpts(width='1350px', height='750px', theme=ThemeType.MACARONS)
    )
    .add(
        series_name="词频",               # 系列名称
        data_pair=word_counts_top100,   # 系列数据项 [(word1, count1), (word2, count2)]
        word_size_range=[15, 108],      # 单词字体大小范围
        textstyle_opts=opts.TextStyleOpts(     # 词云图文字的配置
            font_family='KaiTi',
        ),
        shape=SymbolType.DIAMOND,  # 词云图轮廓,有 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star' 可选
        pos_left='100',  # 距离左侧的距离
        pos_top='50',    # 距离顶部的距离
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(           # 标题配置项
            title='弹幕词云图',
            title_textstyle_opts=opts.TextStyleOpts(
                font_family='SimHei',
                font_size=25,
                color='black'
            ),
            pos_left='500',
            pos_top='10',
        ),
        tooltip_opts=opts.TooltipOpts(       # 提示框配置项
            is_show=True,
            background_color='red',
            border_color='yellow',
        ),
        toolbox_opts=opts.ToolboxOpts(       # 工具箱配置项
            is_show=True,
            orient='vertical',
        )
    )
    .render('弹幕词云图.html')
)复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

八、仪表盘

from pyecharts.charts import Gauge
from pyecharts.globals import CurrentConfig
from pyecharts import options as opts

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

c = (
    Gauge()
    .add(
        series_name='业务指标',            # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
        data_pair=[['完成率', 88.8]],      # 系列数据项,格式为 [(key1, value1), (key2, value2)]
        radius='70%',                      # 仪表盘半径,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
        axisline_opts=opts.AxisLineOpts(
            linestyle_opts=opts.LineStyleOpts(  # 坐标轴轴线配置项
                color=[(0.3, "#67e0e3"), (0.7, "#37a2da"), (1, "#fd666d")],
                width=30,
            )
        ),
        title_label_opts=opts.LabelOpts(          # 轮盘内标题文本项标签配置项
            font_size=25, color='blue', font_family='KaiTi'
        )
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(          # 标题配置项
            title='仪表盘',
            title_textstyle_opts=opts.TextStyleOpts(
                font_size=25, font_family='SimHei',
                color='black', font_weight='bold',
            ),
        pos_left="410", pos_top="8",
        ),
        legend_opts=opts.LegendOpts(        # 图例配置项
            is_show=False
        ),
        tooltip_opts=opts.TooltipOpts(         # 提示框配置项
            is_show=True,
            formatter="{a} 
{b} : {c}%",
        )
    )
    .render('gauge.html')
)复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

九、水球图

from pyecharts import options as opts
from pyecharts.charts import Grid, Liquid
from pyecharts.commons.utils import JsCode
from pyecharts.globals import CurrentConfig, ThemeType

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

lq_1 = (
    Liquid()
    .add(
        series_name='电量',        # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
        data=[0.25],               # 系列数据,格式为 [value1, value2, ....]
        center=['60%', '50%'],
        # 水球外形,有' circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow' 可选。
        # 默认 'circle'   也可以为自定义的 SVG 路径
        shape='circle',
        color=['yellow'],          # 波浪颜色   Optional[Sequence[str]] = None,
        is_animation=True,         # 是否显示波浪动画
        is_outline_show=False,     # 是否显示边框
    )
    .set_global_opts(title_opts=opts.TitleOpts(title='多个Liquid显示'))
)

lq_2 = (
    Liquid()
    .add(
        series_name='数据精度',
        data=[0.8866],
        center=['25%', '50%'],
        label_opts=opts.LabelOpts(
            font_size=50,
            formatter=JsCode(
                """function (param) {
                        return (Math.floor(param.value * 10000) / 100) + '%';
                    }"""
            ),
            position='inside'
        )

    )
)

grid = Grid(init_opts=opts.InitOpts(theme=ThemeType.DARK)).add(lq_1, grid_opts=opts.GridOpts()).add(lq_2, grid_opts=opts.GridOpts())
grid.render("multiple_liquid.html")复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

数据获取

数据来源:www.tianqihoubao.com/aqi/chengdu…

爬取2019年全年成都空气质量数据

import pandas as pd

dates = pd.date_range('20190101', '20191201', freq='MS').strftime('%Y%m')   # 构造出日期序列  便于之后构造url
for i in range(len(dates)):
    df = pd.read_html(f'http://www.tianqihoubao.com/aqi/chengdu-{dates[i]}.html', encoding='gbk', header=0)[0]
    if i == 0:
        df.to_csv('2019年成都空气质量数据.csv', mode='a+', index=False)     # 追加写入
        i += 1
    else:
        df.to_csv('2019年成都空气质量数据.csv', mode='a+', index=False, header=False)复制代码

查看爬取的数据

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

十、折线图

折线图是排列在工作表的列或行中的数据可以绘制到折线图中。折线图可以显示随时间(根据常用比例设置)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势。

绘制2019年成都AQI指数走势图

import pandas as pd
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.globals import CurrentConfig

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
df = pd.read_csv('2019年成都空气质量数据.csv')

date = [x for x in range(len(df['日期']))]
value = [int(i) for i in df['AQI指数']]

# 绘制折线图
line = Line()
line.add_xaxis(xaxis_data=date)
line.add_yaxis(
    "AQI指数",       # 系列数据项
    value,           # y轴数据
    areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color='#00FFFF'),  # 设置图形透明度  填充颜色
    label_opts=opts.LabelOpts(is_show=False),   # 标签配置项
    markpoint_opts=opts.MarkPointOpts(          # 标记点配置项
        data=[
                opts.MarkPointItem(type_="max", name="最大值"),
                opts.MarkPointItem(type_="min", name="最小值"),
                opts.MarkPointItem(type_="average", name="平均值")
        ]
    ),
    markline_opts=opts.MarkLineOpts(            # 标记线配置项
        data=[opts.MarkLineItem(type_="average", name="平均值")])
)
line.set_global_opts(
    title_opts=opts.TitleOpts(title='2019成都AQI指数走势图(按日统计)')
)
line.render('2019成都AQI指数走势图(按日统计).html')复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

import pandas as pd
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.globals import CurrentConfig, ThemeType
import math

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
df = pd.read_csv('2019年成都空气质量数据.csv')[['日期', 'AQI指数']]
data = df['日期'].str.split('-', expand=True)[1]
df['月份'] = data

# 按月份分组 聚合 统计每月AQI指数平均值
counts = df.groupby('月份').agg({'AQI指数': 'mean'})

date = [f'{x}月' for x in range(1, 13)]
value = [math.ceil(i) for i in counts['AQI指数']]

line = Line(init_opts=opts.InitOpts(theme=ThemeType.DARK))
line.set_colors(['red'])
line.add_xaxis(xaxis_data=date)
line.add_yaxis(
    "AQI指数均值",    # 系列数据项   用于图例筛选
    value,            # y轴数据
    label_opts=opts.LabelOpts(is_show=False),
    markpoint_opts=opts.MarkPointOpts(    # 标记点配置项
        data=[
                opts.MarkPointItem(type_="max", name="最大值"),
                opts.MarkPointItem(type_="min", name="最小值"),
                opts.MarkPointItem(type_="average", name="平均值")
        ]
    ),
    markline_opts=opts.MarkLineOpts(         # 标记线配置项
        data=[opts.MarkLineItem(type_="average", name="平均值")])
)
line.set_global_opts(      # 全局配置项
    title_opts=opts.TitleOpts(
        title='2019成都AQI全年走势图(按月统计)',
        pos_left='32%', pos_top='3%',
        title_textstyle_opts=opts.TextStyleOpts(
            font_family='SimHei', font_size=20, color='#F0FFF0'
        )
    ),
    xaxis_opts=opts.AxisOpts(name='月份'),          # x轴标签
    yaxis_opts=opts.AxisOpts(name='AQI指数均值')    # y轴标签
)
line.render('2019成都AQI指数走势图(按月统计).html')复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

十一、箱形图

箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比 较。箱线图的绘制方法是:先找出一组数据的上边缘、下边缘、中位数和两个四分位数;然后, 连接两个四分位数画出箱体;再将上边缘和下边缘与箱体相连接,中位数在箱体中间。

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Boxplot
from pyecharts.globals import CurrentConfig, ThemeType

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

df = pd.read_csv('2019年成都空气质量数据.csv')[['日期', 'AQI指数']]
df.sort_values(by='AQI指数', inplace=True)     # 按AQI指数大小排序 升序
data = df['日期'].str.split('-', expand=True)[1]
df['月份'] = data
item1, item2, item3, item4 = [], [], [], []

# 分为4个季度
for i, j in zip(df['月份'], df['AQI指数']):
    if i in ['01', '02', '03']:
        item1.append(j)
    elif i in ['04', '05', '06']:
        item2.append(j)
    elif i in ['07', '08', '09']:
        item3.append(j)
    elif i in ['10', '11', '12']:
        item4.append(j)

x_data = [f'第{i}季度' for i in range(1, 5)]
y_data = [item1, item2, item3, item4]
boxplot = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
boxplot.set_colors(['red'])
boxplot.add_xaxis(xaxis_data=x_data)
boxplot.add_yaxis(series_name='', y_axis=boxplot.prepare_data(y_data))
boxplot.set_global_opts(
    title_opts=opts.TitleOpts(
        title='2019年成都季度AQI指数箱型图',
        pos_left='300', pos_top='5',
        title_textstyle_opts=opts.TextStyleOpts(
            font_family='KaiTi', font_size=20, color='black'
        )
    ),
    xaxis_opts=opts.AxisOpts(name='季度'),
    yaxis_opts=opts.AxisOpts(name='AQI指数')
)
boxplot.render('2019年成都季度AQI指数箱型图.html')复制代码

运行效果如下:

这几个用 Pyecharts 做出来的交互图表,领导说叼爆了!


上一篇:[pyecharts学习笔记]——全局配置项(AxisOpts坐标轴配置项)


下一篇:kratos的返回值问题与错误返回问题