Python运用webbrowser打开PyEcharts生成的html文件

简介: Python运用webbrowser打开PyEcharts生成的html文件

话不多说,直接上代码

这里 也有更多pyecharts的代码~

示例

调用库

import pandas as pd
import time
from functools import partial
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui, QtWidgets
from pyecharts import options as opts
from pyecharts.charts import Kline, Line, Bar, Grid
import webbrowser as wb

K线图、输出在默认浏览器显示

# 移动平均数计算
def moving_average(data, day_count):
    data = data.values[:, 0]
    result = []
    for i in range(len(data)):
        start_day_index = i - day_count + 1
        if start_day_index <= 0:
            start_day_index = 0
        justified_day_count = i - start_day_index + 1
        mean = data[start_day_index:i + 1].sum() / justified_day_count
        result.append(mean)
    return result
# k线             --项目需求:已实现--
def show_kline(csv_name):
    # 读取.csv文件,
    stock_code = 'Brent_OIL'
    stock_data = pd.read_csv(csv_name, encoding='gb2312')
    # 将文件内容按照by=[‘date’]内容进行排序
    stock_data = stock_data.sort_values(by=["date"], ascending=[True], inplace=False)
    stock_data_cleared = stock_data[stock_data['close'] > 0]
    stock_name = stock_data_cleared["position"][0]
    stock_data_extracted = stock_data_cleared[["open", "close", "low", "high", "volume", "date"]]
    kline = (
        Kline()
            .add_xaxis(stock_data_extracted["date"].values.tolist())
            .add_yaxis("K线图", stock_data_extracted.iloc[:, :4].values.tolist())
            .set_global_opts(
            xaxis_opts=opts.AxisOpts(is_scale=True, is_show=False),
            # axis_opts=opts.AxisOpts(is_scale=True,min_=0), #y轴起始坐标可以设为0
            yaxis_opts=opts.AxisOpts(is_scale=True),  # y轴起始坐标可自动调整
            #title_opts=opts.TitleOpts(title="价格", subtitle=stock_name + "\n" + stock_code, pos_top="20%"),
            axispointer_opts=opts.AxisPointerOpts(
                is_show=True,
                link=[{"xAxisIndex": "all"}],
                label=opts.LabelOpts(background_color="#777"),
            ),
            datazoom_opts=[  # 设置zoom参数后即可缩放
                opts.DataZoomOpts(
                    is_show=True,
                    type_="inside",
                    xaxis_index=[0, 1],  # 设置第0轴和第1轴同时缩放
                    range_start=0,
                    range_end=100,
                ),
                opts.DataZoomOpts(
                    is_show=True,
                    xaxis_index=[0, 1],
                    type_="slider",
                    pos_top="90%",
                    range_start=0,
                    range_end=100,
                ),
            ],
        )
    )
    # 移动平均线
    line = (
        Line()
            .add_xaxis(xaxis_data=stock_data_extracted["date"].values.tolist())
            .add_yaxis(
            series_name="MA5",
            y_axis=moving_average(stock_data_extracted[["close"]], 5),
            is_smooth=True,
            is_hover_animation=False,
            linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        )
            .add_yaxis(
            series_name="MA10",
            y_axis=moving_average(stock_data_extracted[["close"]], 10),
            is_smooth=True,
            is_hover_animation=False,
            linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        )
            .add_yaxis(
            series_name="MA30",
            y_axis=moving_average(stock_data_extracted[["close"]], 30),
            is_smooth=True,
            is_hover_animation=False,
            linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        )
            .add_yaxis(
            series_name="MA60",
            y_axis=moving_average(stock_data_extracted[["close"]], 60),
            is_smooth=True,
            is_hover_animation=False,
            linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        )
            .add_yaxis(
            series_name="MA120",
            y_axis=moving_average(stock_data_extracted[["close"]], 120),
            is_smooth=True,
            is_hover_animation=False,
            linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        )
            .add_yaxis(
            series_name="MA240",
            y_axis=moving_average(stock_data_extracted[["close"]], 240),
            is_smooth=True,
            is_hover_animation=False,
            linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        )
            .add_yaxis(
            series_name="MA360",
            y_axis=moving_average(stock_data_extracted[["close"]], 360),
            is_smooth=True,
            is_hover_animation=False,
            linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        )
            .set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))
    )
    # 将K线图和移动平均线显示在一个图内
    kline.overlap(line)
    # 成交量柱形图
    x = stock_data_extracted[["date"]].values[:, 0].tolist()
    y = stock_data_extracted[["volume"]].values[:, 0].tolist()
    bar = (
        Bar()
            .add_xaxis(x)
            .add_yaxis("成交量", y, label_opts=opts.LabelOpts(is_show=False),
                       itemstyle_opts=opts.ItemStyleOpts(color="#008080"))
            .set_global_opts(title_opts=opts.TitleOpts(title="成交量", pos_top="70%"),
                             legend_opts=opts.LegendOpts(is_show=False),
                             )
    )
    # 使用网格将多张图标组合到一起显示
    grid_chart = Grid()
    grid_chart.add(
        kline,
        grid_opts=opts.GridOpts(pos_left="15%", pos_right="8%", height="55%"),
    )
    grid_chart.add(
        bar,
        grid_opts=opts.GridOpts(pos_left="15%", pos_right="8%", pos_top="70%", height="20%"),
    )
    htl = csv_name + ".html"
    grid_chart.render(htl)
    wb.open(htl)

主函数

def click_success(self):
    print("数据获取成功!")
    csv_name1 = 'outside_brent_oil.csv'
    outside_history_brent_oil_data().to_csv(csv_name1, index=False)
    show_kline(csv_name1)
    # html_success()
def click_success_3(self):
    print("数据获取成功!")
    csv_name2 = 'outside_newyork_oil.csv'
    outside_history_newyork_oil_data().to_csv(csv_name2, index=False)
    show_kline(csv_name2)
def click_success_4(self):
    print("数据获取成功!")
    csv_name3 = 'outside_newyork_gas.csv'
    outside_history_newyork_natural_gas_data().to_csv(csv_name3, index=False)
    show_kline(csv_name3)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
     # 外盘期货
    ui.pushButton.clicked.connect(click_success)           # 布伦特原油期货分析图
    ui.pushButton_3.clicked.connect(click_success_3)       # 纽约原油期货分析图
    ui.pushButton_4.clicked.connect(click_success_4)       # 纽约天然气期货分析图
    sys.exit(app.exec_())

其中实现跳转代码为

    htl = csv_name + ".html"
    grid_chart.render(htl)
    wb.open(htl)


相关文章
|
13小时前
|
前端开发 文件存储 Python
python之xhtml2pdf: HTML转PDF工具示例详解
python之xhtml2pdf: HTML转PDF工具示例详解
5 0
|
2天前
|
缓存 数据处理 Python
python读取文件到缓存
python读取文件到缓存
9 1
|
2天前
|
存储 数据挖掘 Python
Python技术分享:实现选择文件或目录路径的方法
Python技术分享:实现选择文件或目录路径的方法
15 2
|
3天前
|
前端开发 JavaScript Python
使用Python读取本地行情csv文件,做出web网页画出K线图实现案例
【5月更文挑战第4天】使用Python绘制K线图的步骤:1) 安装pandas, matplotlib和Flask;2) 用pandas读取CSV文件并处理数据;3) 创建Flask应用,渲染包含K线图数据的HTML;4) 编写HTML,使用ECharts库绘制K线图。
22 0
|
9天前
|
Linux iOS开发 MacOS
pyinstaller---Python代码的打包神器,一键将python代码打包成exe可执行文件
pyinstaller---Python代码的打包神器,一键将python代码打包成exe可执行文件
|
9天前
|
NoSQL Python
在Python中,我们可以使用许多库来处理Excel文件
Python处理Excel常用pandas和openpyxl库。pandas的`read_excel`用于读取文件,`to_excel`写入;示例展示了数据框操作。openpyxl则用于处理复杂情况,如多工作表,`load_workbook`加载文件,`iter_rows`读取数据,`Workbook`创建新文件,写入单元格数据后保存。
19 1
|
10天前
【Python21天学习挑战赛】文件读写操作
【Python21天学习挑战赛】文件读写操作
|
13天前
|
存储 人工智能 数据处理
Python:编程的艺术与科学的完美交融
Python:编程的艺术与科学的完美交融
18 1
|
2天前
|
存储 Python 容器
Python高级编程
Python集合包括可变的set和不可变的frozenset,用于存储无序、不重复的哈希元素。创建集合可使用{}或set(),如`my_set = {1, 2, 3, 4, 5}`。通过add()添加元素,remove()或discard()删除元素,如`my_set.remove(3)`。
|
3天前
|
测试技术 Python
Python模块化方式编程实践
Python模块化编程提升代码质量,包括:定义专注单一任务的模块;使用`import`导入模块;封装函数和类,明确命名便于重用;避免全局变量降低耦合;使用文档字符串增强可读性;为每个模块写单元测试确保正确性;重用模块作为库;定期维护更新以适应Python新版本。遵循这些实践,可提高代码可读性、重用性和可维护性。
21 2