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

yizhihongxing

下面我会详细讲解“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开发之for循环操作实例详解

    当然,我很乐意为您提供“Python开发之for循环操作实例详解”的完整攻略。以下是详细的步骤和示例: Python开发之for循环操作实例详解 在Python中,for循环是一种常用的循环结构,用于遍历可迭代对象中的元素。for循环的语法格式如下: for 变量 in 可迭代对象: 循环体 其中,变量是用于存储可迭代对象中的元素变量名,可迭代对象是一个包含…

    python 2023年5月13日
    00
  • 从CentOS安装完成到生成词云python的实例

    下面就为大家讲解如何从CentOS安装完成到生成词云python的实例。 安装Python CentOS自带的默认Python版本较低,需要我们手动安装一个新版本的Python。可以通过以下步骤安装Python: 安装编译所需软件包: sudo yum install -y wget gcc sqlite-devel zlib-devel openssl-d…

    python 2023年5月20日
    00
  • Python中列表,元组,字典和集合的区别及它们之间的转换

    以下是“Python中列表、元组、字典和集合的区别及它们之间的转换”的完整攻略。 1. 列表、元组、字典和集合的概述 在Python中,列表、元组、字典和集合都是常见的数据结构。它们各自有不同的特点和用途。 列表:列表是一种有序的可变序列,可以存储任意类型的数据。 元组:元组是一种有序的不可变序列,可以存储任意类型的数据。 字典:字典是一种无序的键值对集合,…

    python 2023年5月13日
    00
  • 写一个Python脚本自动爬取Bilibili小视频

    下面是Bilibili小视频自动爬取的攻略: 1. 所需工具 Python编程语言 requests:一个非常流行的Python HTTP客户端库,可用于向远程服务器发送HTTP/1.1请求。 BeautifulSoup:一个用于解析HTML和XML文档的Python库,可用于从网站上抽取所需的数据。 2. 步骤概述 2.1 分析目标网站 在开始编写Pyth…

    python 2023年5月14日
    00
  • python继承threading.Thread实现有返回值的子类实例

    Python中的threading.Thread是一个常用的多线程编程工具,可以通过继承threading.Thread类来创建自定义的线程类,并实现多线程编程。 在实际开发中,我们有时需要从多线程中获取返回值。本文将介绍如何通过继承threading.Thread类,来创建具有返回值的自定义线程类,并分别给出两个示例。 一、使用queue模块来传递返回值 …

    python 2023年5月19日
    00
  • Zapier 代码:Python,生成 CSV 字符串

    【问题标题】:Zapier Code: Python, generating a CSV stringZapier 代码:Python,生成 CSV 字符串 【发布时间】:2023-04-05 11:18:01 【问题描述】: 我正在尝试使用 Zapier 代码 (Python) 生成一个简单的 csv 字符串(不是文件!)。当我在计算机上的 Python …

    Python开发 2023年4月5日
    00
  • 详解Python3中ceil()函数用法

    当您需要对一个数字进行向上取整运算时,Python中提供了ceil()函数来实现。本文将详细讲解ceil()函数的用法及相关示例。 标准用法 ceil()函数的标准用法如下: import math # 对一个数字进行向上取整运算 math.ceil(x) 其中,x表示需要进行向上取整的数字。这个数字可以是整数、浮点数等。 需要注意的是,使用此函数必须先要导…

    python 2023年6月3日
    00
  • 解决Python pandas plot输出图形中显示中文乱码问题

    下面是解决Python pandas plot输出图形中显示中文乱码问题的完整攻略: 1. 确认matplotlib默认字体 Matplotlib是Python中最常用的绘图库之一,而在Matplotlib中绘制图形时,中文乱码的问题比较常见,因为默认情况下Matplotlib并没有指定中文字体。因此,我们需要先确认一下Matplotlib默认使用哪个字体。…

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