Отрегулируйте масштаб сетки по оси X и масштаб по оси Y в методе Seaborn PairGrid - PullRequest
0 голосов
/ 12 января 2020

Я изо всех сил пытаюсь получить правильную шкалу оси X и оси Y для моего графика Seaborn PairGrid.
Код:

x = sns.PairGrid(iris, hue='species')
x = x.map_diag(plt.hist)
x = x.map_offdiag(plt.scatter)
x = x.add_legend()

График: enter image description here

График, который я хочу: enter image description here

Как вы можете видеть, график 2 гораздо более информативен при правильном и более подходящем масштабе оси x и оси y шкала. Я уже пытался установить различные значения высоты, но ничего не дало мне результаты, подобные графику 2.

Ответы [ 2 ]

1 голос
/ 12 января 2020

Нижний участок выполнен в стиле classi c.

from matplotlib import pyplot as plt
plt.style.use("classic")
import seaborn as sns
sns.set()

iris = sns.load_dataset("iris")


x = sns.PairGrid(iris, hue='species')
x = x.map_diag(plt.hist)
x = x.map_offdiag(plt.scatter)
x = x.add_legend()

plt.show()

enter image description here

1 голос
/ 12 января 2020

Вы можете эффективно изменить свойства всех подзаговоров, используя PairGrid.set(). Однако, если вы хотите более или менее индивидуально изменить каждый подзаговор, у вас не останется иного выбора, кроме как l oop на каждом из участков и изменить их свойства в соответствии с вашими потребностями.

Вот что я бы сделал в вашем case:

order = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
lims = [(4, 8.5), (1.5, 5), (0, 8), (-0.5, 3)]
tick_inc = [0.5, 0.5, 1, 0.5]

sns.set()
iris = sns.load_dataset("iris")
g = sns.PairGrid(iris, hue="species", vars=order)
g = g.map_diag(plt.hist)
g = g.map_offdiag(plt.scatter)
g = g.add_legend()

loc = matplotlib.ticker.MultipleLocator(0.5)

for ax,(ylims, xlims),(yticks, xticks) in zip(g.axes.flat, 
                                              itertools.product(lims, lims),
                                              itertools.product(tick_inc, tick_inc)
                                             ):
    ax.set_xlim(xlims)
    ax.set_ylim(ylims)
    ax.xaxis.set_major_locator(matplotlib.ticker.MultipleLocator(xticks))
    ax.yaxis.set_major_locator(matplotlib.ticker.MultipleLocator(yticks))

enter image description here

...