Странное поведение при рендеринге тиков оси X

Я строю график в matplotlib с помощью метода панды df.plot(), но почему-то метки тиков на оси X кажутся перепутанными. Кажется, что есть слой числового текста над моими "настоящими" тиковыми метками. Я понятия не имею, откуда это берется. Как ни странно, это происходит только в нашей производственной среде и среде постановки, но не в dev. Возможно, это также связано с gunicorn или dev-сервером django. Кто-нибудь уже сталкивался с подобным?

Вот результат построения графика:

plot output

и вот вывод, когда я очищаю тики с помощью .set_xticks([], []):

plot output with cleared x-axis

Вот часть моего кода, есть некоторая абстракция, но я думаю, что это должно быть понятно. self.data это pandas dataframe. Он выводит данные png в base64-кодировке:

class Line(ChartElement):
    def draw(self):
        self._plot = self.data.plot(kind='line', color=self.colors)
        self._rotation = 'vertical'
        self._horizontalalignment='center'
        # self._plot.set_xticks([], [])

# ...

class ChartElement():
    # ...
    def base64(self):
        self.draw()
        figfile = BytesIO()
        if not self._plot:
            raise ValueError("Plot not generated.")
        if self._legend:
            self._plot.legend(self._legend, **self._legend_args)

            #plt.legend(self._legend, loc='upper center', bbox_to_anchor=(0.4, .05), ncol=5, fancybox=False, prop={'size': 6})

        plt.setp(self._plot.get_xticklabels(), rotation=self._rotation, horizontalalignment=self._horizontalalignment, fontsize=8)
        self._plot.set_ylabel(self.y_title)
        self._plot.set_xlabel(self.x_title)
        #plt.figure()
        fig = self._plot.get_figure()
        fig.autofmt_xdate()
        if self.size and isinstance(self.size, list):
            fig.set_size_inches(inch(self.size[0]), inch(self.size[1]))
        fig.savefig(figfile, format='png', bbox_inches='tight')
        figfile.seek(0)
        figdata_png = base64.b64encode(figfile.getvalue())
        plt.clf()
        plt.cla()
        plt.close('all')
        plt.close()
        return figdata_png.decode('utf8')

Мне удалось решить эту проблему, и это была моя вина :). Я как-то упустил из виду мажорные и минорные тики. Я исправил это, отключив метки минорных тиков сразу после метода self.draw():

self._plot.tick_params(axis='x', which='minor', bottom=True, top=False, labelbottom=False)

Это не объясняет, почему они не отображаются в среде dev, но пока все в порядке. Возможно, разные настройки по умолчанию!

Вернуться на верх