我是靠谱客的博主 细腻西牛,最近开发中收集的这篇文章主要介绍Python:matplotlib一表多图一图多表,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在一张图中画4条折线。举例,读取北京、成都、上海、深圳四城市的天气预报气温数据,然后在一张图中用四根折线绘制气温变化。

Python代码如下:

import pandas as pd
import matplotlib.pyplot as plt
import requests
import re
import json

CITY = {'北京': 101010100, '成都': 101270101, '上海': 101020100, '深圳': 101280601}
MARKER = ['^', 'o', 's', 'X']

DEBUG = False


# 根据字典的值value获得该值对应的key
def get_dict_key(dic, value):
    keys = list(dic.keys())
    values = list(dic.values())
    idx = values.index(value)
    key = keys[idx]
    return key


def get_data(city_code):
    if DEBUG:
        f = open('w.json', mode='r', encoding='utf-8')
        ss = f.read()
        js = json.loads(ss)
    else:
        url = f'http://t.weather.itboy.net/api/weather/city/{city_code}'
        r = requests.get(url=url)
        js = r.json()

    forecast = js['data']['forecast']
    df = pd.DataFrame(data=forecast)

    date = df['ymd']
    temp_high = df['high']
    temp_high = [int(re.findall(r'd+', v)[0]) for v in temp_high]
    temp_low = df['low']
    temp_low = [int(re.findall(r'd+', v)[0]) for v in temp_low]

    return (date, temp_low, temp_high, city_code)


def draw_line(axs, data, i):
    axs[i].plot(data[2 * i][0],
                data[2 * i][1],
                color='red',
                linewidth=1,
                linestyle='--',
                marker=MARKER[2 * i],
                markerfacecolor='blue',
                markersize=10,
                label=get_dict_key(CITY, data[2 * i][3]))

    axs[i].plot(data[2 * i + 1][0],
                data[2 * i + 1][1],
                color='blue',
                linewidth=2,
                linestyle='-',
                marker=MARKER[2 * i + 1],
                markerfacecolor='red',
                markersize=10,
                label=get_dict_key(CITY, data[2 * i + 1][3]))

    axs[i].set_xlabel('日期')
    axs[i].set_ylabel(
        '低温(' + get_dict_key(CITY, data[2 * i][3]) + '/' + get_dict_key(CITY, data[2 * i + 1][3]) + ')')
    axs[i].grid(True)


def main():
    data = []
    for code in list(CITY.values()):
        data.append(get_data(code))

    plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文乱码
    plt.rcParams['axes.unicode_minus'] = False  # 正负号

    fig, axs = plt.subplots(nrows=2, ncols=1, constrained_layout=False)

    for i in range(len(axs)):
        draw_line(axs, data, i)

    for i in range(len(axs)):
        for tick in axs[i].get_xticklabels():
            tick.set_rotation(60)

    plt.title("北京-成都-上海-深圳低温变化", fontdict=dict(color='r'))
    fig.tight_layout()

    plt.legend()
    plt.show()


if __name__ == '__main__':
    main()

 

输出结果:

 

 

 

最后

以上就是细腻西牛为你收集整理的Python:matplotlib一表多图一图多表的全部内容,希望文章能够帮你解决Python:matplotlib一表多图一图多表所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部