创建数组colour用html,python – 如何从matplotlib中的简单数组生成一个colormap数组...

在matplotlib的一些函数中,我们必须传递一个颜色参数而不是一个cmap参数,比如bar3d.

所以我们必须手动生成Colormap.如果我有这样的dz数组:

dz = [1,2,3,4,5]

我想要的是:

ax.bar3d(xpos, ypos, zpos, dx, dy, dz, color=cm.jet(dz), zsort='average')

但是,它不起作用,似乎Colormap实例只能转换规范化数组.

>>> dz = [1,2,3,4,5]

>>> cm.jet(dz)

array([[ 0. , 0. , 0.51782531, 1. ],

[ 0. , 0. , 0.53565062, 1. ],

[ 0. , 0. , 0.55347594, 1. ],

[ 0. , 0. , 0.57130125, 1. ],

[ 0. , 0. , 0.58912656, 1. ]])

当然,这不是我想要的.

我必须做这样的事情:

>>> cm.jet(plt.Normalize(min(dz),max(dz))(dz))

array([[ 0. , 0. , 0.5 , 1. ],

[ 0. , 0.50392157, 1. , 1. ],

[ 0.49019608, 1. , 0.47754586, 1. ],

[ 1. , 0.58169935, 0. , 1. ],

[ 0.5 , 0. , 0. , 1. ]])

代码有多难啊!

Typically Colormap instances are used to convert data values (floats)

from the interval [0, 1] to the RGBA color that the respective

Colormap represents. For scaling of data into the [0, 1] interval see

matplotlib.colors.Normalize. It is worth noting that

matplotlib.cm.ScalarMappable subclasses make heavy use of this

data->normalize->map-to-color processing chain.

那么为什么我不能只使用cm.jet(dz)?

这是我正在使用的导入

from mpl_toolkits.mplot3d import Axes3D

import matplotlib.pyplot as plt

import numpy as np

from matplotlib import cm

解决方法:

您的问题的答案在您复制到问题中的文档的snipplet中给出:

…from the interval [0, 1] to the RGBA color…

但如果你发现你的代码很难看,你可以试着让它变得更好:

>您不必手动指定规范化的限制(如果您打算使用min / max):

norm = plt.Normalize()

colors = plt.cm.jet(norm(dz))

>如果你发现那个丑陋(我不明白为什么),你可以继续手动操作):

colors = plt.cm.jet(np.linspace(0,1,len(dz)))

然而,这是解决方案仅限于等间距的颜色(在您的示例中,这是您想要的dz.

>然后你也可以复制Normalize的功能(因为你似乎不喜欢它):

lower = dz.min()

upper = dz.max()

colors = plt.cm.jet((dz-lower)/(upper-lower))

>使用辅助函数:

def get_colors(inp, colormap, vmin=None, vmax=None):

norm = plt.Normalize(vmin, vmax)

return colormap(norm(inp))

现在您可以像这样使用它:

colors = get_colors(dz, plt.cm.jet)

标签:python,matplotlib

来源: https://codeday.me/bug/20190612/1223579.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值