Python与数据(二)——数据可视化pyecharts

什么是pyecharts

pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒。
pyecharts的github地址在这里:https://github.com/pyecharts/pyecharts

安装

pyecharts

python3.6版本以上就能使用V1版本了,并且V1和V0.5x版本不兼容(V0.5x版本已不再维护),所以我这边直接装的V1以上版本
pip安装

sudo pip install pyecharts -U

pyecharts做出的图是以html格式保存的,如果想以图片的形式进行保存,还需要装下面的库和插件:

snapshot_selenium

用于保存图片
pip安装

sudo pip3.7 install snapshot_selenium

chromedriver

因为我使用的是chrome浏览器,所以就装的chromedriver,其他浏览器也有相应的webdriver
如果装了谷歌浏览器,那输入下面命令:

google-chrome -version

然后可以看到对应的谷歌版本,比如我就是Google Chrome 69.0.3497.92,然后就可以下载对应的版本了http://npm.taobao.org/mirrors/chromedriver/,点一个版本进去,然后里面有一个notes.txt文件,上面会显示该driver版本适用于哪些版本的浏览器,找到符合自己的,下载即可
比如我,是2.42版本:

wget -N http://chromedriver.storage.googleapis.com/2.42/chromedriver_linux64.zip

将下载下来的压缩包解压,然后输入以下:

sudo mv chromedriver /usr/bin
ll /usr/bin/chromedriver

ok了

Github Demo

先试跑一下github上给出的代码。
也就是这一份:

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

# V1 版本开始支持链式调用
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()

会生成一个html文件,浏览器打开后,如下所示:
(关于Ubuntu下如何录制gif动图:https://blog.youkuaiyun.com/qq_41433316/article/details/103917149
在这里插入图片描述
下面是生成图片的demo:

from snapshot_selenium import snapshot as driver

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.render import make_snapshot


def bar_chart() -> Bar:
    c = (
        Bar()
        .add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
        .add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
        .add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
        .reversal_axis()
        .set_series_opts(label_opts=opts.LabelOpts(position="right"))
        .set_global_opts(title_opts=opts.TitleOpts(title="Bar-测试渲染图片"))
    )
    return c

# 需要安装 snapshot-selenium 或者 snapshot-phantomjs
make_snapshot(driver, bar_chart().render(), "bar.png")

在这里插入图片描述
Demo看完后,下面就是进一步的学习了

图表

先给出学习教程:https://pyecharts.org/#/zh-cn/
以及要知晓pyecharts给出的图表类型:

名称 说明 名称 说明 名称 说明
Bar 柱状图/条形图 Bar3D 3D 柱状图 Boxplot 箱形图
EffectScatter 带有涟漪特效动画的散点图 Funnel 漏斗图 Gauge 仪表盘
Geo 地理坐标系 Graph 关系图 HeatMap 热力图
Kline K线图 Line 折线/面积图 Line3D 3D 折线图
Liquid 水球图 Map 地图 Parallel 平行坐标系
Pie 饼图 Polar 极坐标系 Radar 雷达图
Sankey 桑基图 Scatter 散点图 Scatter3D 3D 散点图
ThemeRiver 主题河流图 WordCloud 词云图

此外,用户可自定义图表类型:

  • Grid 类:并行显示多张图
  • Overlap 类:结合不同类型图表叠加画在同张图上
  • Page 类:同一网页按顺序展示多图
  • Timeline 类:提供时间线轮播多张图

直角坐标系图表

Bar:柱状图/条形图

新增X轴数据:

def add_xaxis(
    # X 轴数据项
    xaxis_data: Sequence
)

新增Y轴数据:

def add_yaxis(
    # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
    series_name: str,

    # 系列数据
    yaxis_data: Sequence[Numeric, opts.BarItem, dict],

    # 是否选中图例
    is_selected: bool = True,

    # 使用的 x 轴的 index,在单个图表实例中存在多个 x 轴的时候有用。
    xaxis_index: Optional[Numeric] = None,

    # 使用的 y 轴的 index,在单个图表实例中存在多个 y 轴的时候有用。
    yaxis_index: Optional[Numeric] = None,

    # 系列 label 颜色
    color: Optional[str] = None,

    # 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。
    stack: Optional[str] = None,

    # 同一系列的柱间距离,默认为类目间距的 20%,可设固定值
    category_gap: Union[Numeric, str] = "20%",

    # 不同系列的柱间距离,为百分比(如 '30%',表示柱子宽度的 30%)。
    # 如果想要两个系列的柱子重叠,可以设置 gap 为 '-100%'。这在用柱子做背景的时候有用。
    gap: Optional[str] = None,

    # 标签配置项,参考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),

    # 标记点配置项,参考 `series_options.MarkPointOpts`
    markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None,

    # 标记线配置项,参考 `series_options.MarkLineOpts`
    markline_opts: Union[opts.MarkLineOpts, dict, None] = None,

    # 提示框组件配置项,参考 `series_options.TooltipOpts`
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,

    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)

def set_global_opts 全局配置设置

鉴于那个教程里面写的很全,所以这边我只贴几个我觉得可能比较常用的:
首先是导入的模块:

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.commons.utils import JsCode

#pyecharts提供的数据,用自己数据作图可不导入该模块:
from pyecharts.faker import Faker	

# 如果要保存为图片:
from snapshot_selenium import snapshot as driver
from pyecharts.render import make_snapshot
基本示例
def bar_base() -> Bar:
    c = (
        Bar()
        .add_xaxis(Faker.choose())
        .add_yaxis("商家A", Faker.values())
        .add_yaxis("商家B", Faker.values())
        .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
    )
    return c
bar_base().render('基本示例.html')

结果图就是demo的结果

背景图
def bar_base_with_custom_background_image() -> Bar:
    c = (
        Bar(
            init_opts=opts.InitOpts(
                bg_color={
   
                    "type": "pattern",
                    "image": JsCode("img"),
                    "repeat": "no-repeat",
                }
            )
        )
        .add_xaxis(Faker.choose())
        .add_yaxis("商家A", Faker.values())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值