python利用json和pyecharts画折线图实例代码

下面我会详细讲解“python利用json和pyecharts画折线图实例代码”的完整攻略。

准备工作

在开始编写代码之前,我们需要先安装必要的库。具体步骤可以参照以下操作:

pip install pyecharts
pip install requests
pip install lxml
pip install pandas

这些库的作用如下:

  • pyecharts:数据可视化库,用于绘制折线图。
  • requests:爬虫库,用于获取网页信息。
  • lxml:数据处理库,用于解析网页信息。
  • pandas:数据处理库,用于对数据进行处理。

数据获取

在绘制折线图之前,我们需要先获取数据。我们以 “当日疫情” 数据为例。以下是获取数据的详细步骤:

import requests
import json

def get_data():
    """
    :return: response:返回请求数据
    """
    url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
    response = requests.get(url).json()["data"]
    data = json.loads(response)
    return data

在上述代码中,我们使用 requests 库向指定的网址发送请求。接着我们使用 json 库将请求的字符串转换成字典格式。

数据清洗

通过上述代码获取的数据是一个比较复杂的字典,我们需要将其清洗成适合绘制折线图的数据格式。以下是数据清洗的详细步骤:

def wash_data(data):
    """
    :param data: 传入数据字典
    :return: time_list:返回时间列表
             total_data:返回累计数据列表
             add_data:返回每日新增数据列表
    """
    # 获取时间列表
    time_list = []
    for i in data["chinaDayList"]:
        time_list.append(i["date"][:4] + "/" + i["date"][4:6] + "/" + i["date"][6:])

    # 获取累计数据列表和每日新增数据列表
    total_data = []
    add_data = []
    for i in data["chinaDayList"]:
        total_data.append(i["confirm"])
        add_data.append(i["confirmAdd"])
    return time_list, total_data, add_data

在上述代码中,我们分别获取时间、累计数据、每日新增数据等信息。通过数据的清洗,我们可以获取到适合绘制折线图的数据格式。

绘制折线图

在获取到适合绘制折线图的数据后,我们需要使用 pyecharts 库将其绘制成图表。以下是绘制折线图的详细步骤:

from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
from pyecharts.charts import Line

def draw_line(time_list, total_data, add_data):
    """
    :param time_list: 传入时间列表
           total_data: 传入累计数据列表
           add_data:传入每日新增数据列表
    :return: 生成折线图
    """
    # 创建 Line 类对象
    line = Line()

    # 配置时间轴
    line.add_xaxis(time_list)

    # 配置累计数据轴
    line.add_yaxis(
        "累计确诊",
        total_data,
        linestyle_opts=opts.LineStyleOpts(width=2, color="#8B636C", type_="dashed"),
        label_opts=opts.LabelOpts(is_show=False),
    )

    # 配置每日新增数据轴
    line.add_yaxis(
        "每日新增",
        add_data,
        linestyle_opts=opts.LineStyleOpts(width=2, color="#00CED1", type_="dashed"),
        label_opts=opts.LabelOpts(is_show=False),
    )

    # 配置图表组件
    line.set_series_opts(
        markline_opts=opts.MarkLineOpts(
            data=[opts.MarkLineItem(name="", y=total_data[-1])]
        ),
        label_opts=opts.LabelOpts(is_show=False),
    )
    line.set_global_opts(
        title_opts=opts.TitleOpts(title="当日疫情"),
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
        xaxis_opts=opts.AxisOpts(type_="category", split_number=5),
        yaxis_opts=opts.AxisOpts(
            split_number=3,
            axislabel_opts=opts.LabelOpts(formatter=JsCode("function(value) {return value + '人';}")),
        ),
        legend_opts=opts.LegendOpts(pos_bottom=True),
    )

    return line.render("line_chart.html")

在上述代码中,我们使用 pyecharts 库绘制折线图。其中,Line() 类用于创建一个折线图,add_xaxis() 方法用于配置横轴,add_yaxis() 方法用于配置纵轴,set_series_opts() 方法用于配置折线标记,set_globao_opts() 用于配置全局标记等等。

示例

以下是一个实例代码,其绘制了同一城市中每个时间点的天气状况。

import requests
import json
from pyecharts import options as opts
from pyecharts.charts import Line

# 获取数据的函数
def get_data():
    url = "http://www.sojson.com/open/api/weather/json.shtml?city=杭州"
    response = requests.get(url).json()
    return response

# 清洗数据的函数
def wash_data(data):
    time_list = [i["date"] for i in data["data"]["forecast"]]
    high_list = [i["high"] for i in data["data"]["forecast"]]
    low_list = [i["low"] for i in data["data"]["forecast"]]
    return time_list, high_list, low_list

# 绘制折线图的函数
def draw_line(time_list, high_list, low_list):
    # 创建 Line 类对象
    line = Line()

    # 配置时间轴
    line.add_xaxis(time_list)

    # 配置横轴、纵轴1
    line.add_yaxis("最高温度", high_list)
    line.set_global_opts(xaxis_opts=opts.AxisOpts(name="日期"), yaxis_opts=opts.AxisOpts(
        name="Temperature (°C)"))

    # 配置纵轴2
    line.extend_axis(
        yaxis=opts.AxisOpts(
            name="最低温度",
            type_="value",
            min_=0,
            max_=40,
            position="right",
            axislabel_opts=opts.LabelOpts(formatter="{value} °C"),
        )
    )

    # 添加纵轴的数值
    line.add_yaxis(
        "最低温度",
        low_list,
        yaxis_index=1,
        label_opts=opts.LabelOpts(is_show=True),
        linestyle_opts=opts.LineStyleOpts(width=3, color="#3285c7", type_="dashed"),
    )
    # 配置全局属性
    line.set_global_opts(
        title_opts=opts.TitleOpts(title="杭州每日天气"),
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
        legend_opts=opts.LegendOpts(is_show=True),
    )

    return line.render("line_chart.html") 

# 主函数
def main():
    data = get_data()
    time_list, high_list, low_list = wash_data(data)
    draw_line(time_list, high_list, low_list)

if __name__ == "__main__":
    main()

以上代码使用了 pyecharts 库,绘制了杭州每日天气的折线图。具体细节可以详细查看上述代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python利用json和pyecharts画折线图实例代码 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算

    让我们来详细讲解一下Python3中的字符串操作及其与数字类型的运算。 1. 字符串类型 在Python中,字符串类型是一种不可变的的数据类型,用于表示文本数据。字符串可以使用单引号、双引号、三引号来定义,例如: str1 = ‘hello world’ str2 = "hello world" str3 = ”’hello world…

    python 2023年6月5日
    00
  • python模拟实现图书管理系统

    下面我将详细介绍如何通过Python实现图书管理系统。 1. 确定系统需求 在实现图书管理系统之前,我们需要确立需要实现的功能和需求,一般包括以下几个方面: 图书信息管理(包括图书的添加、修改、删除和查询等操作) 读者信息管理(包括读者的添加、修改、删除和查询等操作) 借阅管理(包括图书的借阅、归还、借阅记录查询等操作) 系统设置(包括管理员账户的添加、修改…

    python 2023年5月30日
    00
  • Python list sort方法的具体使用

    以下是详细讲解“Python list sort方法的具体使用”的完整攻略。 在Python中,列表是一种常用的数据类型,可以用存储一组有序的数据。sort()是Python中用于对列表进行排序的方法。本文介绍sort()方法的具体使用方法,并提两个示例说明。 sort()方法的具体使用 sort()方法用于对列表进行排序可以按照升序或降序排列。sort()…

    python 2023年5月13日
    00
  • python 输出列表元素实例(以空格/逗号为分隔符)

    Python输出列表元素实例(以空格/逗号为分隔符) 在Python中,我们可以使用多种方法输出列表元素,其中包括以空格或逗号为分隔符的方法。本攻略将详细介绍如何使用这些方法输出列表元素。 以空格为隔输出列表元素 以下是例代码,演示如何以空格为分隔符输出列表元素: # 以空格为分隔符输出列表元素 my_list = [1, 2, 3, 4, 5] print…

    python 2023年5月13日
    00
  • 如何使用Python基于接口编程的方法实现

    针对如何使用Python基于接口编程的方法实现,下面是具体的攻略: 什么是基于接口编程? 在了解基于接口编程之前,需要先了解软件设计中的接口概念。接口(interface)是一个固定的交互边界,它定义了一个类或者对象提供的公共方法,是一种限制和规范类或对象的行为方式的方法。在面向对象编程中,接口是一种约束。 基于接口编程(Interface Based Pr…

    python 2023年5月18日
    00
  • Python进程管理神器Supervisor详解

    Python进程管理神器Supervisor详解 什么是Supervisor Supervisor是一个用Python编写的进程管理工具,可以让你轻松地监控、控制和管理进程的状态、输出等信息,是Python开发中不可或缺的一款工具。 安装Supervisor 使用pip命令来安装Supervisor: pip install supervisor 安装完成后…

    python 2023年6月6日
    00
  • python3实现从kafka获取数据,并解析为json格式,写入到mysql中

    在这里我将为您提供一个完整的攻略,讲解如何用Python3从Kafka中获取数据,并将其解析为JSON格式,在将数据写入MySQL中的过程。 准备工作 在开始之前,需要先确保以下环境已经安装: Python3: 用于编写和执行Python代码 pip: 用于安装Python第三方包 kafka-python: 用于连接到Kafka并获取数据 pymysql:…

    python 2023年6月3日
    00
  • python 函数进阶之闭包函数

    Python 函数进阶之闭包函数 什么是闭包函数? 一个能够访问自由变量(Free variable)的函数,通常是定义在某个函数内部的另一个函数 现代编程语言的基本概念之一——函数式编程(Functional Programming)中的重要概念 闭包函数的实现方式 Python 中的函数式编程,可以通过以下两种方式来实现闭包函数: 内部函数中,用 non…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部