【Python数据分析】Higchart-Python 5种方法助力数据分析分析可视化

最近我一直在忙于搭建股票交易系统,为了更好地展示股票数据,我一直在寻找适合的数据可视化工具。经过反复比较,我发现Highcharts表现得非常出色。在这篇文章中,我将分享我通过五种方法来实现股票图表的优化。

首先,我发现Highcharts提供了丰富的图表类型,包括线图、柱状图、饼图等,可以满足不同类型的股票数据展示需求。我可以根据具体的情况选择最适合的图表类型,使得数据更加直观易懂。

其次,Highcharts还提供了强大的交互功能。我可以通过添加鼠标悬停提示、点击事件等功能,使得用户可以更方便地查看和分析股票数据。例如,当用户将鼠标悬停在某个数据点上时,会显示该点的具体数值,这样用户可以更加准确地获取股票的信息。

第三,Highcharts还支持动态更新数据。这对于股票数据来说非常重要,因为股票价格是时刻在变动的。通过动态更新数据,我可以实时展示最新的股票价格,使得用户可以及时了解市场动态。

第四,Highcharts还提供了灵活的配置选项。我可以通过设置不同的参数来调整图表的样式和布局,使得图表更加符合我的需求。例如,我可以设置图表的背景颜色、坐标轴的刻度间隔等,来使得图表更加美观和易读。

最后,Highcharts还支持导出图表为图片或PDF格式。这对于我来说非常方便,因为我可以将生成的图表保存下来,方便与他人分享或用于报告展示。

方法01: 官方的python-Highchart

安装HighCharts包

pip install highcharts-core``pip install highcharts-stock``pip install highcharts-map``pip install highcharts-gantt

线图代码展示实现如下:

(这里注意的是以上对python版本有要求需满足3.10+)

from highcharts_core.options import HighchartsOptions``from highcharts_core.chart import Char``as_dict = {``'chart': {``'type': 'spline',``'inverted': True`    `},``'title': {``'text': 'Atmosphere Temperature by Altitude',``'align': 'left'`    `},``'subtitle': {``'text': 'According to the Standard Atmosphere Model',``'align': 'left'`    `},``'xAxis': {``'reversed': False,``'title': {``'enabled': True,``'text': 'Altitude'`        `},``'labels': {``'format': '{value} km'`        `},``'accessibility': {``'rangeDescription': 'Range: 0 to 80 km.'`        `},``'maxPadding': 0.05,``'showLastLabel': True`    `},``'yAxis': {``'title': {``'text': 'Temperature'`        `},``'labels': {``'format': '{value}°'`        `},``'accessibility': {``'rangeDescription': 'Range: -90°C to 20°C.'`        `},``'lineWidth': 2`    `},``'legend': {``'enabled': False`    `},``'tooltip': {``'headerFormat': '<b>{series.name}</b><br/>',``'pointFormat': '{point.x} km: {point.y}°C'`    `},``'plotOptions': {``'spline': {``'marker': {``'enable': False`            `}`        `}`    `},``'series': [{``'name': 'Temperature',``'data': [[0, 15], [10, -50], [20, -56.5], [30, -46.5], [40, -22.1],`            `[50, -2.5], [60, -27.7], [70, -55.7], [80, -76.5]]`    `}]``}``chart = Chart(options = as_dict)``   ``chart.display()

多线图代码展示实现如下:

from highcharts_core.chart import Chart``from highcharts_core.options.series.spline import SplineSeries``import datetime``   ``options = {`    `'chart': {`        `'type': 'spline'`    `},`    `'title': {`        `'text': 'Snow depth at Vikjafjellet, Norway'`    `},`    `'subtitle': {`        `'text': 'Irregular time data in Highcharts JS'`    `},`    `'xAxis': {`        `'type': 'datetime',`        `'dateTimeLabelFormats': {`            `'month': '%e. %b',`            `'year': '%b'`        `},`        `'title': {`            `'text': 'Date'`        `}`    `},`    `'yAxis': {`        `'title': {`            `'text': 'Snow depth (m)'`        `},`        `'min': 0`    `},`    `'tooltip': {`        `'headerFormat': '<b>{series.name}</b><br>',`        `'pointFormat': '{point.x:%e. %b}: {point.y:.2f} m'`    `},``   `    `'plotOptions': {`        `'series': {`            `'marker': {`                `'enabled': True,`                `'radius': 2.5`            `}`        `}`    `},``   `    `'colors': ['#6CF', '#39F', '#06C', '#036', '#000']``}``   ``   ``series1 = SplineSeries(name = 'Winter 2019-2020',`                       `data = [`                           `[datetime.date(1970, 10, 24), 0],`                           `[datetime.date(1970, 10, 27), 0.12],`                           `[datetime.date(1970, 10, 30), 0.09],`                           `[datetime.date(1970, 11,  3), 0.13],`                           `[datetime.date(1970, 11,  6), 0.12],`                           `[datetime.date(1970, 11,  9), 0.13],`                           `[datetime.date(1970, 11, 12), 0.13],`                           `[datetime.date(1970, 11, 15), 0.16],`                           `[datetime.date(1970, 11, 18), 0.19],`                           `[datetime.date(1970, 11, 21), 0.25],`                           `[datetime.date(1970, 11, 24), 0.26],`                           `[datetime.date(1970, 11, 27), 0.24],`                           `[datetime.date(1970, 11, 30), 0.25],`                           `[datetime.date(1970, 12,  3), 0.26],`                           `[datetime.date(1970, 12,  6), 0.36],`                           `[datetime.date(1970, 12,  9), 0.43],`                           `[datetime.date(1970, 12, 12), 0.32],`                           `[datetime.date(1970, 12, 15), 0.48],`                           `[datetime.date(1970, 12, 18), 0.5],`                           `[datetime.date(1970, 12, 21), 0.44],`                           `[datetime.date(1970, 12, 24), 0.43],`                           `[datetime.date(1970, 12, 27), 0.45],`                           `[datetime.date(1970, 12, 30), 0.4],`                           `[datetime.date(1971, 1,  3), 0.39],`                           `[datetime.date(1971, 1,  6), 0.56],`                           `[datetime.date(1971, 1,  9), 0.57],`                           `[datetime.date(1971, 1, 12), 0.68],`                           `[datetime.date(1971, 1, 15), 0.93],`                           `[datetime.date(1971, 1, 18), 1.11],`                           `[datetime.date(1971, 1, 21), 1.01],`                           `[datetime.date(1971, 1, 24), 0.99],`                           `[datetime.date(1971, 1, 27), 1.17],`                           `[datetime.date(1971, 1, 30), 1.24],`                           `[datetime.date(1971, 2,  3), 1.41],`                           `[datetime.date(1971, 2,  6), 1.47],`                           `[datetime.date(1971, 2,  9), 1.4],`                           `[datetime.date(1971, 2, 12), 1.92],`                           `[datetime.date(1971, 2, 15), 2.03],`                           `[datetime.date(1971, 2, 18), 2.46],`                           `[datetime.date(1971, 2, 21), 2.53],`                           `[datetime.date(1971, 2, 24), 2.73],`                           `[datetime.date(1971, 2, 27), 2.67],`                           `[datetime.date(1971, 3,  3), 2.65],`                           `[datetime.date(1971, 3,  6), 2.62],`                           `[datetime.date(1971, 3,  9), 2.79],`                           `[datetime.date(1971, 3, 13), 2.93],`                           `[datetime.date(1971, 3, 20), 3.09],`                           `[datetime.date(1971, 3, 27), 2.76],`                           `[datetime.date(1971, 3, 30), 2.73],`                           `[datetime.date(1971, 4,  4), 2.9],`                           `[datetime.date(1971, 4,  9), 2.77],`                           `[datetime.date(1971, 4, 12), 2.78],`                           `[datetime.date(1971, 4, 15), 2.76],`                           `[datetime.date(1971, 4, 18), 2.76],`                           `[datetime.date(1971, 4, 21), 2.7],`                           `[datetime.date(1971, 4, 24), 2.61],`                           `[datetime.date(1971, 4, 27), 2.52],`                           `[datetime.date(1971, 4, 30), 2.53],`                           `[datetime.date(1971, 5,  3), 2.55],`                           `[datetime.date(1971, 5,  6), 2.52],`                           `[datetime.date(1971, 5,  9), 2.44],`                           `[datetime.date(1971, 5, 12), 2.43],`                           `[datetime.date(1971, 5, 15), 2.43],`                           `[datetime.date(1971, 5, 18), 2.48],`                           `[datetime.date(1971, 5, 21), 2.41],`                           `[datetime.date(1971, 5, 24), 2.16],`                           `[datetime.date(1971, 5, 27), 2.01],`                           `[datetime.date(1971, 5, 30), 1.88],`                           `[datetime.date(1971, 6,  2), 1.62],`                           `[datetime.date(1971, 6,  6), 1.43],`                           `[datetime.date(1971, 6,  9), 1.3],`                           `[datetime.date(1971, 6, 12), 1.11],`                           `[datetime.date(1971, 6, 15), 0.84],`                           `[datetime.date(1971, 6, 18), 0.54],`                           `[datetime.date(1971, 6, 21), 0.19],`                           `[datetime.date(1971, 6, 23), 0]`                       `])``series2 = SplineSeries(name = 'Winter 2020-2021',`                       `data = [`                           `[datetime.date(1970, 11, 14), 0],`                           `[datetime.date(1970, 12,  6), 0.35],`                           `[datetime.date(1970, 12, 13), 0.35],`                           `[datetime.date(1970, 12, 20), 0.33],`                           `[datetime.date(1970, 12, 30), 0.53],`                           `[datetime.date(1971, 1, 13), 0.62],`                           `[datetime.date(1971, 1, 20), 0.6],`                           `[datetime.date(1971, 2,  2), 0.69],`                           `[datetime.date(1971, 2, 18), 0.67],`                           `[datetime.date(1971, 2, 21), 0.65],`                           `[datetime.date(1971, 2, 24), 0.66],`                           `[datetime.date(1971, 2, 27), 0.66],`                           `[datetime.date(1971, 3,  3), 0.61],`                           `[datetime.date(1971, 3,  6), 0.6],`                           `[datetime.date(1971, 3,  9), 0.69],`                           `[datetime.date(1971, 3, 12), 0.66],`                           `[datetime.date(1971, 3, 15), 0.75],`                           `[datetime.date(1971, 3, 18), 0.76],`                           `[datetime.date(1971, 3, 21), 0.75],`                           `[datetime.date(1971, 3, 24), 0.69],`                           `[datetime.date(1971, 3, 27), 0.82],`                           `[datetime.date(1971, 3, 30), 0.86],`                           `[datetime.date(1971, 4,  3), 0.81],`                           `[datetime.date(1971, 4,  6), 1],`                           `[datetime.date(1971, 4,  9), 1.15],`                           `[datetime.date(1971, 4, 10), 1.35],`                           `[datetime.date(1971, 4, 12), 1.26],`                           `[datetime.date(1971, 4, 15), 1.18],`                           `[datetime.date(1971, 4, 18), 1.14],`                           `[datetime.date(1971, 4, 21), 1.04],`                           `[datetime.date(1971, 4, 24), 1.06],`                           `[datetime.date(1971, 4, 27), 1.05],`                           `[datetime.date(1971, 4, 30), 1.03],`                           `[datetime.date(1971, 5,  3), 1.01],`                           `[datetime.date(1971, 5,  6), 0.98],`                           `[datetime.date(1971, 5,  9), 0.94],`                           `[datetime.date(1971, 5, 12), 0.8],`                           `[datetime.date(1971, 5, 15), 0.61],`                           `[datetime.date(1971, 5, 18), 0.43],`                           `[datetime.date(1971, 5, 21), 0.29],`                           `[datetime.date(1971, 5, 24), 0.1],`                           `[datetime.date(1971, 5, 26), 0]`                       `])``series3 = SplineSeries(name = 'Winter 2021-2022',`                       `data = [`                           `[datetime.date(1970, 11,  5), 0],`                           `[datetime.date(1970, 11, 12), 0.1],`                           `[datetime.date(1970, 11, 21), 0.15],`                           `[datetime.date(1970, 11, 22), 0.19],`                           `[datetime.date(1970, 11, 27), 0.17],`                           `[datetime.date(1970, 11, 30), 0.27],`                           `[datetime.date(1970, 12,  2), 0.25],`                           `[datetime.date(1970, 12,  4), 0.27],`                           `[datetime.date(1970, 12,  5), 0.26],`                           `[datetime.date(1970, 12,  6), 0.25],`                           `[datetime.date(1970, 12,  7), 0.26],`                           `[datetime.date(1970, 12,  8), 0.26],`                           `[datetime.date(1970, 12,  9), 0.25],`                           `[datetime.date(1970, 12, 10), 0.25],`                           `[datetime.date(1970, 12, 11), 0.25],`                           `[datetime.date(1970, 12, 12), 0.26],`                           `[datetime.date(1970, 12, 22), 0.22],`                           `[datetime.date(1970, 12, 23), 0.22],`                           `[datetime.date(1970, 12, 24), 0.22],`                           `[datetime.date(1970, 12, 25), 0.24],`                           `[datetime.date(1970, 12, 26), 0.24],`                           `[datetime.date(1970, 12, 27), 0.24],`                           `[datetime.date(1970, 12, 28), 0.24],`                           `[datetime.date(1970, 12, 29), 0.24],`                           `[datetime.date(1970, 12, 30), 0.22],`                           `[datetime.date(1970, 12, 31), 0.18],`                           `[datetime.date(1971, 1,  1), 0.17],`                           `[datetime.date(1971, 1,  2), 0.23],`                           `[datetime.date(1971, 1,  9), 0.5],`                           `[datetime.date(1971, 1, 10), 0.5],`                           `[datetime.date(1971, 1, 11), 0.53],`                           `[datetime.date(1971, 1, 12), 0.48],`                           `[datetime.date(1971, 1, 13), 0.4],`                           `[datetime.date(1971, 1, 17), 0.36],`                           `[datetime.date(1971, 1, 22), 0.69],`                           `[datetime.date(1971, 1, 23), 0.62],`                           `[datetime.date(1971, 1, 29), 0.72],`                           `[datetime.date(1971, 2,  2), 0.95],`                           `[datetime.date(1971, 2, 10), 1.73],`                           `[datetime.date(1971, 2, 15), 1.76],`                           `[datetime.date(1971, 2, 26), 2.18],`                           `[datetime.date(1971, 3,  2), 2.22],`                           `[datetime.date(1971, 3,  6), 2.13],`                           `[datetime.date(1971, 3,  8), 2.11],`                           `[datetime.date(1971, 3,  9), 2.12],`                           `[datetime.date(1971, 3, 10), 2.11],`                           `[datetime.date(1971, 3, 11), 2.09],`                           `[datetime.date(1971, 3, 12), 2.08],`                           `[datetime.date(1971, 3, 13), 2.08],`                           `[datetime.date(1971, 3, 14), 2.07],`                           `[datetime.date(1971, 3, 15), 2.08],`                           `[datetime.date(1971, 3, 17), 2.12],`                           `[datetime.date(1971, 3, 18), 2.19],`                           `[datetime.date(1971, 3, 21), 2.11],`                           `[datetime.date(1971, 3, 24), 2.1],`                           `[datetime.date(1971, 3, 27), 1.89],`                           `[datetime.date(1971, 3, 30), 1.92],`                           `[datetime.date(1971, 4,  3), 1.9],`                           `[datetime.date(1971, 4,  6), 1.95],`                           `[datetime.date(1971, 4,  9), 1.94],`                           `[datetime.date(1971, 4, 12), 2],`                           `[datetime.date(1971, 4, 15), 1.9],`                           `[datetime.date(1971, 4, 18), 1.84],`                           `[datetime.date(1971, 4, 21), 1.75],`                           `[datetime.date(1971, 4, 24), 1.69],`                           `[datetime.date(1971, 4, 27), 1.64],`                           `[datetime.date(1971, 4, 30), 1.64],`                           `[datetime.date(1971, 5,  3), 1.58],`                           `[datetime.date(1971, 5,  6), 1.52],`                           `[datetime.date(1971, 5,  9), 1.43],`                           `[datetime.date(1971, 5, 12), 1.42],`                           `[datetime.date(1971, 5, 15), 1.37],`                           `[datetime.date(1971, 5, 18), 1.26],`                           `[datetime.date(1971, 5, 21), 1.11],`                           `[datetime.date(1971, 5, 24), 0.92],`                           `[datetime.date(1971, 5, 27), 0.75],`                           `[datetime.date(1971, 5, 30), 0.55],`                           `[datetime.date(1971, 6,  3), 0.35],`                           `[datetime.date(1971, 6,  6), 0.21],`                           `[datetime.date(1971, 6,  9), 0]`                       `])``options['series'] = [series1, series2, series3]``   ``chart = Chart.from_options(options)``chart.display()``   

股票代码展示实现如下:

from highcharts_stock.chart import Chart``from highcharts_stock.options.series.hlc import HLCSeries``import requests``import json``stock_response = requests.get('https://demo-live-data.highcharts.com/aapl-ohlc.json')``stock_data_string = stock_response.text``stock_data=json.loads(stock_data)``as_dict = {`    `'range_selector': {`        `'selected': 2`    `},`    `'title': {`        `'text': 'AAPL Stock Price'`    `},`    `'series': [`        `{`            `'type': 'hlc',`            `'name': 'AAPL Stock Price',`            `'use_ohlc_data': True,`            `'data': stock_data,`            `'accessibility': {`                `'point': {`                    `'value_description_format': '{xDescription}. Open: {point.open}, High: {point.high}, low: {point.low}, close: {point.close}.'`                `}`            `},`            `'data_grouping': {`                `'units': [[`                    `'week',`                    `[1]`                `],`                `[`                    `'month',`                    `[1, 2, 3, 4, 6]`                `]]`            `}`        `}`    `]``}``chart = Chart.from_options(as_dict)``chart.display()

方法02: 官方的panel_Highchart

安装

pip install panel-highcharts

线图代码展示实现如下:

import panel_highcharts as ph``import panel as pn``pn.extension('highchart')``ph.config.theme("auto")``   ``configuration = {`    `"title": {"text": "HighChart Pane"},`    `"series": [`        `{`            `"name": "series1",`            `"data": [1, 2, 3, 4, 5],`        `}`    `]``}``   ``chart = ph.HighChart(object=configuration, sizing_mode="stretch_both", min_height=500)``chart

股票代码展示实现如下:

import requests, json``import panel_highcharts as ph``   ``ph.config.theme("auto")``import panel as pn``pn.extension('highstock')``data = requests.get('https://cdn.jsdelivr.net/gh/highcharts/highcharts@v7.0.0/samples/data/new-intraday.json').json()``configuration = {`    `"title": {"text": "AAPL stock price by minute"},`    `"rangeSelector": {`        `"buttons": [`            `{"type": "hour", "count": 1, "text": "1h"},`            `{"type": "day", "count": 1, "text": "1D"},`            `{"type": "all", "count": 1, "text": "All"},`        `],`        `"selected": 1,`        `"inputEnabled": False,`    `},`    `"series": [`        `{"name": "AAPL", "type": "candlestick", "data": data, "tooltip": {"valueDecimals": 2}}`    `],``}``chart = ph.HighStock(object=configuration, sizing_mode="stretch_both", min_height=400)``chart

地图代码展示实现如下:

import panel_highcharts as ph``ph.config.theme("auto")``ph.config.js_files(mapdata=["custom/europe"])` `import panel as pn``pn.extension('highmap')``configuration = {`    `"chart": {"map": "custom/europe", "borderWidth": 1},`    `"title": {"text": "Nordic countries"},`    `"subtitle": {"text": "Demo of drawing all areas in the map, only highlighting partial data"},`    `"legend": {"enabled": False},`    `"series": [`        `{`            `"name": "Country",`            `"data": [["is", 1], ["no", 1], ["se", 1], ["dk", 1], ["fi", 1]],`            `"dataLabels": {`                `"enabled": True,`                `"color": "#FFFFFF",`                `"formatter": """function () {`                `if (this.point.value) {`                    `return this.point.name;`                `}`            `}""",`            `},`            `"tooltip": {"headerFormat": "", "pointFormat": "{point.name}"},`        `}`    `],``}``chart = ph.HighMap(object=configuration, sizing_mode="stretch_both", min_height=400)``chart

方法03: Nicegui实现

安装

pip install nicegui

条形图代码展示实现如下:

from nicegui import ui``from random import random``   ``chart = ui.chart({`    `'title': False,`    `'chart': {'type': 'bar'},`    `'xAxis': {'categories': ['A', 'B']},`    `'series': [`        `{'name': 'Alpha', 'data': [0.1, 0.2]},`        `{'name': 'Beta', 'data': [0.3, 0.4]},`    `],``}).classes('w-full')``   ``def update():`    `chart.options['series'][0]['data'][0] = random()`    `chart.update()``   ``ui.button('Update', on_click=update)``   ``ui.run()

股票图代码展示实现如下:

from datetime import datetime, timedelta``import time``import akshare as ak``from nicegui import ui``df = ak.stock_zh_a_daily(symbol="sh600519", adjust="qfq")``df["date"] = df["date"].astype(str)``df["date"] = df["date"].apply(lambda x: int(time.mktime(time.strptime(x,"%Y-%m-%d"))) * 1000)``stock = df[['date', 'open', 'high', 'low', 'close']].values.tolist()``   ``   ``   ``as_dict = {`    `'range_selector': {`        `'selected': 2`    `},`    `'title': {`        `'text': '茅台股价分析'`    `},`    `'navigator': {`        `'enabled': True`    `},`    `'credits': {`                `'enabled':False`            `},`    `'series': [`        `{`            `'type': 'candlestick',`            `'name': 'AAPL Stock Price',`            `'data': stock`        `},`    `]``}``   ``   ``chart = ui.chart(as_dict,type='stockChart', extras=['stock']).classes('w-full h-200')``ui.run()``   

方法04: JustPy实现

安装

pip install justpy

条形图代码展示实现如下:

import justpy as jp``   ``   ``my_chart_def = """``{`        `chart: {`            `type: 'bar'`        `},`        `title: {`            `text: 'Fruit Consumption'`        `},`        `xAxis: {`            `categories: ['Apples', 'Bananas', 'Oranges']`        `},`        `yAxis: {`            `title: {`                `text: 'Fruit eaten'`            `}`        `},`        `series: [{`            `name: 'Jane',`            `data: [1, 0, 4]`        `}, {`            `name: 'John',`            `data: [5, 7, 3]`        `}]``}``"""``   ``   ``def create_chart_test2():`    `wp = jp.WebPage()`    `for chart_type in ["bar", "column", "line", "spline"]:`        `my_chart = jp.HighCharts(a=wp, classes="m-2 p-2 border w-1/2", options=my_chart_def)`        `my_chart.options.chart.type = chart_type`        `my_chart.options.title.text = f"Chart of Type {chart_type.capitalize()}"`        `my_chart.options.subtitle.text = f"Subtitle {chart_type.capitalize()}"`    `return wp``   ``jp.justpy(create_chart_test2)

股票图代码展示实现如下:

import justpy as jp``import pandas as pd``import datetime``   ``epoch = datetime.datetime(1970, 1, 1)``grouping_units = [["week", [1]], ["month", [1, 2, 3, 4, 6]]]``   ``chart_dict = {`    `"rangeSelector": {"selected": 1},`    `"yAxis": [`        `{`            `"labels": {"align": "right", "x": -3},`            `"title": {"text": "OHLC"},`            `"height": "60%",`            `"lineWidth": 2,`            `"resize": {"enabled": True},`        `},`        `{`            `"labels": {"align": "right", "x": -3},`            `"title": {"text": "Volume"},`            `"top": "65%",`            `"height": "35%",`            `"offset": 0,`            `"lineWidth": 2,`        `},`    `],`    `"tooltip": {"split": True},`    `"series": [`        `{`            `"type": "candlestick",`            `"tooltip": {"valueDecimals": 2},`            `"dataGrouping": {"units": grouping_units},`        `},`        `{`            `"type": "column",`            `"name": "Volume",`            `"yAxis": 1,`            `"dataGrouping": {"units": grouping_units},`        `},`    `],``}``   ``   ``def convert_date2(date_string):`    `date = datetime.datetime.strptime(date_string, "%Y-%m-%d")`    `return (date - epoch).total_seconds() * 1000``   ``   ``async def stock_test2(request):`    `wp = jp.WebPage(highcharts_theme="grid")`    `ticker = request.query_params.get("ticker", "MSFT").upper()`    `if ticker not in ["AAPL", "IBM", "INTC", "MSFT"]:`        `ticker = "MSFT"`    `data = await jp.JustPy.loop.run_in_executor(`        `None, pd.read_csv, f"https://elimintz.github.io/stocks/{ticker}.csv"`    `)`    `chart = jp.HighStock(`        `a=wp,`        `classes="m-1 p-2 border w-10/12",`        `options=chart_dict,`        `style="height: 600px",`    `)`    `o = chart.options`    `o.title.text = f"{ticker} Historical Prices"`    `x = list(data["Date"].map(convert_date2))`    `o.series[0].data = list(`        `zip(x, data["Open"], data["High"], data["Low"], data["Close"])`    `)`    `o.series[0].name = ticker`    `o.series[1].data = list(zip(x, data["Volume"]))`    `return wp``   ``   ``jp.justpy(stock_test2)``   

                        方法05: Streamlit实现

安装

pip install streamlit-highcharts
`import streamlit as st``import streamlit_highcharts as hct``   ``chart_def={`   `"title":{`      `"text":"Sales of petroleum products March, Norway",`      `"align":"left"`   `},`   `"xAxis":{`      `"categories":["Jet fuel","Duty-free diesel"]`   `},`   `"yAxis":{`      `"title":{"text":"Million liter"}`   `},`   `"series":[`        `{"type":"column",`            `"name":"2020",`            `"data":[59,83]},`        `{"type":"column",`            `"name":"2021",`            `"data":[24,79]`        `},`        `{"type":"column",`            `"name":"2022",`            `"data":[58,88]`        `},`        `{"type":"spline",`            `"name":"Average",`            `"data":[47,83.33],`            `"marker":{`                `"lineWidth":2,`                `"fillColor":"black",`            `}`        `}`    `]``}``   ``hct.streamlit_highcharts(chart_def,640) #640 is the chart height``#The component bundles some sample chart definitions, from SAMPLE1 to ...SAMPLE10``hct.streamlit_highcharts(hct.SAMPLE1,640) #640 is the chart height`                                      

股票图代码展示实现如下:

import streamlit as st``import time``import streamlit_highcharts as hct``import akshare as ak``df = ak.stock_zh_a_daily(symbol="sh600519", adjust="qfq")``df["date"] = df["date"].astype(str)``df["date"] = df["date"].apply(lambda x: int(time.mktime(time.strptime(x,"%Y-%m-%d"))) * 1000)``   ``stock = df[['date', 'open', 'high', 'low', 'close']].values.tolist()``volume = df[['date', 'volume']].values.tolist()``   ``configuration = {`    `"title": {"text": "AAPL stock price by minute"},`    `"rangeSelector": {`        `"buttons": [`            `{"type": "hour", "count": 1, "text": "1h"},`            `{"type": "day", "count": 1, "text": "1D"},`            `{"type": "all", "count": 1, "text": "All"},`        `],`        `"selected": 1,`        `"inputEnabled": False,`    `},`    `"series": [`        `{"name": "AAPL", "type": "candlestick", "data": stock, "tooltip": {"valueDecimals": 2}}`    `],``}``hct.streamlit_highcharts(configuration,640) #

参考内容如下:

[python_highchart]:https://stock-docs.highchartspython.com/en/

latest/using.html#working-with-highcharts-stock-features

[panel_highchart]:https://github.com/awesome-panel/panel-highcharts/blob/main/examples/reference/HighMap.ipynb

[NiceGUI]:https://nicegui.io/documentation

[JustPy]: https://justpy.io/charts_tutorial/stock_charts

---------------------------END---------------------------

题外话

当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值