Укажите запас по оси данных в matplotlib - PullRequest
0 голосов
/ 14 января 2020

У меня есть серия графиков с категориальными данными по оси Y. Кажется, что дополнительное поле между осью и данными коррелирует с количеством категорий на оси у. Если имеется много категорий, появляется дополнительный запас, но если их немного, запас настолько мал, что точки данных сокращаются. Сюжеты выглядят так:

Сюжет с несколькими категориями и слишком малым полем:

image

Сюжет с множеством категорий и слишком большие поля (кликните для просмотра в полном размере):

image

For now, I only found solutions to manipulate the white space around the plot, like bbox_inches='tight' or fig.tight_layout(), but this doesn't solve my problem. I don't have such problems with the x-axis, can this be a question of x-axis containing only numerical values and y-axis categorical data?

The code I'm using to generate all the plots looks like this:

sns.set(style='whitegrid')
plt.xlim(left=left_lim, right=right_lim)
plt.xticks(np.arange(left_lim, right_lim, step))
plot = sns.scatterplot(method.loc[:,'Len'], 
                       method.loc[:,'Bond'],
                       hue = method.loc[:,'temp'],
                       palette= palette,
                       legend = False, 
                       s = 50)

set_size(width, height)
plt.savefig("method.png", dpi = 100, bbox_inches='tight', pad_inches=0)
plt.show()

The set_size() comes from the first answer to Класс осей - установите явно размер (ширину / высоту) осей в заданных единицах .

1 Ответ

2 голосов
/ 14 января 2020

Мы можем немного адаптировать функцию из Класс осей - установить явно размер (ширину / высоту) осей в заданных единицах , чтобы добавить строку, устанавливающую поля осей.

import matplotlib.pyplot as plt

def set_size(w,h, ax=None, marg=(0.1, 0.1)):
    """ w, h: width, height in inches """
    if not ax: ax=plt.gca()
    l = ax.figure.subplotpars.left
    r = ax.figure.subplotpars.right
    t = ax.figure.subplotpars.top
    b = ax.figure.subplotpars.bottom
    figw = float(w)/(r-l)
    figh = float(h)/(t-b)
    ax.figure.set_size_inches(figw, figh)
    ax.margins(x=marg[0]/w, y=marg[1]/h)

И назовите это с

set_size(width, height, marg=(xmargin, ymargin))

, где xmargin, ymargin - поля в дюймах.

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