为什么这个代码运行出来没有显示网站
时间: 2024-02-28 13:56:47 浏览: 59
这是因为在实现实时更新的过程中,我们使用了一个无限循环 `while True`,它会一直运行下去,并且在循环内部不断重新生成图表文件。因此,当我们在浏览器中打开 `tmd.1.html` 文件时,它实际上是打开了正在运行的 Python 程序生成的最后一个图表文件,而不是最新的图表文件。
要解决这个问题,我们可以使用 Pyecharts 的 `render_notebook()` 函数代替 `render()` 函数,将图表直接渲染在 Jupyter Notebook 的输出区域中,而不是生成一个 HTML 文件。这样,我们就可以在浏览器中实时看到更新的图表了。
以下是修改后的代码:
```python
#coding=utf-8
from __future__ import unicode_literals
from openpyxl import load_workbook
from pyecharts import options as opts
from pyecharts.charts import Line
from pyecharts.charts import Tab
import time
from IPython.display import clear_output
from pyecharts.render import make_snapshot
from snapshot_selenium import snapshot as driver
# 加载 Excel 文件
wb = load_workbook(r"温湿度数据.xlsx")
ws = wb.active
# 定义变量保存历史数据
history_data_temperature = []
history_data_humidity = []
# 循环读取 Excel 文件并绘制图表
while True:
# 读取 Excel 文件数据
value_temperature = []
value_humidity = []
x_temperature = []
x_humidity = []
for row in ws.values:
value_temperature.append(row[1])
x_temperature.append(row[0])
value_humidity.append(row[2])
x_humidity.append(row[0])
# 更新历史数据
history_data_temperature += value_temperature
history_data_humidity += value_humidity
# 绘制图表
p = (
Line()
.set_global_opts(
tooltip_opts=opts.TooltipOpts(is_show=False),
xaxis_opts=opts.AxisOpts(type_="category"),
yaxis_opts=opts.AxisOpts(
type_="value",
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
)
.add_xaxis(x_temperature)
.add_yaxis("temperature", value_temperature)
.add_yaxis("humidity", value_humidity)
.set_global_opts(
title_opts=opts.TitleOpts(title="折线图"),
datazoom_opts=opts.DataZoomOpts(),
)
)
# 把历史数据添加到图表中
if history_data_temperature and history_data_humidity:
p.add_xaxis(x_temperature + x_humidity)
p.add_yaxis("temperature(history)", history_data_temperature)
p.add_yaxis("humidity(history)", history_data_humidity)
# 清除输出区域
clear_output(wait=True)
# 渲染图表并显示
make_snapshot(driver, p.render(), "tmd.1.png")
display(Image(filename="tmd.1.png"))
# 等待一段时间后重新读取 Excel 文件
time.sleep(10)
```
这段代码的主要修改是使用 `clear_output()` 函数在每次重新绘制图表前清除输出区域,避免在 Jupyter Notebook 中显示多个图表。另外,我们使用了 `make_snapshot()` 函数将图表渲染为 PNG 格式的图片,并使用 `display()` 函数在 Jupyter Notebook 中显示图片。这样,我们就可以实时看到更新的图表了。
阅读全文