Шкалы оси X не совпадают с 2 наборами данных на одном графике - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть 2 набора данных, которые я пытаюсь построить на одной фигуре. Они имеют общий столбец, который я использую для оси X, однако один из моих наборов данных собирается ежегодно, а другой - ежемесячно, поэтому количество точек данных в каждом наборе значительно отличается.

Pyplot не отображает значения X для каждого набора, где я ожидаю, когда я строю оба набора на одном графике

Когда я строю только свой ежегодный набор данных, я получаю: Tax Data

Когда я строю свой ежемесячный набор данных, я получаю: Trip Data

Но когда я строю наложения двух наборов (код ниже), я получаю: Both Data

TFrame:

   10003   Date
0    257 201401
1    216 201402
2    417 201403
3    568 201404
4    768 201405
5    836 201406
6    798 201407
7    809 201408
8    839 201409
9    796 201410

tax_for_zip_data:

TAX BRACKET $1 under $25,000    ...       Date
2                       5740    ...     201301
0                       5380    ...     201401
1                       5320    ...     201501
3                       5030    ...     201601

Итак, я сделал так, как предлагалось в комментариях, и преобразовал мои столбцы Date в объекты datetime:

TFrame:

   10003       Date
0    257 2014-01-31
1    216 2014-02-28
2    417 2014-03-31
3    568 2014-04-30
4    768 2014-05-31
5    836 2014-06-30
6    798 2014-07-31
7    809 2014-08-31
8    839 2014-09-30
9    796 2014-10-31

tax_for_zip_data:

TAX BRACKET $1 under $25,000    ...           Date
2                       5740    ...     2013-01-31
0                       5380    ...     2014-01-31
1                       5320    ...     2015-01-31
3                       5030    ...     2016-01-31

Но даты все еще строят смещение, Both Data

Ни одна из моих данных не относится к 2012 году - январь 2013 - самый ранний. Все tax_for_zip_data смещены на год. Если я строю только этот набор, он строится правильно. Tax Data

fig, ax1 = plt.subplots(sharex = True)

color = "tab:red"
ax1.set_xlabel('Date')
ax1.set_ylabel('Trips', color = color)
tframe.plot(kind = 'line',x = 'Date', y = "10003", ax = ax1, color = color)
ax1.tick_params(axis = 'y', labelcolor = color)


ax2 = ax1.twinx()
color = "tab:blue"
ax2.set_ylabel('Num Returns', color = color)
tax_for_zip_data.plot(kind = 'line', x = 'Date', y = tax_for_zip_data.columns[:-1], ax = ax2)
ax2.tick_params(axis = 'y', labelcolor = color)

plt.show()

1 Ответ

1 голос
/ 27 апреля 2019

Если вы можете сделать индекс DataFrame упростить построение индекса даты и времени.

s = '''10003   Date
257   201401
216   201402
417   201403
568   201404
768   201405
836   201406
798   201407
809   201408
839   201409
796   201410
'''
df1 = pd.read_csv(io.StringIO(s), delimiter='\s{2,}',engine='python')
df1.index = pd.to_datetime(df1['Date'],format='%Y%m')

s = '''TAX BRACKET     $1 under $25,000           Date
2                       5740         201301
0                       5380         201401
1                       5320         201501
3                       5030         201601
'''
df2 = pd.read_csv(io.StringIO(s), delimiter='\s{2,}',engine='python')
df2.index = pd.to_datetime(df2['Date'],format='%Y%m')

Вам не нужно указывать аргумент для plot x параметра.

fig, ax1 = plt.subplots(sharex = True)

color = "tab:red"
ax1.set_xlabel('Date')
ax1.set_ylabel('Trips', color = color)
df1.plot(kind = 'line',y="10003", ax = ax1, color = color)
ax1.tick_params(axis = 'y', labelcolor = color)

ax2 = ax1.twinx()
color = "tab:blue"
ax2.set_ylabel('Num Returns', color = color)
df2.plot(kind = 'line', y='$1 under $25,000', ax = ax2)
ax2.tick_params(axis = 'y', labelcolor = color)

plt.show()
plt.close()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...