Pyecharts绘制22种超实用精美图表

今天来给大家分享一下Pyecharts模块,说到它我们就不得不提Echarts,它是由百度开源的一款使用JavaScript实现的开源可视化库,涵盖了各种图表、满足各类业务需求,而pyecharts也就是Python与Echarts结合之后的产物,封装了Echarts各类图表的基本操作,然后通过渲染机制,输出一个包含JS代码的HTML文件。

3ee8116bedeeb49283a6538fcb61790c.png

01

安装与导入模块

说到安装模块,我们可以这样来进行,

pip install pyecharts

使用Pyecharts创建图形的基本步骤是

1. 准备数据

2. 设计图形的样式、背景颜色

3. Pyecharts绘图

4. 设计图表的标题或者图例等属性

5. 导出至html

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker


c = (
    Bar()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家1", Faker.values())
    .add_yaxis("商家2", Faker.values())
    .set_global_opts(title_opts=opts.TitleOpts(title="这是主标题", subtitle="这是副标题"))
    .render("bar_base.html")
)

出来的结果是

3a3db0029c2e7f5fb7937233acff18cf.png

02

数据准备

import pandas as pd
import numpy as np


data = pd.DataFrame({'x':np.arange(1,101),
                     'y':["随机生成的数字"]})


df = pd.read_excel("你的文件的路径")

03

Pycharts还提供内置的数据集

Pyecharts内部还提供了一些数据集,主要包含类别数据、时间数据、颜色数据、地理数据、世界人口数据等等,通过choose()方法来随机选择使用哪个

def choose(self) -> list:
    return random.choice(
        [
            self.clothes,
            self.drinks,
            self.phones,
            self.fruits,
            self.animal,
            self.dogs,
            self.week,
        ]
    )

04

图形的样式

说到图形的样式,大概都这么几种

class _ThemeType:
    BUILTIN_THEMES = ["light", "dark", "white"]
    LIGHT = "light"
    DARK = "dark"
    WHITE = "white"
    CHALK: str = "chalk"
    ESSOS: str = "essos"
    INFOGRAPHIC: str = "infographic"
    MACARONS: str = "macarons"
    PURPLE_PASSION: str = "purple-passion"
    ROMA: str = "roma"
    ROMANTIC: str = "romantic"
    SHINE: str = "shine"
    VINTAGE: str = "vintage"
    WALDEN: str = "walden"
    WESTEROS: str = "westeros"
    WONDERLAND: str = "wonderland"
    HALLOWEEN: str = "halloween"

06

设置标题、副标题

设置标题以及副标题的代码如下

set_global_opts(title_opts=opts.TitleOpts(title="这是主标题",
                                          subtitle="这是副标题"))

07

设置图例与位置

legend_opts=opts.LegendOpts(type_="scroll", orient="vertical",
                            pos_top="15%",pos_left="7%")) # 图裂的位置
label_opts=opts.LabelOpts(formatter="{b}: {c}") # 结果的展现形式

08

导出结果

render("test.html")


# 如果是在jupyter notebook当中
render_notebook()

09

Pyecharts绘图

堆叠柱状图

同个品类不同类目的柱子可以堆叠起来呈现,也就是堆叠的柱状图

c = (
    Bar()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家1", Faker.values(), stack="stack1")
    .add_yaxis("商家2", Faker.values(), stack="stack1")
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-堆叠数据(全部)"))
    .render("bar_stack_1212.html")
)

71c7136bbb217988f083388da2696be8.png

当然我们也可以部分堆叠,而不是上面这种全部的堆叠

c = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
    .add_xaxis(Faker.choose())
    .add_yaxis("商家1", Faker.values(), stack="stack0")
    .add_yaxis("商家2", Faker.values(), stack="stack0")
    .add_yaxis("商家3", Faker.values())
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-堆叠数据(部分)"))
    .render("bar_stack_part.html")
)

cdf7c96084e6fd5573acf180b3d553a5.png

柱状图的横坐标倾斜一丢丢

有时候横坐标的标识字数较多,X轴上显示全,我们可以将标识的字体稍微倾斜一些

c = (
    Bar()
    .add_xaxis(
        [
            "名字相当长的X轴标签1",
            "名字相当长的X轴标签2",
            "名字相当长的X轴标签3",
            "名字相当长的X轴标签4",
            "名字相当长的X轴标签5",
            "名字相当长的X轴标签6",
        ]
    )
    .add_yaxis("商家1", Faker.values())
    .add_yaxis("商家2", Faker.values())
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=15)),
        title_opts=opts.TitleOpts(title="Bar-旋转X轴标签", subtitle="副标题"),
    )
    .render("test.html")
)

bf9740e84bfdd253a7e8e949a28bdf53.png

柱状图可以自动缩放的

通过底下的滑块来实现横坐标的缩放、范围的调整等等

c = (
    Bar()
    .add_xaxis(Faker.days_attrs)
    .add_yaxis("商家1", Faker.days_values)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Bar-数据缩放(拖快-水平)"),
        datazoom_opts=opts.DataZoomOpts(),
    )
    .render("bar_datazoom_slider.html")
)

be7b5112ea337156fe73fe68c85fe02d.gif

当然滑块也可以放在垂直的右侧

c = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
    .add_xaxis(Faker.days_attrs)
    .add_yaxis("商家1", Faker.days_values, color=Faker.rand_color())
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Bar-DataZoom(滑块-垂直)"),
        datazoom_opts=opts.DataZoomOpts(orient="vertical"),
    )
    .render("bar_datazoom_slider_vertical.html")
)

9c68792c239c71da41883032435f5d10.gif

我们也可以通过拖动里面的柱子来实现数据缩放、范围的改变

c = (
    Bar()
    .add_xaxis(Faker.days_attrs)
    .add_yaxis("商家1", Faker.days_values)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Bar-DataZoom(内置+外置)"),
        datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],
    )
    .render("bar_datazoom_both.html")
)

23ed6abfdc696250d1ce9be1c3d82fed.gif

柱状图给X轴Y轴命名的

c = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
    .add_xaxis(Faker.choose())
    .add_yaxis("商家1", Faker.values())
    .add_yaxis("商家2", Faker.values())
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Bar-XY 轴名称"),
        yaxis_opts=opts.AxisOpts(name="这个是 Y 轴"),
        xaxis_opts=opts.AxisOpts(name="这个是 X 轴"),
    )
    .render("bar_name_xyaxis.html")
)

8caa7fb66905e7faaa670ff89560339d.png

柱状图柱间距离不相同的

在柱状图当中,不同柱子之间的距离也可以不是相同的

c = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.WHITE))
    .add_xaxis(Faker.choose())
    .add_yaxis("商家1", Faker.values(), gap="0%")
    .add_yaxis("商家2", Faker.values(), gap="0%")
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-柱间距离不同"))
    .render("bar_different_series_gap.html")
)

af6f64020e49e8bbda236643d88e3010.png

柱状图水平状态的

还有水平方向的柱状图

c = (
    Bar()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家1", Faker.values())
    .add_yaxis("商家2", Faker.values())
    .reversal_axis()
    .set_series_opts(label_opts=opts.LabelOpts(position="right"))
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-水平方向"))
    .render("bar_reversal_axis.html")
)

a0201a08a8477a412ac3f1157cd77c98.png

直方图

c = (
    Bar()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家1", Faker.values(), category_gap=0, color=Faker.rand_color())
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-直方图"))
    .render("bar_histogram.html")
)

afd46355491c6d08274587053fdbb469.png

箱型图

箱型图更加有利于我们来观察数据的内在分布

from pyecharts.charts import Boxplot


v1 = [
    [850, 740, 950, 1090, 930, 850, 950, 980, 1000, 880, 1000, 980],
    [980, 940, 960, 940, 900, 800, 850, 880, 950, 840, 830, 800],
]
v2 = [
    [890, 820, 820, 820, 800, 770, 760, 760, 750, 760, 950, 920],
    [900, 840, 800, 810, 760, 810, 790, 850, 820, 850, 870, 880],
]
c = Boxplot()
c.add_xaxis(["A", "B"])
c.add_yaxis("类目1", c.prepare_data(v1))
c.add_yaxis("类目2", c.prepare_data(v2))
c.set_global_opts(title_opts=opts.TitleOpts(title="箱型图-基本示例"))
c.render("boxplot_test.html")

35db5c65410b9a6c0b498888da0b05fe.png

日历图

日历图具体指按照日历的布局,用颜色展现每一天的数据,从而比较直观地看到全年的数据情况,例如展示超市全年的销售额,从而看出具体某个月份或者某个星期的销售额比较低

c = (
    Calendar(init_opts=opts.InitOpts(theme=ThemeType.INFOGRAPHIC))
    .add("", data, calendar_opts=opts.CalendarOpts(range_="2020"))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="日历图-2020年超市的销售额"),
        visualmap_opts=opts.VisualMapOpts(
            max_=250000,
            min_=10000,
            orient="horizontal",
            is_piecewise=True,
            pos_top="230px",
            pos_left="100px",
        ),
    )
    .render("calendar_test.html")
)

e13aeee3ea3bea2e398a3e40ff872a49.png

K线图

c = (
    Kline(init_opts=opts.InitOpts(theme=ThemeType.ESSOS))
    .add_xaxis(["2020/7/{}".format(i + 1) for i in range(31)])
    .add_yaxis("kline", data)
    .set_global_opts(
        yaxis_opts=opts.AxisOpts(is_scale=True),
        xaxis_opts=opts.AxisOpts(is_scale=True),
        title_opts=opts.TitleOpts(title="K线图-基本示例"),
    )
    .render("kline_test.html")
)

71f590800cd6b9ec6f6e54a903ef76d0.png

漏斗图

from pyecharts.charts import Funnel


c = (
    Funnel()
    .add("类目", [list(z) for z in zip(Faker.choose(), Faker.values())])
    .set_global_opts(title_opts=opts.TitleOpts(title="漏斗图-基本示例"))
    .render("funnel_test.html")
)

e86b538c560b935dc9b0e644a947adf8.png

折线图

c = (
    Line()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家1", Faker.values())
    .add_yaxis("商家2", Faker.values())
    .set_global_opts(title_opts=opts.TitleOpts(title="折线图-基本示例"))
    .render("line_test.html")
)

f33f66cb377f4404b001a3677460d11a.png

水球图

水球图通常来显示指标的完成程度

from pyecharts.charts import Liquid


c = (
    Liquid()
    .add("lq", [0.55, 0.75])
    .set_global_opts(title_opts=opts.TitleOpts(title="Liquid-基本示例"))
    .render("liquid_test.html")
)

77d479ca205afcc6934055ba2b1dacbe.gif

词云图

c = (
    WordCloud()
    .add(series_name="词云图实例", data_pair=data, word_size_range=[5, 100])
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="词云图实例", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
        ),
        tooltip_opts=opts.TooltipOpts(is_show=True),
    )
    .render("basic_wordcloud.html")
)

acb26700d64af62331eefca4f658f03c.png

饼图

c = (
    Pie()
    .add("类目", [list(z) for z in zip(Faker.choose(), Faker.values())])
    .set_global_opts(title_opts=opts.TitleOpts(title="饼图-基本示例"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render("pie_test.html")
)

ce6f34b34d21d993d9e0c0968381284a.png

仪表盘图

仪表盘的绘制也可以用来展示指标的完成程度

from pyecharts.charts import Gauge


c = (
    Gauge()
    .add("", [("完成率", 70)])
    .set_global_opts(title_opts=opts.TitleOpts(title="仪表盘-基本示例"))
    .render("gauge_test.html")
)

f4e87245c3cdb1b580da7462acd33fa1.gif

地图

c = (
    Map()
    .add("商家1", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
    .set_global_opts(title_opts=opts.TitleOpts(title="地图-基本示例"))
    .render("map_test.html")
)

c65bf266d29f9789e70b1681d8b5010c.png

涟漪散点图

c = (
    EffectScatter()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家1", Faker.values())
    .set_global_opts(title_opts=opts.TitleOpts(title="涟漪散点图-基本示例"))
    .render("effectscatter_test.html")
)

74d12f617baeccef0960ef8fb0b37001.png

HISTORY

/

往期推荐

年轻人如何才能实现年薪百万呢?用数据分析来帮你探探路

分享几个用Python给图片添加水印的方法,简单实用

介绍如何用Python来绘制高清的交互式地图,建议收藏

国内最让人失望的景点有哪些?哪些景点冷门却又十分好玩、值得一去,数据来为你揭晓

分享、收藏、点赞、在看安排一下?

01a0efd82f0f4a6a85cb04486a0e551c.gif

93e65d2bf543a6e6bbe2d1ddae5febbf.gif

35270f03f2f3179e365aae018c1c1359.gif

324718b62246acea2a9ca160359180ab.gif

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值