Выровняйте метки по оси X дополнительного подпункта с метками по оси X объекта FacetGrid. - PullRequest
0 голосов
/ 21 марта 2020

Я хочу добавить вторую ось X к моему FacetGrid объекту. Мне удалось создать вторую ось X, добавив к моей фигуре второй подзаговор, который находится ниже первой оси, следуя советам этого поста . Тики моей второй оси абсцисс должны совпадать с горизонтальным расположением отметок верхней оси абсцисс. Однако, в отличие от упомянутого выше поста, при использовании seaborn.catplot отметки оси X фигуры FacetGrid точно не совпадают с началом и концом оси X. Вместо этого seaborn.catplot 'сжимает' отметки оси X, так что первый и последний отметки не совпадают по горизонтали с началом и концом оси X. В результате нельзя просто установить отметки оси X добавленного субплота, используя get_xticks и set_xticks.

Вот пример кода:

import numpy as np
import pandas as pd
import seaborn as sns

# simulate data
rng = np.random.RandomState(42)
measure_names = np.tile(np.repeat(['Train BAC','Test BAC'],10),4)
model_numbers = np.repeat([0,1,2,3],20)
measure_values = np.concatenate((rng.uniform(low=0.6,high=1,size=40),
                                rng.uniform(low=0.5,high=0.8,size=40)
                                ))
folds=np.tile([1,2,3,4,5,6,7,8,9,10],8)

plot_df = pd.DataFrame({'model_number':model_numbers,
                        'measure_name':measure_names,
                        'measure_value':measure_values,
                        'outer_fold':folds})

# plot data as pointplot
g = sns.catplot(x='model_number',
                y='measure_value',
                hue='measure_name',
                kind='point',
                seed=rng,
                data=plot_df)

ax2 = g.axes[0,0].twiny()

# Move twinned axis ticks and label from top to bottom
ax2.xaxis.set_ticks_position("bottom")
ax2.xaxis.set_label_position("bottom")

# Offset the twin axis below the host
ax2.spines["bottom"].set_position(("axes",-0.30))

# set title
ax2.set_xlabel('Title of the second axis')

# get ticks of FacetGrid ax
xtickslocs = g.axes[0,0].get_xticks()

# set ticks of ax2 to first ax
ax2.set_xticks(xtickslocs)

, который производит:

enter image description here

1 Ответ

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

Просто соответствует пределам оси X

ax2.set_xlim(g.axes[0,0].get_xlim())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...