【问题标题】:How to display axis tick labels over plotted values using matplotlib and seaborn?如何使用 matplotlib 和 seaborn 在绘图值上显示轴刻度标签?
【发布时间】:2019-09-11 12:17:25
【问题描述】:

我正在使用 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)

生成的情节如下:

但所需的输出应该是这样的:

提前感谢您的任何建议或帮助!

【问题讨论】:

    标签: python matplotlib seaborn scatter-plot


    【解决方案1】:

    您需要两件事:zorder 和一个用于刻度标签的 bold 权重。散点的zorder 需要低于刻度标签的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)
    

    【讨论】:

    • 谢谢!参数 zorder 是我的问题的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 2015-09-02
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2015-10-14
    相关资源
    最近更新 更多