Я пытаюсь создать диаграмму (наложенную на линейный график с днями в качестве оси x вместо кварталов), где метки обозначают дни конца квартала. Это все хорошо, и генерирует хорошо, но я пытаюсь установить метки так, чтобы они были выровнены с правым краем графика, а правая сторона соответствующего бара была выровнена с отметкой x.
Воспроизводимый пример (только с гистограммой, а не с линией):
import matplotlib.pyplot as pyplot
import pandas
import random
random.seed(2020)
dates = pandas.date_range("2016-12-31", "2017-12-31")
bar = pandas.DataFrame([.02, .01, -0.01, .05], index = ["2017-03-31", "2017-06-30", "2017-09-30", "2017-12-31"], columns = ["test"])
line = pandas.DataFrame([random.random() for r in range(len(dates))], index = dates, columns = ["test"])
fig, ax = pyplot.subplots(1, 1, figsize = (7, 3))
ax2 = fig.add_subplot(111, frame_on = False)
bar.plot(kind = "bar", ax = ax, width = 1)
line.plot(kind = "line", ax = ax2)
ax2.set_xticks([])
ax.yaxis.tick_right()
ax.yaxis.set_label_position("right")
fig.tight_layout()
pyplot.show()
Что дает график в виде:
Моя цель выравнивание правой стороны столбца 2017-12-31 с правым краем графика, а также с правой стороны надписи 2017-12-31. Далее, левая сторона бара 2017-03-31 касается левой части графика. Что касается оставшихся столбцов, я бы хотел, чтобы они были равномерно распределены так, чтобы все метки были выровнены по правой стороне каждого столбца, и между ними не должно быть пробелов. Как этот пример ниже:
Честно говоря, я в растерянности. Я попытался добавить ha = "right", но безрезультатно, и просто сдвинул графики, но это оставляет меня с другими проблемами и на самом деле не решает проблему. Даже со смещенными барами я все еще довольно ограничен в перемещении меток тиков и не нашел в Интернете ничего, что могло бы удаленно решить проблему.
Было бы лучше создать гистограмму, чтобы она имела тот же индекс, что и на линейном графике, а затем установите метки x в качестве желаемых дат?
У кого-нибудь есть указания? Я потратил слишком много времени на эту проблему сегодня, и это сводит меня с ума.