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日

相关文章

  • 正则表达式+Python re模块详解

    正则表达式+Python re模块详解 正则表达式是一种强大的文本处理工具,可以用于各种文本处理任务,如数据清洗、文本分析、信息提取等。在Python中,我们可以使用re模块来操作正则表达式。本攻略将详细讲解Python正则表达式的基本语法、常用函数和应用技巧,帮读者快速掌握正则表达式的用法。 正则表达式的基本语法 正则表达式是由普通字符元字符组成的字符串,…

    python 2023年5月14日
    00
  • Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能

    首先我们来讲一下 Python + selenium + requests 实现 12306 全自动抢票的攻略。 什么是 Python + selenium + requests Python:一种高级编程语言,常用于数据处理、网络爬虫等领域。 selenium:一个用于自动化测试的工具,可以模拟浏览器的行为操作网页,实现自动化进行网页操作的功能。 requ…

    python 2023年5月19日
    00
  • python3爬虫怎样构建请求header

    构建请求Header是爬虫中的重要一环,在Python3中,可以通过设置urllib库中的Request头部信息,来模拟浏览器发送请求,实现数据的获取。 以下是构建请求Header的完整攻略: 1. 了解User-Agent User-Agent是指浏览器的请求头信息中包含的代理信息,是服务器端识别访问请求来源的重要标识,不同的浏览器具有不同的User-Ag…

    python 2023年6月3日
    00
  • python语言中pandas字符串分割str.split()函数

    介绍pandas字符串分割str.split()函数之前,先简单介绍一下pandas库。pandas是基于numpy构建的,一种用于数据分析、数据操作和数据可视化的Python库。pandas提供了大量的数据操作函数,这些函数基于numpy的函数进行扩展和优化,利用pandas处理数据可以大大提高效率,方便快捷地进行数据统计建模等工作。 str.split(…

    python 2023年6月3日
    00
  • Python创建二维数组与初始化的实践举例

    关于“Python创建二维数组与初始化的实践举例”的攻略,可以分成以下几个步骤: 1. 定义一个二维数组 一个二维数组通常由多个一维数组组成。那么在Python中,其实可以通过以下两种方式定义一个二维数组: 方式一 使用列表生成式嵌套列表生成式,如下所示: a = [[0 for i in range(m)] for j in range(n)] 这里的a就…

    python 2023年6月5日
    00
  • python 字符串和整数的转换方法

    Python 中字符串与整数的转换方法非常简单,我们可以使用内置的函数实现这一功能。 从字符串转换为整数 将字符串转换为整数的过程叫做“字符串转整数”,在 Python 中有两种方法可以实现。 方法1: 使用 int() 函数 我们可以使用 int() 函数将字符串转换为整数。int() 函数接受一个字符串作为参数,返回一个整数。 num_str = &qu…

    python 2023年6月5日
    00
  • Python中的面向对象编程详解(上)

    针对“Python中的面向对象编程详解(上)”这篇文章,我会进行如下详细讲解: Python中的面向对象编程详解(上) 什么是面向对象编程? 首先,我们需要明白什么是面向对象编程(Object-oriented Programming, OOP)。面向对象编程是一种程序设计模式,它将数据和操作数据的行为封装在一起,形成对象(Object),并通过对象之间的交…

    python 2023年5月31日
    00
  • Python利用Prim算法生成迷宫

    接下来我将详细地讲解“Python利用Prim算法生成迷宫”的完整攻略。 1. 什么是Prim算法 Prim算法是一种用于生成最小生成树的算法。在迷宫生成中,我们可以把迷宫看作一幅图,使用Prim算法来生成一个最小生成树,再通过删除部分边来形成迷宫。在Prim算法中有一个重要的概念:已访问节点集合(Visited Set)和未访问节点集合(Unvisited…

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