如何使用matplotlib和seaborn在绘制的值上显示轴刻度标签?

时间:2019-04-22 09:24:00

标签: python matplotlib seaborn scatter-plot

我正在使用matplotlib和seaborn来散布两个数组x和y中包含的一些数据(二维图)。这里的问题是,要在数据上同时显示两个轴标签,因为绘制的数据与值重叠,因此看不到。

我尝试了各种可能性,例如在绘制完成后重置标签并稍后进行设置,或者使用注释标记。无论如何,这些选择都对我有用...

我用来生成散点图的代码是:

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 个答案:

答案 0 :(得分:2)

您需要两件事:勾号标签的权重为zorderbold。分散点的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