当前位置:   article > 正文

解决离线状态下使用PyEcharts进行数据可视化绘图时,pyecharts-gallery示例库中的所有html网页打不开、不出图的问题_数据可视化图出不来怎么回事

数据可视化图出不来怎么回事

前面在讲述我配置离线的Python数据分析和数据可视化环境虚拟机的时候,遇到了离线状态下使用PyEcharts进行数据可视化绘图时,html网页打不开、不出图的问题,经过两天的查找,发现主要原因(对,还有次要原因哈)是由于PyEcharts在升级到1.x版本后,将原来HTML网页中使用到的很多js文件换为了在线获取的方式,例如打开pyecharts-gallery-master\Bar文件夹里面的bar_base.html,就会发现利用了https://assets.pyecharts.org/assets/echarts.min.js文件,所以才会出现离线环境下打不开网页不出图的情况:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Awesome-pyecharts</title>
  6. <script type="text/javascript" src="https://assets.pyecharts.org/assets/echarts.min.js"></script>
  7. </head>
  8. <body>
  9. <div id="bfb8150f841b4ea486de8e3047d62ffc" class="chart-container" style="width:900px; height:500px;"></div>
  10. <script>
  11. var chart_bfb8150f841b4ea486de8e3047d62ffc = echarts.init(
  12. document.getElementById('bfb8150f841b4ea486de8e3047d62ffc'), 'white', {renderer: 'canvas'});
  13. var option_bfb8150f841b4ea486de8e3047d62ffc = {
  14. "animation": true,
  15. "animationThreshold": 2000,
  16. "animationDuration": 1000,
  17. "animationEasing": "cubicOut",
  18. "animationDelay": 0,
  19. "animationDurationUpdate": 300,
  20. "animationEasingUpdate": "cubicOut",
  21. "animationDelayUpdate": 0,
  22. "color": [
  23. "#c23531",
  24. "#2f4554",
  25. "#61a0a8",
  26. "#d48265",
  27. "#749f83",
  28. "#ca8622",

知道了原因以后,下面就来看一下如何解决!其实在pyecharts-gallery-master官网上面已经给出了解决的方案:主要是2步:一是下载离线的js文件,也就是pyecharts-assets-master.zip文件,然后将其放到本地的某个文件夹里面;二是启动本地服务端,将解压后的pyecharts-assets-maste文件夹设为服务地址;三是修改绘图的py源文件,添加使用本地js地址的语句,具体操作如下:

一、下载pyecharts-assets-master.zip文件:https://github.com/pyecharts,这里面包含了大多数示例中所用到的js文件:

二、启动本地服务端,具体的方法官网里面也都讲了:https://github.com/pyecharts/pyecharts-assets

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

上面是Linux中的写法,实际上在window环境下就是进入到pyecharts-assets文件夹里面后,按住shift键点击鼠标右键,打开控制台,运行

python -m http.server一句话即可,该命令将会在本地启动一个默认网址为0.0.0.0,默认端口为8000的广播服务器,从而可以开启js文件的服务;

其实,也不一定每次都非要进入到pyecharts-assets文件夹里面启动控制台然后运行启动服务器的命令,还可以利用-d选项设置目录,如下所示:

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

我就是利用第二句即可,这样不用每次都费力的进入到本地的pyecharts-assets文件夹里面了!

实际上也不一定非要0.0.0.0的网址,也可以选择127.0.0.1的本地回路地址,还有就是局域网里面的话,可以指定为局域网服务器的网址;

最后就是在python源文件中添加下面的两句,例如对于pyecharts-gallery-master\Bar中的bar_base.py文件,就是在最前面添加:

  1. #LocalhostConfig
  2. # 配置CurrentConfig.ONLINE_HOST为本机地址资源
  3. from pyecharts.globals import CurrentConfig
  4. CurrentConfig.ONLINE_HOST = "http://127.0.0.1:8000/assets/"
  5. from pyecharts import options as opts
  6. from pyecharts.charts import Bar
  7. from pyecharts.faker import Faker
  8. c = (
  9. Bar()
  10. .add_xaxis(Faker.choose())
  11. .add_yaxis("商家A", Faker.values())
  12. .add_yaxis("商家B", Faker.values())
  13. .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
  14. .render("bar_base.html")
  15. )

这样在编译后,生成的HTML文件就会使用本机的js文件网址了:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Awesome-pyecharts</title>
  6. <script type="text/javascript" src="http://127.0.0.1:8000/assets/echarts.min.js"></script>
  7. </head>
  8. <body>
  9. <div id="9732f9fa310740bbb5c7dafaeba7ee90" class="chart-container" style="width:900px; height:500px;"></div>
  10. <script>
  11. var chart_9732f9fa310740bbb5c7dafaeba7ee90 = echarts.init(
  12. document.getElementById('9732f9fa310740bbb5c7dafaeba7ee90'), 'white', {renderer: 'canvas'});
  13. var option_9732f9fa310740bbb5c7dafaeba7ee90 = {
  14. "animation": true,
  15. "animationThreshold": 2000,
  16. "animationDuration": 1000,
  17. "animationEasing": "cubicOut",
  18. "animationDelay": 0,
  19. "animationDurationUpdate": 300,
  20. "animationEasingUpdate": "cubicOut",
  21. "animationDelayUpdate": 0,
  22. "color": [
  23. "#c23531",
  24. "#2f4554",
  25. "#61a0a8",
  26. "#d48265",
  27. "#749f83",
  28. "#ca8622",
  29. "#bda29a",
  30. "#6e7074",

这样就可以在离线环境下显示出图像了!

最后需要说明的是,如果不是想生成HTML网页,而是想在Jupyter Notebook中直接显示Echarts图像,就需要把上面的py源程序改为:

  1. #LocalhostConfig
  2. # 配置CurrentConfig.ONLINE_HOST为本机地址资源
  3. from pyecharts.globals import CurrentConfig
  4. CurrentConfig.ONLINE_HOST = "http://127.0.0.1:8000/assets/"
  5. from pyecharts import options as opts
  6. from pyecharts.charts import Bar
  7. from pyecharts.faker import Faker
  8. c = (
  9. Bar()
  10. .add_xaxis(Faker.choose())
  11. .add_yaxis("商家A", Faker.values())
  12. .add_yaxis("商家B", Faker.values())
  13. .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
  14. )
  15. c.render_notebook()
  16. #c.render("bar_base.html")

也就是需要在最后显示的调用一句:c.render_notebook(),不然,如果还是放在链式那个括号里面,例如下面的样子,有的时候还是不会出图的。。。

  1. #LocalhostConfig
  2. # 配置CurrentConfig.ONLINE_HOST为本机地址资源
  3. from pyecharts.globals import CurrentConfig
  4. CurrentConfig.ONLINE_HOST = "http://127.0.0.1:8000/assets/"
  5. from pyecharts import options as opts
  6. from pyecharts.charts import Bar
  7. from pyecharts.faker import Faker
  8. c = (
  9. Bar()
  10. .add_xaxis(Faker.choose())
  11. .add_yaxis("商家A", Faker.values())
  12. .add_yaxis("商家B", Faker.values())
  13. .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
  14. .render_notebook()
  15. )

 

最后再预告一下下一篇:https://github.com/pyecharts/pyecharts-gallery中给出的可视化绘图的例子那么多——

显然依次去为每个*.py源程序都添加from pyecharts.globals import CurrentConfig
CurrentConfig.ONLINE_HOST = "http://127.0.0.1:8000/assets/"命令从而再生成利用本地js资源的HTML网页无疑太过繁琐,如何一键就生成全部的本地HTML网页呢?请见下回分解!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/165150
推荐阅读
相关标签
  

闽ICP备14008679号