Две оси Y. Строка экрана: пользовательские xticks

Я пытаюсь добавить пользовательские xticks к относительно сложному графику штрихового графика, и я застрял.

Я рисую из двух фреймов данных merged_90и merged_15:

merged_15
                 Volume     y_err_x      Area_2D     y_err_y
TripDate                                                    
2015-09-22  1663.016032  199.507503  1581.591701  163.473202

merged_90

                 Volume     y_err_x      Area_2D     y_err_y
TripDate                                                    
1990-06-10  1096.530711  197.377497  1531.651913  205.197493

Я хочу создать гистограмму с двумя осями (то есть Area_2Dи Volume), где Area_2Dи Volumeгруппы группируются на основе их соответствующего кадра данных. Пример сценария будет выглядеть так:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import scipy


fig = plt.figure()
ax1 = fig.add_subplot(111)
merged_90.Volume.plot(ax=ax1, color='orange', kind='bar',position=2.5, yerr=merged_90['y_err_x'] ,use_index=False , width=0.1)
merged_15.Volume.plot(ax=ax1, color='red', kind='bar',position=0.9, yerr=merged_15['y_err_x'] ,use_index=False, width=0.1)


ax2 = ax1.twinx()
merged_90.Area_2D.plot(ax=ax2,color='green',  kind='bar',position=3.5, yerr=merged_90['y_err_y'],use_index=False, width=0.1)
merged_15.Area_2D.plot(ax=ax2,color='blue',  kind='bar',position=0, yerr=merged_15['y_err_y'],use_index=False, width=0.1)

ax1.set_xlim(-0.5,0.2)

x = scipy.arange(1)
ax2.set_xticks(x)
ax2.set_xticklabels(['2015'])
plt.tight_layout()
plt.show()

В результате получается следующее:

График отсутствует

Казалось бы, я мог бы изменить:

x = scipy.arange(1)
ax2.set_xticks(x)
ax2.set_xticklabels(['2015'])

в

x = scipy.arange(2)
ax2.set_xticks(x)
ax2.set_xticklabels(['1990','2015'])

но это приводит к:

Неорганизованный участок

Я бы хотел, чтобы тики, упорядоченные в хронологическом порядке (т.е. 1990,2015)

Благодаря!

python,pandas,matplotlib,bar-chart,

0

Ответов: 1


0 принят

Рассматривали ли вы опускание второй оси и ее отображение следующим образом:

ind = np.array([0,0.3])
width = 0.1
fig, ax = plt.subplots()
Rects1 = ax.bar(ind, [merged_90.Volume.values, merged_15.Volume.values], color=['orange', 'red'] ,width=width)
Rects2 = ax.bar(ind + width, [merged_90.Area_2D.values, merged_15.Area_2D.values], color=['green', 'blue'] ,width=width)
ax.set_xticks([.1,.4]) 
ax.set_xticklabels(('1990','2015'))

Это дает:

введите описание изображения здесь

Я пропустил ошибку и цвета, но вы можете легко добавить их. Это даст читаемый граф, учитывая ваши тестовые данные. Как вы упомянули в комментариях, у вас все же есть две оси, по-видимому, для разных данных с надлежащими масштабами. Для этого вы можете сделать: fig = plt.figure () ax1 = fig.add_subplot (111) merged_90.Volume.plot (ax = ax, color = 'orange', kind = 'bar', position = 2.5, use_index = False, width = 0.1) merged_15.Volume.plot (ax = ax, color = 'red', kind = 'bar', position = 1.0, use_index = False, width = 0.1) ax2 = ax1.twinx () merged_90.Area_2D .plot (ax = ax, color = 'green', kind = 'bar', position = 3.5, use_index = False, width = 0.1) merged_15.Area_2D.plot (ax = ax, color = 'blue', kind = ' bar ', position = 0, use_index = False, width = 0,1) ax1.set_xlim ([-. 45, .2]) ax2.set_xlim (-. 45, .2]) ax1.set_xticks ([-. 35, 0 ]) ax1.set_xticklabels ([1990, 2015])

Это дает: введите описание изображения здесь

Ваша проблема заключалась в сбросе только одного предела оси, а не другого, они создаются как близнецы, но не обязательно следуют изменениям, внесенным друг в друга.

питон, панды, Matplotlib, бар-чарт,
Похожие вопросы