Обертывание маторлотиборн по оси X не работает - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь обернуть свою ось х, но она все еще перекрывается. Я не знаю, что происходит. Не уверен, если мне нужно отрегулировать пространство для высоты оси х ... но если я это сделаю, я не знаю, как это сделать. Можете ли вы указать мне правильное направление. Спасибо

       import pandas as pd
        from matplotlib import pyplot as plt
        import matplotlib as mpl
        import seaborn as sns
        import textwrap

            myvalues= {
                'my_labels': [ 'Title one' ,'Title two extend' ,'Title three extend' ,'Title four extend' ,'Title five extend' ,'Title six extend' ,'Title seven extend'],
                'val_1': [1,1,1,1,1,6,7],
                'val_2': [3,6,3,5,7,1,9],
                'val_3' : [5,5,2,4,4,5,4]
            }

            data = pd.DataFrame(myvalues, columns=['my_labels', 'val_1', 'val_2', 'val_3' ])

            sns.set_context({"figure.figsize": (18, 10)})
            ax=sns.barplot(x = data.my_labels, y = data.val_1, color = "#001a7b")
            ax.set_xticklabels(['\n'.join(textwrap.wrap(ticklabel.get_text(),9)) for ticklabel in ax.get_xticklabels()])
            ax.set(ylim=(0,3))
#edit:    
    axis2 = plt.twinx()
    axis2.set(ylim=(0, 16))
    axis2.grid(False)

    line_1 = sns.lineplot(x = data.my_labels, y = data.val_1, color = "#E4521B", lineWidth=3, marker="o", ax=axis2, sort=False)

РЕДАКТИРОВАТЬ: обновленный код с линией на верхней части столбцов. Когда я удаляю это, этикетки обертываются, иначе это возвращается к одной строке

1 Ответ

0 голосов
/ 27 марта 2020

В строке

ax.set_xticklabels(['\n'.join(textwrap.wrap(t.get_text(),9)) for x in ax.get_xticklabels()])
# why two different variables?              ^                    ^
#                                           |                    |

вы перебираете метки как x, но затем вызываете метод get_text() переменной с именем t. Вы должны написать

ax.set_xticklabels(['\n'.join(textwrap.wrap(ticklabel.get_text(),9)) for ticklabel in ax.get_xticklabels()])

РЕДАКТИРОВАТЬ

В ответ на ваш недавно измененный вопрос, вызов lineplot() перезаписывает метку, которую вы установили ранее. Чтобы преодолеть эту проблему, просто переместите строку ax.set_xticklabels(...) после sns.lineplot()

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