python错误-NameError: name ‘ax‘ is not defined-如何采用相对坐标绘制plt.text对象?

一、参考来源

使用plt.text()方法在添加文本时,如何控制文本在图像中的位置?_FanG-3-的博客-CSDN博客_matplotlib text位置

二、问题背景

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 10, 1)
y = x ** 2
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.plot(x, y)
plt.text(0.5, 0.5, s="文本在这里", transform=ax.transAxes)
plt.show()
————————————————
版权声明:本文为CSDN博主「FanG-3-」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36766000/article/details/109532134

因为想要给图片加一个由相对坐标定义的文本,所以找了参考来源的那篇文章(代码如上),通过在plt.text函数中调整transform参数即可解决。

plt.text(0.5, 0.5, s="文本在这里", transform=ax.transAxes)

于是我也在我的代码中加了这个参数,并设置为 ax.transAxes,运行——>就出错了。

下面是我的原代码:

#!/usr/bin/python
# coding: utf-8

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 10, 1)

layout = [False, True]
nbins = np.repeat([10], repeats=2)

for i, (n, lay) in enumerate(zip(nbins, layout)):
    plt.subplot(1, 2, 1 + i)
    plt.plot(x, x)
    plt.text(0.0, 1.05, f'ytight={lay},ynbins={n}', fontsize=15, transform=ax.transAxes)
    plt.locator_params("y", tight=lay, nbins=n)
    plt.locator_params("x", nbins=5)
plt.show()

报错【NameError: name 'ax' is not defined】。

可是!我发现参考来源的代码也没有定义ax呀,那我的为啥出错了呢?

于是我拷贝他的代码,运行——>也出错了.......好家伙,原来是错误的示例。

但是,transform这个参数的调整,思路绝对是没问题的。

三、解决方法

经过一连串的搜索,我找到了下面这位大牛,跟大牛畅谈片刻,心领神会。

Python 画图采用归一化坐标确定 text 位置_泡泡龙的村的博客-CSDN博客_python text位置

于是我就在自己的代码中加了 ax = plt.gca(),也就是将当前的subplot子图赋予给ax。

下面是更改后的代码:

#!/usr/bin/python
# coding: utf-8

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 10, 1)

layout = [False, True]
nbins = np.repeat([10], repeats=2)

for i, (n, lay) in enumerate(zip(nbins, layout)):
    plt.subplot(1, 2, 1 + i)
    plt.plot(x, x)
    ax = plt.gca()
    plt.text(0.0, 1.05, f'ytight={lay},ynbins={n}', fontsize=15, transform=ax.transAxes)
    plt.locator_params("y", tight=lay, nbins=n)
    plt.locator_params("x", nbins=5)
plt.show()

再运行就成功了。

 

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值