因为有很多不同的颜色图,我想在下面的函数中设置一个参数作为彩色地图的名称,它允许用户选择他们最喜欢的颜色地图,如'viridis',‘等离子’,‘冬天’,‘凉爽’等等。
def my_plot(cm_name):
# setup the normalization and the colormap
nValues = np.array(np.linspace(1, 50, 50))
normalize = mcolors.Normalize(vmin=nValues.min(), vmax=nValues.max())
colormap = cm.cm_name
# setup the colorbar
sm = cm.ScalarMappable(norm=normalize, cmap=colormap)
sm.set_array(nValues)
# below is the code for plotting但是,当我定义上面所示的绘图函数时,当我调用my_plot(viridis)时,会弹出一条错误消息:
NameError: name 'viridis' is not defined有人能帮我吗?谢谢!
发布于 2019-10-02 18:21:09
您的函数只能接受字符串作为参数,但是cm.cm_name是一个属性。您不能通过编写viridis来访问cm的属性cm.'viridis'。
这是getattr的完美用例,它接受对象和字符串,并返回该对象的属性,该对象的名称与传递给getattr的字符串相同。
换行
colormap = cm.cm_name至
colormap = getattr(cm, cm_name)并使用表示颜色映射的字符串(而不是变量)调用函数:
my_plot('viridis')发布于 2019-10-02 18:16:52
颜色映射的名称应该是string,因此您需要像my_plot("viridis")一样调用它。如果省略引号,python认为viridis是要传入的变量的名称,然后抱怨没有告诉它这个变量是什么。
https://stackoverflow.com/questions/58207088
复制相似问题