首页 > 解决方案 > 应用 DateFormatter 和 WeekdayLocator 后,时间序列中的条形图超出最后一个日期

问题描述

所以,我的任务很简单。我需要为时间序列中的两列绘制条形图和堆积条形图。我画了它们,一切都很好,但是由于日期范围很大,无法区分日期。图上仅显示开始日期和结束日期:

在此处输入图像描述

所以,我需要将日刻度更改为每周刻度。我传统上应用 DateFormatter 和 WeekdayLocator 并得到情节。我再次得到了一个很好的情节,除了情节实际上超出了数据集的最后一个日期这一事实。我被卡住了,无法解释自己为什么会发生这样的事情。情节自行进行还是我在某处有错误?

在此处输入图像描述

正如您在图中看到的,最后一个刻度是 07-28,而数据集的最后一个日期是 2021-07-10。

这是我的代码:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from matplotlib.dates import DateFormatter

vaccinations_final = pd.read_csv('dataset.csv', index_col = 'date')

#Bar Chart with days on x-axis
ax = vaccinations_final[["cumPeopleVaccinatedFirstDoseByVaccinationDate", "cumPeopleVaccinatedSecondDoseByVaccinationDate"]].plot(kind="bar", figsize=(20, 10)) 

#Bar Chart with months and weeks on x-axis
ax_1 = vaccinations_final[["cumPeopleVaccinatedFirstDoseByVaccinationDate", "cumPeopleVaccinatedSecondDoseByVaccinationDate"]].plot(kind="bar", figsize=(20, 10))
date_form = DateFormatter("%m-%d")
ax_1.xaxis.set_major_formatter(date_form)
ax_1.xaxis.set_major_locator(mdates.WeekdayLocator(interval=1))

这是数据集:

date,newPeopleVaccinatedFirstDoseByVaccinationDate,cumPeopleVaccinatedFirstDoseByVaccinationDate,newPeopleVaccinatedSecondDoseByVaccinationDate,cumPeopleVaccinatedSecondDoseByVaccinationDate,Year,Month,Week
2020-12-08,5294,5294,0.0,0.0,2020,December,50
2020-12-09,9580,14874,0.0,0.0,2020,December,50
2020-12-10,11808,26682,0.0,0.0,2020,December,50
2020-12-11,12474,39156,0.0,0.0,2020,December,50
2020-12-12,10574,49730,0.0,0.0,2020,December,50
2020-12-13,6136,55866,0.0,0.0,2020,December,50
2020-12-14,12185,68051,0.0,0.0,2020,December,51
2020-12-15,59770,127821,0.0,0.0,2020,December,51
2020-12-16,97265,225086,0.0,0.0,2020,December,51
2020-12-17,96740,321826,0.0,0.0,2020,December,51
2020-12-18,77505,399331,0.0,0.0,2020,December,51
2020-12-19,90487,489818,0.0,0.0,2020,December,51
2020-12-20,79397,569215,0.0,0.0,2020,December,51
2020-12-21,64128,633343,0.0,0.0,2020,December,52
2020-12-22,86948,720291,0.0,0.0,2020,December,52
2020-12-23,80648,800939,0.0,0.0,2020,December,52
2020-12-24,27500,828439,0.0,0.0,2020,December,52
2020-12-25,257,828696,0.0,0.0,2020,December,52
2020-12-26,1750,830446,0.0,0.0,2020,December,52
2020-12-27,4903,835349,0.0,0.0,2020,December,52
2020-12-28,9031,844380,0.0,0.0,2020,December,53
2020-12-29,46606,890986,2281.0,2281.0,2020,December,53
2020-12-30,109559,1000545,4268.0,6549.0,2020,December,53
2020-12-31,89804,1090349,4801.0,11350.0,2020,December,53
2021-01-01,24716,1115065,1099.0,12449.0,2021,January,53
2021-01-02,29992,1145057,4700.0,17149.0,2021,January,53
2021-01-03,16363,1161420,3808.0,20957.0,2021,January,53
2021-01-04,27734,1189154,9290.0,30247.0,2021,January,1
2021-01-05,58379,1247533,47105.0,77352.0,2021,January,1
2021-01-06,89357,1336890,80848.0,158200.0,2021,January,1
2021-01-07,202662,1539552,79148.0,237348.0,2021,January,1
2021-01-08,249336,1788888,59548.0,296896.0,2021,January,1
2021-01-09,212986,2001874,63532.0,360428.0,2021,January,1
2021-01-10,108961,2110835,44770.0,405198.0,2021,January,1
2021-01-11,112313,2223148,15940.0,421138.0,2021,January,2
2021-01-12,175173,2398321,10524.0,431662.0,2021,January,2
2021-01-13,252374,2650695,6375.0,438037.0,2021,January,2
2021-01-14,287367,2938062,3720.0,441757.0,2021,January,2
2021-01-15,333264,3271326,2250.0,444007.0,2021,January,2
2021-01-16,289577,3560903,1243.0,445250.0,2021,January,2
2021-01-17,149137,3710040,756.0,446006.0,2021,January,2
2021-01-18,150308,3860348,922.0,446928.0,2021,January,3
2021-01-19,295781,4156129,1233.0,448161.0,2021,January,3
2021-01-20,317720,4473849,1597.0,449758.0,2021,January,3
2021-01-21,357976,4831825,1472.0,451230.0,2021,January,3
2021-01-22,470245,5302070,627.0,451857.0,2021,January,3
2021-01-23,460520,5762590,546.0,452403.0,2021,January,3
2021-01-24,189168,5951758,473.0,452876.0,2021,January,3
2021-01-25,189269,6141027,469.0,453345.0,2021,January,4
2021-01-26,226303,6367330,395.0,453740.0,2021,January,4
2021-01-27,234530,6601860,532.0,454272.0,2021,January,4
2021-01-28,335285,6937145,1071.0,455343.0,2021,January,4
2021-01-29,474557,7411702,2196.0,457539.0,2021,January,4
2021-01-30,460598,7872300,2250.0,459789.0,2021,January,4
2021-01-31,278236,8150536,2349.0,462138.0,2021,January,4
2021-02-01,261426,8411962,1269.0,463407.0,2021,February,5
2021-02-02,295615,8707577,1194.0,464601.0,2021,February,5
2021-02-03,362123,9069700,2246.0,466847.0,2021,February,5
2021-02-04,389299,9458999,2651.0,469498.0,2021,February,5
2021-02-05,399052,9858051,1675.0,471173.0,2021,February,5
2021-02-06,471419,10329470,549.0,471722.0,2021,February,5
2021-02-07,223494,10552964,338.0,472060.0,2021,February,5
2021-02-08,234993,10787957,915.0,472975.0,2021,February,6
2021-02-09,304251,11092208,2356.0,475331.0,2021,February,6
2021-02-10,332557,11424765,4295.0,479626.0,2021,February,6
2021-02-11,389056,11813821,4313.0,483939.0,2021,February,6
2021-02-12,428682,12242503,4075.0,488014.0,2021,February,6
2021-02-13,435573,12678076,2266.0,490280.0,2021,February,6
2021-02-14,183410,12861486,722.0,491002.0,2021,February,6
2021-02-15,200653,13062139,1542.0,492544.0,2021,February,7
2021-02-16,307293,13369432,3240.0,495784.0,2021,February,7
2021-02-17,416652,13786084,4685.0,500469.0,2021,February,7
2021-02-18,393881,14179965,4815.0,505284.0,2021,February,7
2021-02-19,316884,14496849,4328.0,509612.0,2021,February,7
2021-02-20,308613,14805462,2777.0,512389.0,2021,February,7
2021-02-21,110666,14916128,2300.0,514689.0,2021,February,7
2021-02-22,145177,15061305,5330.0,520019.0,2021,February,8
2021-02-23,281355,15342660,9780.0,529799.0,2021,February,8
2021-02-24,399281,15741941,14890.0,544689.0,2021,February,8
2021-02-25,437005,16178946,17312.0,562001.0,2021,February,8
2021-02-26,447691,16626637,16649.0,578650.0,2021,February,8
2021-02-27,376071,17002708,15235.0,593885.0,2021,February,8
2021-02-28,156614,17159322,9205.0,603090.0,2021,February,8
2021-03-01,146124,17305446,11740.0,614830.0,2021,March,9
2021-03-02,171927,17477373,28631.0,643461.0,2021,March,9
2021-03-03,228358,17705731,45729.0,689190.0,2021,March,9
2021-03-04,320777,18026508,46135.0,735325.0,2021,March,9
2021-03-05,386735,18413243,37539.0,772864.0,2021,March,9
2021-03-06,389716,18802959,21862.0,794726.0,2021,March,9
2021-03-07,140419,18943378,8296.0,803022.0,2021,March,9
2021-03-08,167342,19110720,22811.0,825833.0,2021,March,10
2021-03-09,176671,19287391,48388.0,874221.0,2021,March,10
2021-03-10,203198,19490589,71330.0,945551.0,2021,March,10
2021-03-11,136358,19626947,54149.0,999700.0,2021,March,10
2021-03-12,312105,19939052,68570.0,1068270.0,2021,March,10
2021-03-13,471245,20410297,39085.0,1107355.0,2021,March,10
2021-03-14,224875,20635172,13300.0,1120655.0,2021,March,10
2021-03-15,320010,20955182,30680.0,1151335.0,2021,March,11
2021-03-16,372748,21327930,67258.0,1218593.0,2021,March,11
2021-03-17,389415,21717345,95451.0,1314044.0,2021,March,11
2021-03-18,458065,22175410,108578.0,1422622.0,2021,March,11
2021-03-19,541501,22716911,101864.0,1524486.0,2021,March,11
2021-03-20,696474,23413385,71630.0,1596116.0,2021,March,11
2021-03-21,294410,23707795,29113.0,1625229.0,2021,March,11
2021-03-22,265368,23973163,64481.0,1689710.0,2021,March,12
2021-03-23,261521,24234684,140387.0,1830097.0,2021,March,12
2021-03-24,268817,24503501,218056.0,2048153.0,2021,March,12
2021-03-25,282042,24785543,230029.0,2278182.0,2021,March,12
2021-03-26,319186,25104729,230489.0,2508671.0,2021,March,12
2021-03-27,413261,25517990,238048.0,2746719.0,2021,March,12
2021-03-28,209591,25727581,93322.0,2840041.0,2021,March,12
2021-03-29,173722,25901303,133054.0,2973095.0,2021,March,13
2021-03-30,168508,26069811,241516.0,3214611.0,2021,March,13
2021-03-31,178634,26248445,348480.0,3563091.0,2021,March,13
2021-04-01,117396,26365841,419876.0,3982967.0,2021,April,13
2021-04-02,66845,26432686,219432.0,4202399.0,2021,April,13
2021-04-03,73831,26506517,156274.0,4358673.0,2021,April,13
2021-04-04,25732,26532249,37151.0,4395824.0,2021,April,13
2021-04-05,16616,26548865,47123.0,4442947.0,2021,April,14
2021-04-06,49097,26597962,156859.0,4599806.0,2021,April,14
2021-04-07,53792,26651754,380998.0,4980804.0,2021,April,14
2021-04-08,50900,26702654,405706.0,5386510.0,2021,April,14
2021-04-09,58681,26761335,410084.0,5796594.0,2021,April,14
2021-04-10,73397,26834732,449206.0,6245800.0,2021,April,14
2021-04-11,34451,26869183,157013.0,6402813.0,2021,April,14
2021-04-12,22475,26891658,166741.0,6569554.0,2021,April,15
2021-04-13,35085,26926743,232473.0,6802027.0,2021,April,15
2021-04-14,77785,27004528,290422.0,7092449.0,2021,April,15
2021-04-15,93424,27097952,365256.0,7457705.0,2021,April,15
2021-04-16,101763,27199715,444250.0,7901955.0,2021,April,15
2021-04-17,114255,27313970,475074.0,8377029.0,2021,April,15
2021-04-18,69583,27383553,192078.0,8569107.0,2021,April,15
2021-04-19,81862,27465415,199688.0,8768795.0,2021,April,16
2021-04-20,82676,27548091,269307.0,9038102.0,2021,April,16
2021-04-21,92471,27640562,338251.0,9376353.0,2021,April,16
2021-04-22,102594,27743156,348886.0,9725239.0,2021,April,16
2021-04-23,107817,27850973,392462.0,10117701.0,2021,April,16
2021-04-24,125321,27976294,490890.0,10608591.0,2021,April,16
2021-04-25,61356,28037650,223306.0,10831897.0,2021,April,16
2021-04-26,62010,28099660,236214.0,11068111.0,2021,April,17
2021-04-27,83534,28183194,307317.0,11375428.0,2021,April,17
2021-04-28,101368,28284562,387867.0,11763295.0,2021,April,17
2021-04-29,110516,28395078,396310.0,12159605.0,2021,April,17
2021-04-30,114538,28509616,356533.0,12516138.0,2021,April,17
2021-05-01,122597,28632213,333769.0,12849907.0,2021,May,17
2021-05-02,70375,28702588,133916.0,12983823.0,2021,May,17
2021-05-03,57866,28760454,93368.0,13077191.0,2021,May,18
2021-05-04,96913,28857367,206063.0,13283254.0,2021,May,18
2021-05-05,106524,28963891,349931.0,13633185.0,2021,May,18
2021-05-06,100379,29064270,422425.0,14055610.0,2021,May,18
2021-05-07,108093,29172363,415026.0,14470636.0,2021,May,18
2021-05-08,139088,29311451,404566.0,14875202.0,2021,May,18
2021-05-09,73933,29385384,155794.0,15030996.0,2021,May,18
2021-05-10,73637,29459021,179758.0,15210754.0,2021,May,19
2021-05-11,99251,29558272,306643.0,15517397.0,2021,May,19
2021-05-12,150597,29708869,403797.0,15921194.0,2021,May,19
2021-05-13,177485,29886354,376635.0,16297829.0,2021,May,19
2021-05-14,188506,30074860,339890.0,16637719.0,2021,May,19
2021-05-15,212088,30286948,355329.0,16993048.0,2021,May,19
2021-05-16,107268,30394216,154747.0,17147795.0,2021,May,19
2021-05-17,81311,30475527,201272.0,17349067.0,2021,May,20
2021-05-18,155790,30631317,266243.0,17615310.0,2021,May,20
2021-05-19,238844,30870161,307420.0,17922730.0,2021,May,20
2021-05-20,236990,31107151,367285.0,18290015.0,2021,May,20
2021-05-21,191701,31298852,370141.0,18660156.0,2021,May,20
2021-05-22,184593,31483445,521386.0,19181542.0,2021,May,20
2021-05-23,103383,31586828,219941.0,19401483.0,2021,May,20
2021-05-24,87801,31674629,258365.0,19659848.0,2021,May,21
2021-05-25,157798,31832427,322044.0,19981892.0,2021,May,21
2021-05-26,207408,32039835,365661.0,20347553.0,2021,May,21
2021-05-27,237420,32277255,356469.0,20704022.0,2021,May,21
2021-05-28,177220,32454475,371164.0,21075186.0,2021,May,21
2021-05-29,158868,32613343,378696.0,21453882.0,2021,May,21
2021-05-30,97803,32711146,173324.0,21627206.0,2021,May,21
2021-05-31,69204,32780350,147579.0,21774785.0,2021,May,22
2021-06-01,71483,32851833,270053.0,22044838.0,2021,June,22
2021-06-02,130140,32981973,281223.0,22326061.0,2021,June,22
2021-06-03,157718,33139691,308588.0,22634649.0,2021,June,22
2021-06-04,147170,33286861,320424.0,22955073.0,2021,June,22
2021-06-05,178722,33465583,424735.0,23379808.0,2021,June,22
2021-06-06,98255,33563838,217332.0,23597140.0,2021,June,22
2021-06-07,83298,33647136,234096.0,23831236.0,2021,June,23
2021-06-08,104586,33751722,246275.0,24077511.0,2021,June,23
2021-06-09,149010,33900732,252538.0,24330049.0,2021,June,23
2021-06-10,173728,34074460,248622.0,24578671.0,2021,June,23
2021-06-11,175724,34250184,247517.0,24826188.0,2021,June,23
2021-06-12,229147,34479331,278298.0,25104486.0,2021,June,23
2021-06-13,121770,34601101,151417.0,25255903.0,2021,June,23
2021-06-14,108399,34709500,163081.0,25418984.0,2021,June,24
2021-06-15,149478,34858978,170873.0,25589857.0,2021,June,24
2021-06-16,169813,35028791,177107.0,25766964.0,2021,June,24
2021-06-17,210870,35239661,171032.0,25937996.0,2021,June,24
2021-06-18,194883,35434544,162662.0,26100658.0,2021,June,24
2021-06-19,252424,35686968,198470.0,26299128.0,2021,June,24
2021-06-20,137860,35824828,78874.0,26378002.0,2021,June,24
2021-06-21,120320,35945148,92339.0,26470341.0,2021,June,25
2021-06-22,156271,36101419,119655.0,26589996.0,2021,June,25
2021-06-23,171415,36272834,118190.0,26708186.0,2021,June,25
2021-06-24,190776,36463610,132297.0,26840483.0,2021,June,25
2021-06-25,171341,36634951,129967.0,26970450.0,2021,June,25
2021-06-26,207493,36842444,176341.0,27146791.0,2021,June,25
2021-06-27,113342,36955786,97258.0,27244049.0,2021,June,25
2021-06-28,96824,37052610,100652.0,27344701.0,2021,June,26
2021-06-29,107634,37160244,110531.0,27455232.0,2021,June,26
2021-06-30,110991,37271235,133946.0,27589178.0,2021,June,26
2021-07-01,113877,37385112,143023.0,27732201.0,2021,July,26
2021-07-02,98204,37483316,135887.0,27868088.0,2021,July,26
2021-07-03,117866,37601182,166703.0,28034791.0,2021,July,26
2021-07-04,59401,37660583,85152.0,28119943.0,2021,July,26
2021-07-05,56118,37716701,103801.0,28223744.0,2021,July,27
2021-07-06,65344,37782045,105163.0,28328907.0,2021,July,27
2021-07-07,67852,37849897,124235.0,28453142.0,2021,July,27
2021-07-08,76995,37926892,131701.0,28584843.0,2021,July,27
2021-07-09,72439,37999331,137868.0,28722711.0,2021,July,27
2021-07-10,74837,38074168,170408.0,28893119.0,2021,July,27

标签: pandasmatplotlibdateformatterxticks

解决方案


Pandas.plot Datetime X Axis Correction with Fixed Locator/Formatter

绘制条形图时,xaxis 是一个从 0 长度(x)开始的数组。然后将文本标签放置在这些位置。WeekdayLocator 然后从 0-len(x) 观察 x 值并将日期设置为 1970(从纪元开始)。在代码中,如果您将 strftime 设置为包含年份,您会注意到它是 1970 年。月份接近与您的数据集对齐只是巧合。

据我所知,对于条形图来说,没有简单或聪明的方法来解决这个问题。最好的解决方案通常是只使用您自己的固定定位器和格式化程序,以预期的时间间隔对数据进行采样。

ax.xaxis.set_major_locator(ticker.FixedLocator(np.arange(0, len(vaccinations_final), 15)))
ax.xaxis.set_major_formatter(ticker.FixedFormatter(vaccinations_final.index[::15].strftime('%m-%d')))

此外,日期索引应转换为日期时间。

vaccinations_final.index = pd.to_datetime(vaccinations_final.index)

在此处输入图像描述

#Bar Chart with days on x-axis
ax = vaccinations_final[["cumPeopleVaccinatedFirstDoseByVaccinationDate", "cumPeopleVaccinatedSecondDoseByVaccinationDate"]].plot(kind="bar", figsize=(12, 8)) 

ax.xaxis.set_major_locator(ticker.FixedLocator(np.arange(0, len(vaccinations_final), 15)))
ax.xaxis.set_major_formatter(ticker.FixedFormatter(vaccinations_final.index[::15].strftime('%m-%d')))

#Bar Chart with months and weeks on x-axis
ax_1 = vaccinations_final[["cumPeopleVaccinatedFirstDoseByVaccinationDate", "cumPeopleVaccinatedSecondDoseByVaccinationDate"]].plot(kind="bar", figsize=(12, 8))
ax_1.xaxis.set_major_locator(ticker.FixedLocator(np.arange(0, len(vaccinations_final), 15)))
ax_1.xaxis.set_major_formatter(ticker.FixedFormatter(vaccinations_final.index[::15].strftime('%m-%d')))

推荐阅读