首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >matplotlib:自定义绘图函数的颜色图选择

matplotlib:自定义绘图函数的颜色图选择
EN

Stack Overflow用户
提问于 2019-10-02 18:13:16
回答 2查看 129关注 0票数 0

因为有很多不同的颜色图,我想在下面的函数中设置一个参数作为彩色地图的名称,它允许用户选择他们最喜欢的颜色地图,如'viridis',‘等离子’,‘冬天’,‘凉爽’等等。

代码语言:javascript
运行
复制
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)时,会弹出一条错误消息:

代码语言:javascript
运行
复制
NameError: name 'viridis' is not defined

有人能帮我吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-02 18:21:09

您的函数只能接受字符串作为参数,但是cm.cm_name是一个属性。您不能通过编写viridis来访问cm的属性cm.'viridis'

这是getattr的完美用例,它接受对象字符串,并返回该对象的属性,该对象的名称与传递给getattr的字符串相同。

换行

代码语言:javascript
运行
复制
colormap = cm.cm_name

代码语言:javascript
运行
复制
colormap = getattr(cm, cm_name)

并使用表示颜色映射的字符串(而不是变量)调用函数:

代码语言:javascript
运行
复制
my_plot('viridis')
票数 0
EN

Stack Overflow用户

发布于 2019-10-02 18:16:52

颜色映射的名称应该是string,因此您需要像my_plot("viridis")一样调用它。如果省略引号,python认为viridis是要传入的变量的名称,然后抱怨没有告诉它这个变量是什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58207088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档