python - 如何使用 matplotlib 和 seaborn 在绘图值上显示轴刻度标签?
问题描述
我正在使用 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)
提前感谢您的任何建议或帮助!
解决方案
您需要两件事: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)
推荐阅读
- python - 在pycharm中,如何增加每个py文件运行时的内存?
- react-native - 使用 useEffect 和 async/await 将数据提取到 redux 第一次不起作用
- mysql - 是否可以只将一列粘贴到mysql中的另一个表?
- swift - SCNView 侧边框在用户交互期间消失
- python - 有没有一种简单的方法来创建与 python 统一的游戏相关功能?
- r - 如何将列表中的多个向量迭代地存储到数据框列表中的适当列中?
- database - 什么是双向关系
- blazor-server-side - 使用 Blazor 服务器自动刷新
- javascript - Javascript - 如何展平数组中数组的第一个位置值?
- r - R从网站下载csv文件(R-curl)