【发布时间】:2019-08-16 22:25:29
【问题描述】:
我有一个 2d numpy 数组 txtStrs 包含我作为文本写入 matplotlib 图形轴 ax 的字符串,例如
ax.text( posX, posY, txtStrs[0,0] )
稍后,我想更新这些文本(相同的位置、颜色等)而不重绘整个图形。因此,我将文本对象保存到另一个 numpy 数组中。
当我现在想更新文本时,我使用了两个 for 循环
import numpy as np
import matplotlib.pyplot as plt
siz = 20
txtStrs = np.empty( (siz, siz), dtype = str )
txtObjs = np.empty( (siz, siz), dtype = object )
plt.figure()
ax = plt.gca()
for x in range(siz):
for y in range(siz)):
txtObjs[x,y] = ax.text( x, y, "" )
#Fill txtStrs with some string values
for x in range(siz):
for y in range(siz)):
txtObjs[x,y].set_text( txtStrs[x,y] )
最后一个 for 循环对我来说似乎是不必要的,也不是真正的 Pythonic。如果我不需要调用 set_text 方法,我可以使用 numpy 的内在理解来进行更新。
我的问题是:还有其他方法可以将txtStrs 传递给txtObjs,例如使用矢量化、列表理解或其他方法?
【问题讨论】:
-
你为什么要使用
numpy.ndarray对象? -
小心
dtype=str,相当于U1,一个字符串! -
当您创建
text(带有ax.text)时,ax会将其附加到自己的.texts列表中。我不建议直接使用它,但它证明你不应该回避在列表(或列表列表)中保留自己的text对象(和字符串)。 -
@hpaulj 你的意思是列表而不是二维数组?我希望有一些智能编译的 numpy 功能......(我在这里使用
dtype=str只是为了缩短 sn-p)
标签: python numpy matplotlib iteration