Matplotlib为具有相同数据的绘图绘制不同的线

2024-05-20 13:16:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用matplotlib在同一个绘图中可视化两个不同的变量。 当我把它们分开时,一切都很好。 但当我把它们画在一个绘图中时,matplotlib开始在数据点之间绘制随机线。 我使用以下代码绘制图形并将其保存到pdf文件:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.dates as mdates

mobility_2020 = pd.read_csv("Datasets\\2020_BE_Region_Mobility_Report.csv")
mobility_2021 = pd.read_csv("Datasets\\2021_BE_Region_Mobility_Report.csv")
cases = pd.read_csv("Datasets\COVID19BE_CASES_AGESEX.csv")
cases = cases.dropna(subset=["DATE"])

mobility = pd.concat([mobility_2020, mobility_2021])

mobility['sub_region_2'].mask(mobility['sub_region_2'] == 'Antwerp', 'Antwerpen', inplace=True)
mobility['sub_region_2'].mask(mobility['sub_region_2'] == 'East Flanders', 'OostVlaanderen', inplace=True)
mobility['sub_region_2'].mask(mobility['sub_region_2'] == 'Flemish Brabant', 'VlaamsBrabant', inplace=True)
mobility['sub_region_2'].mask(mobility['sub_region_2'] == 'Province of Namur', 'Namur', inplace=True)
mobility['sub_region_2'].mask(mobility['sub_region_2'] == 'Walloon Brabant', 'BrabantWallon', inplace=True)
mobility['sub_region_2'].mask(mobility['sub_region_2'] == 'West Flanders', 'WestVlaanderen', inplace=True)
mobility['sub_region_2'].mask(mobility['sub_region_2'] == 'Liege', 'Liège', inplace=True)

provinces = ["VlaamsBrabant", "WestVlaanderen", "OostVlaanderen", "Namur", "Luxembourg", "Limburg", "Liège", "Hainaut", "Brussels", "BrabantWallon", "Antwerpen"]
sectors = ["retail_and_recreation_percent_change_from_baseline", "grocery_and_pharmacy_percent_change_from_baseline", "parks_percent_change_from_baseline", "transit_stations_percent_change_from_baseline", "workplaces_percent_change_from_baseline", "residential_percent_change_from_baseline"]

with PdfPages('report.pdf') as pdf:
    for province in provinces:
        for sector in sectors:
            data_province = (cases[cases["PROVINCE"] == province])
            data_province = data_province.groupby("DATE", as_index=False).sum()[0:100]
            data_province = data_province.sort_values("DATE")
            if province == "Brussels":
                data_sector = (mobility[mobility["sub_region_1"] == province])[0:100]
            else:
                data_sector = (mobility[mobility["sub_region_2"] == province])[0:100]
            fig, ax = plt.subplots()
            ax.plot(data_province["DATE"], data_province["CASES"], label=f"New cases {province}")
            ax.plot(data_sector["date"], data_sector[sector], label=f"Mobility {sector}")
            ax.xaxis.set_major_locator(mdates.DayLocator(interval=100))
            plt.xlabel("Dates")
            ax.yaxis.grid()
            plt.title(f"Mobility {sector} for {province}")
            plt.legend()
            pdf.savefig()
            plt.close()

这是我刚从data_扇区数据帧中绘制数据时的结果。 enter image description here

这是我绘制两个数据帧时的结果。 enter image description here

我不知道为什么会出现这个错误。 这可能只是一个视觉缺陷吗

使用的文件中的一个小片段:

2020年BE地区Mobility报告.csv和2021年BE地区Mobility报告.csv

country_region_code,country_region,sub_region_1,sub_region_2,metro_area,iso_3166_2_code,census_fips_code,place_id,date,retail_and_recreation_percent_change_from_baseline,grocery_and_pharmacy_percent_change_from_baseline,parks_percent_change_from_baseline,transit_stations_percent_change_from_baseline,workplaces_percent_change_from_baseline,residential_percent_change_from_baseline
BE,Belgium,,,,,,ChIJl5fz7WR9wUcR8g_mObTy60c,2021-01-01,-82,-83,9,-71,-83,28
BE,Belgium,,,,,,ChIJl5fz7WR9wUcR8g_mObTy60c,2021-01-02,-53,-15,7,-40,-23,14
BE,Belgium,,,,,,ChIJl5fz7WR9wUcR8g_mObTy60c,2021-01-03,-58,-17,-1,-43,-14,10
BE,Belgium,,,,,,ChIJl5fz7WR9wUcR8g_mObTy60c,2021-01-04,-36,0,-26,-40,-30,14
BE,Belgium,,,,,,ChIJl5fz7WR9wUcR8g_mObTy60c,2021-01-05,-37,0,-11,-39,-30,14
BE,Belgium,,,,,,ChIJl5fz7WR9wUcR8g_mObTy60c,2021-01-06,-36,-3,-14,-39,-28,13
BE,Belgium,,,,,,ChIJl5fz7WR9wUcR8g_mObTy60c,2021-01-07,-44,-7,-26,-41,-29,15
BE,Belgium,,,,,,ChIJl5fz7WR9wUcR8g_mObTy60c,2021-01-08,-46,-4,-22,-39,-27,16

COVID19BE_病例_AGESEX.csv

"DATE","PROVINCE","REGION","AGEGROUP","SEX","CASES"
"2020-03-01","Antwerpen","Flanders","40-49","M",1
"2020-03-01","Brussels","Brussels","10-19","F",1
"2020-03-01","Brussels","Brussels","10-19","M",1
"2020-03-01","Brussels","Brussels","20-29","M",1
"2020-03-01","Brussels","Brussels","30-39","F",1
"2020-03-01","Brussels","Brussels","40-49","F",1
"2020-03-01","Brussels","Brussels","50-59","M",1
"2020-03-01","Liège","Wallonia","40-49","M",3
"2020-03-01","Limburg","Flanders","70-79","M",1
"2020-03-01","OostVlaanderen","Flanders","50-59","F",1
"2020-03-01","VlaamsBrabant","Flanders","10-19","F",2
"2020-03-01","VlaamsBrabant","Flanders","10-19","M",1
"2020-03-01","VlaamsBrabant","Flanders","40-49","F",1
"2020-03-01","VlaamsBrabant","Flanders","40-49","M",1
"2020-03-01","VlaamsBrabant","Flanders","50-59","M",1
"2020-03-01","VlaamsBrabant","Flanders","60-69","M",1
"2020-03-02","Antwerpen","Flanders","40-49","M",1
"2020-03-02","BrabantWallon","Wallonia","10-19","F",1
"2020-03-02","BrabantWallon","Wallonia","10-19","M",1
"2020-03-02","Brussels","Brussels","10-19","F",1
"2020-03-02","Brussels","Brussels","40-49","M",1

这是相同数据的绘图,不受长度限制

enter image description here


Tags: csvfromdatabechangeregionpercentsector