Как отобразить метки осей на графике с помощью matplotlib и seaborn? - PullRequest
1 голос
/ 22 апреля 2019

Я использую matplotlib и seaborn, чтобы разбросать график некоторых данных, содержащихся в двух массивах, x и y, (2-мерный график). Проблема здесь в том, что когда дело доходит до отображения меток обеих осей над данными, потому что данные, нанесенные на график, перекрывают значения, поэтому они невидимы.

Я пробовал разные возможности, такие как сброс меток после завершения построения графика и их установка позже или использование аннотаций. В любом случае любой из этих вариантов работал для меня ...

Кусок кода, который я использую для создания этого точечного графика:

sns.set_style("whitegrid")

ax = sns.scatterplot(x=x, y=y, s=125)

ax.set_xlim(-20, 20)
ax.set_ylim(-20, 20)

ax.spines['left'].set_position('zero')
ax.spines['left'].set_color('black')

ax.spines['right'].set_color('none')
ax.yaxis.tick_left()

ax.spines['bottom'].set_position('zero')
ax.spines['bottom'].set_color('black')

ax.spines['top'].set_color('none')
ax.xaxis.tick_bottom()

values = ax.get_xticks()
ax.set_xticklabels(["{0:.0%}".format(x/100) for x in values])

values = ax.get_yticks()
ax.set_yticklabels(["{0:.0%}".format(y/100) for y in values])

ax.tick_params(axis='both', which='major', labelsize=15)

ax.grid(True)

Сгенерированный участок выглядит следующим образом: generated scatter plot

Но желаемый результат должен выглядеть примерно так: desired scatter plot

Заранее благодарю за любой совет или помощь!

1 Ответ

2 голосов
/ 22 апреля 2019

Вам нужны две вещи: zorder и вес bold для ярлыков.zorder точек разброса должно быть ниже, чем у меток, чтобы последние появлялись сверху.'fontweight': 'bold' должно иметь метки, выделенные жирным шрифтом.

Ось кажется смещенной от 0, но это потому, что вы не предоставили никаких данных.Поэтому я должен выбрать случайные данные

# import commands here

x = np.random.randint(-100, 100, 10000)
y = np.random.randint(-100, 100, 10000)
ax = sns.scatterplot(x=x, y=y, s=125, zorder=-1)

# Rest of the code

values = ax.get_xticks()
ax.set_xticklabels(["{0:.0%}".format(x/100) for x in values], fontdict={'fontweight': 'bold'})

values = ax.get_yticks()
ax.set_yticklabels(["{0:.0%}".format(y/100) for y in values], fontdict={'fontweight': 'bold'})

ax.tick_params(axis='both', which='major', labelsize=15, zorder=1)
ax.grid(True)

enter image description here

...