在离线使用 Pyechart 进行可视化数据绘图的时候,会有生成的 html 网页打不开,或者是网页不出图像,是一个空白页面的问题出现,搜索发现其主要原因是:由于PyEcharts在升级到1.x版本后,将原来HTML网页中使用到的很多js文件换为了在线获取的方式,例如打开我本地生成的bar.html 示例文件,就会发现利用了 https://assets.pyecharts.org/assets/v5/echarts.min.js 文件,所以才会出现离线环境下打不开网页不出图的情况。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Awesome-pyecharts</title>
                <script type="text/javascript" src="https://assets.pyecharts.org/assets/v5/echarts.min.js"></script>

</head>

需要解决这个问题,在pyecharts-gallery-master官网上面已经给出了解决的方案:
一 是下载离线的js文件,也就是pyecharts-assets-master.zip文件,然后将其放到本地的某个文件夹里面;
二 是启动本地服务端,将解压后的pyecharts-assets-maste文件夹设为服务地址;
三 是修改绘图的py源文件,添加使用本地js地址的语句


一、下载离线的 js 文件
GitHub 下载地址:https://github.com/pyecharts/pyecharts-assets
将这个地方的文件下载成为一个 zip 文件,保存至本地的一个指定路径。这个里面包含了大多数示例中所用到的 js 文件。
image

二、启动本地服务端
其实在github官网上也已经讲述了这些内容:https://github.com/pyecharts/pyecharts-assets
Linux 环境命令:

$ cd pyecharts-assets
$ python -m http.server

windows 环境:
实际上在window环境下就是进入到pyecharts-assets文件夹里面后,按住shift键点击鼠标右键,打开控制台,运行 python -m http.server 一句话即可,该命令将会在本地启动一个默认网址为0.0.0.0,默认端口为8000的广播服务器,从而可以开启js文件的服务;其实,也不一定每次都非要进入到pyecharts-assets文件夹里面启动控制台然后运行启动服务器的命令,还可以利用-d选项设置目录:

# 在当前文件夹目录下默认启动地址为0.0.0.0,端口为8000的服务器
python -m http.server
# 指定一个自定义的本地目录
python -m http.server -d D:\Project\pyecharts-assets-master
# 指定自定义的本地目录,指定自定义的网址和端口
python -m http.server -d D:\Project\pyecharts-assets-master -b 127.0.0.1 8000

实际上也不一定非要0.0.0.0的网址,也可以选择127.0.0.1的本地回路地址,还有就是局域网里面的话,可以指定为局域网服务器的网址。个人的话,是使用了第三个方法,指定了源文件地址和IP地址去启动本地服务。
*Tips:在启动 http.server 的服务之后,不要 ctrl+c 取消,就让这个服务一直挂在这个窗口就行,如果 ctrl+C 取消了服务挂载,在打开 html 文件的时候,还是会显示为空白的 *
image

三、补充代码
在 Python 的代码源文件中添加如下代码,将 html 文件所需要的 js 文件指向本机的 js 文件地址:

# 配置CurrentConfig.ONLINE_HOST为本机地址资源
from pyecharts.globals import CurrentConfig
CurrentConfig.ONLINE_HOST = "http://127.0.0.1:8000/assets/v5/"

在生成的 html 文件中所调用的 js 文件地址就是本地的 js 服务地址:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Awesome-pyecharts</title>
                <script type="text/javascript" src="http://127.0.0.1:8000/assets/v5/echarts.min.js"></script>

</head>

这样之后,在确认本地的 http.server 服务是正常启动中的情况下,生成的可视化图表是可以正常显示的。


完整示例如下:
1、启动服务:

PS D:\Project\Python> python -m http.server -d D:\Project\Python\pyecharts-assets-master -b 127.0.0.1 8000
Serving HTTP on 127.0.0.1 port 8000 (http://127.0.0.1:8000/) ...

2、修改代码,指定本地服务host

import json
import os
# 配置CurrentConfig.ONLINE_HOST为本机地址资源
from pyecharts.globals import CurrentConfig
# 构建 Bar 柱状图对象
from pyecharts.charts import Bar
# 标题选项所有的可配置的选项所在包
from pyecharts.options import *

file_name = r"C:\Users\Admin\Desktop\fsdownload\curName.json"
CurrentConfig.ONLINE_HOST = "http://127.0.0.1:8000/assets/v5/"


def readJsonDate(filename):
    # 读取json文件
    json_data = open(filename, "r", encoding="UTF-8")
    number = json_data.read()
    json_data.close()

    return number


def barChart():
    # 获取示例数据
    country = []
    rate = []
    number = readJsonDate(file_name)
    pydata = json.loads(number)
    # pydata = pydata[:5]
    for data in pydata:
        for dat in range(len(data)):
            if data[dat]["rate"] > 1000:
                country.append(data[dat]["country"])
                rate.append(data[dat]["rate"])
    # 创建图表
    bar = Bar()
    # 添加坐标轴数据
    bar.add_xaxis(country)
    # label_opts 参数:将数值显示在柱状图的位置
    bar.add_yaxis("rate", rate, label_opts=LabelOpts(position="right"))
    # 翻转 x 轴和 y 轴
    bar.reversal_axis()
    # 绘制图表
    bar.render("bar.html")
    os.startfile("bar.html")


if __name__ == '__main__':
    barChart()

3、查验 html 代码中的 js src 指向

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Awesome-pyecharts</title>
                <script type="text/javascript" src="http://127.0.0.1:8000/assets/v5/echarts.min.js"></script>

</head>

此时生成的图表变可以正常在浏览器中打开显示了。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u013600870/article/details/112056745

posted on 2024-04-17 16:42  Hy旧人伤  阅读(98)  评论(0编辑  收藏  举报