#python #python-3.x #seaborn
#python #python-3.x #seaborn
Вопрос:
Я пытаюсь построить 3×3 sns.PairGrid
графиков. В настоящее время оси являются общими для нижнего треугольника и верхнего треугольника отдельно. Другими словами, оси x и оси y являются общими только для их соответствующих столбцов / строк. Таким образом, ось x графика (1,0)
совместно используется с (0,0)
и (2,0)
.
Однако я бы хотел, чтобы все недиагональные графики разделяли свои оси. Так, например, я хочу (1,0)
разделить его ось x с (0,0)
и (2,0)
, как и раньше, но также и с (0,1)
.
Кроме того, я бы предпочел, чтобы оси y не использовались совместно с графиками по диагонали, поскольку это одномерные графики плотности ядра, и поэтому, если я разделю их оси y, некоторые из них будут невидимы, поскольку размер функций плотности вероятности не одинаков.
Вот мой текущий код, если это поможет:
3 параметра, которые я строю друг против друга, называются «A», «C» и «logsw» и содержатся в pandas.DataFrame
вызываемом hyperparams
g = sns.PairGrid(hyperparams, diag_sharey=False)
g.map_lower(sns.kdeplot)
g.map_upper(plt.scatter, marker=' ')
g.map_diag(sns.kdeplot)
И вот тривиальный пример выходного графика:
Изображения в левом нижнем углу масштабируются иначе, чем изображения в правом верхнем углу, чего я и пытаюсь избежать.
Комментарии:
1. Одна вещь, которую вы могли бы сделать, это нарисовать диаграмму рассеяния с альфа = 0 в нижнем треугольнике. Это должно привести к тому, что автоматические ограничения осей будут установлены одинаково (при условии, что ограничения countour всегда более жесткие, чем ограничения разброса, которые, я думаю, будут базовыми.
2. Извините, если это глупый вопрос, но что делает alpha = 0?
3. «альфа» — это «синоним» непрозрачности. Это, по сути, нарисует невидимую диаграмму рассеяния.
4. @mwaskom Привет, извините, что возвращаюсь к этому после такого долгого времени, но я попробовал то, что вы предложили, добавив a
g.map_lower(plt.scatter, alpha=0)
, и, к сожалению, это, похоже, не соответствует ограничениям осей.5. Вы все еще ищете ответ на этот вопрос? на высоком уровне вы можете вручную установить пределы x и y и отметки. Вы также можете установить переменные для того, что вы хотите разделить, а затем просто повторно использовать переменную в 3 подобных подзаголовках. Таким образом, если вам нужно внести коррективы, вы просто обновляете переменную, и 3 графика, которые ее разделяют, теперь обновляются одновременно. Я только что создал код для парной сетки, где я устанавливаю ограничения и отметки для всех подзаголовков вдоль оси y и всех графиков вдоль оси x. Если вы считаете, что этот пример может вам помочь, проверьте эти комментарии и дайте мне знать, и я опубликую его
Ответ №1:
На высоком уровне вы можете вручную установить пределы x и y и отметки. Вы также можете установить переменные для того, что вы хотите разделить, а затем просто повторно использовать переменную в 3 подобных подзаголовках.
Таким образом, если вам нужно внести коррективы, вы просто обновляете переменную, и 3 графика, которые ее разделяют, теперь обновляются одновременно.
В прошлом я создавал код для парной сетки, где я устанавливал ограничения и отметки для всех подзаголовков вдоль оси y и всех графиков вдоль оси x таким образом.
Комментарии:
1. Вы можете удалить свой комментарий под вопросом, он устарел и может отвлечь вас от правильного ответа
2. Вы можете использовать
set
метод в PairGrid, который устанавливает свойство для всех участков. Например,g.set(xlim=[-1,1], ylim=[-1,1])
.
Ответ №2:
В настоящее время нет способа автоматически сделать это в Seaborn. Обходной путь, предложенный в комментарии, который, похоже, решил проблему, заключается в том, чтобы вручную установить ограничения осей для диагональных подзаголовков. Использование переменных для пределов x и y гарантирует, что их нужно изменять только в одном месте при обновлении диапазонов осей.