我已经为此苦苦挣扎了几个小时。我想要做的是生成一个列表,其中包含后面带有“dB”的数字(即 0dB、1dB、2dB...高达 8dB)。这是为了让我不必为正在制作的情节手动输入每个标签。
我首先尝试的是:
cb.ax.set_yticklabels([x + 'dB' for x in str(np.arange(0, 9))])
但是,这似乎完全弄乱了我的标签。因此,我采用了一种更长的方法来准确地了解这种理解产生了什么:
crange = np.arange(0,9)
crangedb = [x + 'dB' for x in str(crange)]
print crange
print crangedb
输出:
[0 1 2 3 4 5 6 7 8]
['[dB', '0dB', ' dB', '1dB', ' dB', '2dB', ' dB', '3dB', ' dB', '4dB', ' dB', '5dB', ' dB', '6dB', ' dB', '7dB', ' dB', '8dB', ']dB']
因此,虽然我的数字列表很好(正如预期的那样),但一旦我尝试使用列表理解将 dB 附加到每个数字,每个值都散布着空白值或括号。从我用 Google 搜索过的每个页面来看,我的语法似乎都是正确的,所以我一定是遗漏了一些非常简单或非常小的东西。
请您参考如下方法:
您正在将 np.arange 转换为基本上是 "[1 2 3 4...]" 的字符串,然后迭代每个字符。这意味着 x=['[','0',' ',...]。正确的行应该是:
cb.ax.set_yticklabels([str(x) + 'dB' for x in np.arange(0, 9)])
现在您正在将 np.ndarray 的每个项目映射到一个字符串,并将其与 'dB' 连接起来。
