pyecharts源码解读(8)渲染包render之snapshot模块:将结果渲染为图片

Pyecharts使用 刻度间隔默认是自动计算的,如果使用的额外的y轴并且刻度线对不齐,可以自己设置刻度线间隔。3.add_yaxis()中 参数yaxi_index=1,使数据配置在第二个y轴上。2.额外的y轴使用 extend_axis()来配置,position参数控制位置。x轴配置项参数 axislabel_opts={“interval”:“0”}set_series_opts 设置itemstyle_opts。设置全局配置项 set_global_opts。1.创建bar 和 line 两个对象。 阅读详情

当前pyecharts版本为1.9.0

概述

render包结构

render包位于pyecharts包顶级目录中,用于渲染图表。render包结构如下:

├─render # 渲染设置包
│  │  display.py # 定义HTML、JavaScript显示类,用于支持在notebook中嵌入输出结果
│  │  engine.py # 定义渲染相关类、函数
│  │  snapshot.py # 定义渲染图片函数
│  │  __init__.py # 暴露渲染图片函数
│  │
│  ├─templates # 定义渲染模板
│  │      components.html
│  │      macro
│  │      nb_components.html
│  │      nb_jupyter_globe.html
│  │      nb_jupyter_lab.html
│  │      nb_jupyter_lab_tab.html
│  │      nb_jupyter_notebook.html
│  │      nb_jupyter_notebook_tab.html
│  │      nb_nteract.html
│  │      simple_chart.html
│  │      simple_globe.html
│  │      simple_page.html
│  │      simple_tab.html

snapshot模块

snapshot模块,路径为pyecharts/render/snapshot.py,作用为提供渲染图片的接口。原理就是将HTML渲染为图片。

注意!单纯依靠该模块还不能直接渲染图片,还需要安装snapshot-selenium、snapshot-phantomjs、snapshot-pyppeteer等包,利用selenium、phantomjs、pypeteer等第三方库生成图片。具体方法参见pyecharts文档https://pyecharts.org/#/zh-cn/render_images。

snapshot模块的结构如下图所示。

  • make_snapshot函数,模块最重要的函数,集成模块其他函数对外提供接口。
  • decode_base64(data: str) -> bytes函数:解码base64字符串为字节数据。
  • save_as_png(image_data: bytes, output_name: str)函数:根据字节数据生成图片。
  • save_as(image_data: bytes, output_name: str, file_type: str)函数:依靠PIL库根据字节数据生成图片。
  • save_as_text(image_data: str, output_name: str)函数:根据字符串生成文本文件。
    在这里插入图片描述

make_snapshot函数

render包通过from .snapshot import make_snapshot向外暴露make_snapshot函数。

make_snapshot函数的签名为:
def make_snapshot( engine: Any, file_name: str, output_name: str, delay: float = 2, pixel_ratio: int = 2, is_remove_html: bool = False, **kwargs, )

make_snapshot函数的参数如下:

  • engine:渲染引擎,第三方库接口。
  • file_name:传入的HTML文件名称。字符串。
  • output_name:输出图片路径。字符串。
  • delay:延迟时间,避免图还没渲染完成就生成了图片,造成图片不完整。浮点数,默认值为2,单位秒。
  • pixel_ratio:像素比例,用于调节图片质量。整数,默认值为2。
  • is_remove_html:渲染完图片是否删除原 HTML 文件。布尔值,默认值为False。
  • browser:浏览器类型,目前仅支持 Chrome, Safari,使用 snapshot-selenium 时有效。字符串,默认值为"Chrome"。

make_snapshot函数的处理要点大致如下:

如果生成图片路径中文件的扩展名为SVG或base64,调用save_as_text(image_data: str, output_name: str)函数生成文件。

如果生成图片路径中文件的扩展名为pdf, gif, png, jpeg,eps,则利用decode_base64(data: str) -> bytes构造图像数组。
如果文件扩展名为png, jpeg调用save_as_png(image_data: bytes, output_name: str)函数生成文件。
如果文件扩展名为pdf, gif,eps则调用save_as(image_data: bytes, output_name: str, file_type: str)函数生成文件。

pyecharts/render/snapshot.py模块源码

import base64
import codecs
import logging
import os
from io import BytesIO

from ..types import Any

logger = logging.getLogger(__name__)

PNG_FORMAT = "png"
JPG_FORMAT = "jpeg"
GIF_FORMAT = "gif"
PDF_FORMAT = "pdf"
SVG_FORMAT = "svg"
EPS_FORMAT = "eps"
B64_FORMAT = "base64"


def make_snapshot(
    engine: Any,
    file_name: str,
    output_name: str,
    delay: float = 2,
    pixel_ratio: int = 2,
    is_remove_html: bool = False,
    **kwargs,
):
    logger.info("Generating file ...")
    file_type = output_name.split(".")[-1]

    content = engine.make_snapshot(
        html_path=file_name,
        file_type=file_type,
        delay=delay,
        pixel_ratio=pixel_ratio,
        **kwargs,
    )
    if file_type in [SVG_FORMAT, B64_FORMAT]:
        save_as_text(content, output_name)
    else:
        # pdf, gif, png, jpeg
        content_array = content.split(",")
        if len(content_array) != 2:
            raise OSError(content_array)

        image_data = decode_base64(content_array[1])

        if file_type in [PDF_FORMAT, GIF_FORMAT, EPS_FORMAT]:
            save_as(image_data, output_name, file_type)
        elif file_type in [PNG_FORMAT, JPG_FORMAT]:
            save_as_png(image_data, output_name)
        else:
            raise TypeError(f"Not supported file type '{file_type}'")

    if "/" not in output_name:
        output_name = os.path.join(os.getcwd(), output_name)

    if is_remove_html and not file_name.startswith("http"):
        os.unlink(file_name)
    logger.info(f"File saved in {output_name}")


def decode_base64(data: str) -> bytes:
    """Decode base64, padding being optional.

    :param data: Base64 data as an ASCII byte string
    :returns: The decoded byte string.
    """
    missing_padding = len(data) % 4
    if missing_padding != 0:
        data += "=" * (4 - missing_padding)
    return base64.decodebytes(data.encode("utf-8"))


def save_as_png(image_data: bytes, output_name: str):
    with open(output_name, "wb") as f:
        f.write(image_data)


def save_as_text(image_data: str, output_name: str):
    with codecs.open(output_name, "w", encoding="utf-8") as f:
        f.write(image_data)


def save_as(image_data: bytes, output_name: str, file_type: str):
    try:
        from PIL import Image

        m = Image.open(BytesIO(image_data))
        m.load()
        color = (255, 255, 255)
        b = Image.new("RGB", m.size, color)
        b.paste(m, mask=m.split()[3])
        b.save(output_name, file_type, quality=100)
    except ModuleNotFoundError:
        raise Exception(f"Please install PIL for {file_type} image type")
phantomjs 安装教程     PhantomJS是一个基于webkit的JavaScript API。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit浏览器做的事情,它都能做到。它不仅是个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操作、JSON、HTML5、Canvas、SVG等,同时也提供了处理文件I/O的操作,从而使... 阅读详情

相关推荐

Pyecharts生成图片--无需配置环境变量

3.由于作者比较懒,不想设置太多无用的环境变量,同时该方式同时需要将phantomjs执行文件设置环境变量,就比较麻烦.这里我的思路是既然需要设置环境变量那么代码中肯定有调用的地方以及位置,直接找到源码中调用的位置,重写调用方式,以减少设置环境变量的步骤.Pyecharts make_snapshot()调用了snapshot_phantomjs的make_snapshot方法。发现工具名和调用命令,这就是需要更改的代码了,这里我们更改为我们存放的phantomjs文件位置就好了,开始重写该函数。

yqs的博客 1358

数据分析可视化06 PyEcharts 开发快速入门

我在“04 | 图表组件:Echarts数据可视化图表基础”这一课时中简单介绍了 PyEcharts 的参数配置项和图表元素之间的映射关系:PyEcharts 图表配置项这里,我将详细介绍具体的配置项的参数设置方法。PyEcharts 配置项分全局配置项和系列配置项,其中全局配置项作用域为整个图表(与具体需要呈现的数据内容无关),可以理解为静态部分;系列配置项作用范围为基于数据动态绘制的部分。序号类名称主要功能1初始化配置项尺寸、主题样式2工具箱配置项是否显示、位置、工具项3。

fegus的博客 1464

pyecharts画图结果存为图片

通过pyecharts绘制的图像,我们尝尝保存在html文件中,以保持其原有的良好的交互性。但当我们在word或者ppt中使用时,保存为图片的形式,则是我们最想要的方式。针对此问题,通过查找相关实现方式,总结其渲染的html文件保存图片方式。在 Python 中,模块pyecharts模块中存在make_snapshot函数,其作用是生成静态图像快照,能够将 pyecharts 生成的图表保存为图片文件。

积跬步,慕至千里的博客 3653

pyecharts 中使用 make_snapshot 时报错 Can‘t find variable 的处理

pyecharts 中使用 make_snapshot 时报错 Can't find variable 的处理

domodo2012的博客 6915

Python数据可视化 Pyecharts 图表的渲染

大家好,我是Mr数据杨。想象一下,《三国演义》里的诸葛亮为刘备绘制地图,精确标注敌军兵力,让战局一目了然。在Python世界,有个名叫"make_snapshot"的功能,就如同诸葛亮的那支画笔生成出栩栩如生的数据图像。生成图片的方法,就像三国中的各路谋士。他们各有千秋,各有所长,例如‘snapshot-selenium’,就像是深思熟虑的周瑜,他需要的是一个完整的环境,好似严密的战阵。而‘snapshot-phantomjs’,更像是机智敏捷的郭嘉,他可以在幕后静默执行,如同暗中布置的奇谋深策。

Mr数据杨 3万+

pyecharts渲染图片

文章目录make_snapshot引入APIsnapshot-selenium安装使用snapshot-phantomjs安装使用snapshot-pyppeteer安装使用图片 pyecharts 提供了 selenium, phantomjs 和 pyppeteer 三种方式渲染图片。 make_snapshot make_snapshot 用于 pyecharts 直接生成图片 引入 from pyecharts.render import make_snapshot API def make_

Cachel Wood的博客 1307

pyecharts源码解读(10)渲染包render之templates目录:渲染模板

`templates`目录路径为`pyecharts/render/templates`,作用为存放渲染模板。 `pyecharts`使用`jinja2`库的模板引擎生成HTML。 `templates`目录中的文件主要有两类: - `macro`:模板宏定义。宏类似常规编程语言中的函数。它们用于把常用行为作为可重用的函数,取代手动重复的工作。宏还可以传递参数,因此可以实现`pyecharts`对象的渲染。 - `模板文件`:模板文件分为两大类,`nb`开头的html文件是针对notebook的模板,其余

mighty13的专栏 3万+

C++常见面试题总结

C++常见面试题总结

xu_fu_yong的专栏 8万+

02 pycharts 结果生成为 html 、图片(示例代码+效果图)

可以参考链接https//blog.youkuaiyun.com/c_lanxiaofang/article/details/126001670。#render会生成本地HTML文件,默认会在当前目录生成render.html文件。#也可以传入路径参数,如bar.render("mycharts.html")#如果运行完当前目录图片没有出来,可以右键项目从磁盘重新加载。.........

c_lanxiaofang的博客 4710

【已解决】App unavailable Unfortunately, Claude is only available in certain countries and regions

App unavailable Unfortunately, Claude is only available in certain countries and regions right now. We will soon publish a list of supported locations on our website.

weixin_43941438的博客 3万+

使用Linux安装yum报错 E: Unable to correct problems, you have held broken packages.

使用Linux安装yum报错 E: Unable to correct problems, you have held broken packages.

weixin_43205954的博客 2462

pyecharts渲染图片的三种方法

pyecharts渲染图片 pyecharts v1.x版本后,提供了 selenium, phantomjs 和 pyppeteer 三种方式的渲染,只要会其中一种即可 。具体方式见官方文档。这里我采用selenium方式。(官方文档 :http://pyecharts.org/#/zh-cn/render_images) 1.安装snapshot-selenium pip instal...

mango_ZZY的博客 1万+

Deeplabcut实战:从数据标注到行为分析的全流程解析

本文详细解析了Deeplabcut从数据标注到行为分析的全流程实战技巧,包括项目创建、配置文件定制、智能帧提取、高效标注方法、模型训练优化以及多视角融合等高级应用。通过具体案例和实用参数配置,帮助研究者快速掌握这一行为分析工具,提升实验效率和准确性。

weixin_29057163的博客 247

python的pyecharts图表库学习(二)

    下面让我们继续学习这个pyecharts图表库 一:pyecharts-snapshot插件 如果想直接将图片保存为 png, pdf, gif 格式的文件,可以使用该插件。但先要安装Nodeis环境。 插件GitHub地址:pyecharts-snapshot Nodies地址:Nodejs  在cmd命令行中依下面的方法安装环境: 安装 phantomjs   npm ...

ITxiaoangzai的博客 3277

TSC条码打印机C#例程(tsclib.dll调用) 【转】

//----program.cs using System;using System.Collections.Generic;using System.Windows.Forms; using System.Runtime.InteropServices;public class TSCLIB_DLL{[DllImport("TSCLIB.dll", EntryPoint = "abou...

weixin_33843947的博客 2442

15、z/OS 优化配置与迁移实践

本文详细探讨了z/OS环境的优化配置与迁移实践,涵盖DASD存储库管理、用户目录更新、环境更新意义以及不同场景下的迁移案例。通过单笔记本系统和服务器级机器的实例,展示了迁移流程和关键要点,包括DASD文件创建、设备映射更新、系统重启初始化以及数据备份等步骤。文章还总结了迁移过程中的注意事项,并展望了未来z/OS优化的发展趋势,为z/OS系统的稳定运行和高效管理提供了实用指导。

zzz56的博客 129

python的数据可视化

本文主要是用python画图的内容,包括了matplotlib,pyecharts,2D,3D,数字地球等内容。

weixin_38226321的博客 5840

【学习系列】SAP RAP 16:RAP应用部署集成至Fiori Launchpad 【On-Premise】

本文详细介绍了如何将开发完成的RAP应用部署到S4HANA 2023 On-Premise环境并集成到Fiori Launchpad的完整流程。主要内容包括:1)通过ADT工具创建Fiori项目并配置外部IDE(VSCode);2)使用npm命令部署应用到系统;3)通过事务代码创建语义对象、磁贴目录和目标映射;4)配置PFCG角色分配;5)补充了部署失败解决方案、翻译问题处理、自定义主题设置以及登录页面LOGO修改等内容。文章提供了step-by-step的操作指南,帮助开发者将预览模式的应用正式部署到生产

DeveloperMrMeng的博客 637

pyecharts中网络问题导致make_snapshot存储图表失败

在网络波动时会导致make_snapshot存储图表失败,若代码体量较大,会导致长时间卡在一张图表存储语句,后续代码无法执行。具体报错如下: selenium.common.exceptions.JavascriptException: Message: javascript error: echarts is not defined (Session info: headless chrome=103.0.5060.53) Stacktrace: Backtrace:

m0_57470939的博客 1777

Python爬虫实战:美团外卖商家数据抓取与分析

随着互联网技术的快速发展,外卖平台已成为人们日常生活中不可或缺的一部分。本文基于Python爬虫技术,使用最新的异步爬虫框架和反爬虫绕过技术,实现了对美团外卖平台商家信息与评分数据的自动化抓取。通过对抓取数据的清洗、存储和分析,为餐饮行业市场研究和商业决策提供数据支持。本文详细介绍了爬虫的设计思路、技术实现方案、数据处理方法以及可视化分析结果,为相关领域的研究者和开发者提供参考。关键词:Python爬虫;美团外卖;数据抓取;数据分析;异步爬虫。

2201_76125261的博客 1822

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Pyecharts snapshot 导出成图片报错

Pyecharts snapshot error : selenium.common.exceptions.JavascriptException: Message: javascript error: echarts is not defined

wuda19920215的博客 856

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python snap7 简书_使用pyecharts-snapshot将数据生成图表

Python版本image.png需要使用Python安装目录下Scripts文件夹的pip命令在环境变量path中配置image.pngpyecharts-snapshot将pyecharts的输出呈现为png,jpeg,gif,svg,eps,pdf和raw base64格式Github地址:https://github.com/pyecharts/pyecharts-snapshot通过pi...

weixin_39767322的博客 600

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

使用Pyecharts库画图

最后可参考下图代码将图形渲染出来,可以看到data1是牛奶的数据,data2是面包的数据。这里写的是一个直方图和一个双折线图的实列,数据从网上下载。这样就把图形渲染出来啦,赶紧去尝试一下吧!安装插件是为了后续方便操作和配置相关环境。如若不引入pyecharts库则会报错。

wushidouziyongqi的博客 389

使用Pyecharts渲染图表(1)

name="诊疗量(万人次)",type_="value", #'value': 数值轴,适用于连续数据min_=0, #设置左纵坐标轴的刻度值最低范围为0max_=125000, #设置左纵坐标轴的刻度值最高范围为125000interval=25000, #设置左纵坐标轴的刻度值范围的等分间隔为25000position="left", #自定义在左纵坐标轴linestyle_opts=opts.LineStyleOpts(color="#d14a61") #坐标轴数值颜色),

Snyia的博客 1222

make_snapshot错误“ReferenceError: Can‘t find variable: echarts\n\n undefined:1\nnull\n“

make_snapshot(snapshot, b.render(), “bar0.png”) File “C:\Users\DN-26\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pyecharts\render\snapshot.py”, line 45, in make_snapshot raise OSError(content_array) OSError: [“ReferenceError: Can’t find var

忧王的博客 6390
上一篇: pyecharts源码解读(7)渲染包render之display模块:构造HTML、Javascript代码
下一篇: pyecharts源码解读(9)渲染包render之engine模块:渲染引擎
mighty13
博客等级 码龄23年 728粉丝 438原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值