matplotlib如何画渐变颜色的线

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matplotlib如何画渐变颜色的线相关的知识,希望对你有一定的参考价值。

参考技术A import matplotlib.pyplot as plt
cm = plt.cm.get_cmap('RdYlBu')
xy = range(20)
z = xy
sc = plt.scatter(xy, xy, c=z, vmin=0, vmax=20, s=35, cmap=cm)
plt.colorbar(sc)
plt.show()
其中get_cmap中取值可为:Possible values are: Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r, YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r...其中末尾加r是颜色取反。
参考技术B 首先,我们需要知道Matplotlib内置了哪些颜色、颜色组和渐变颜色,详细的可看官方文档颜色组及渐变颜色 和 内置命名颜色。

带有颜色渐变的 Matplotlib 3D 散点图

【中文标题】带有颜色渐变的 Matplotlib 3D 散点图【英文标题】:Matplotlib 3D scatter plot with color gradient 【发布时间】:2012-02-12 02:26:17 【问题描述】:

如何为点创建带有颜色渐变的 3D 图?请参见下面的示例,该示例适用于 2D 散点图。

编辑(感谢 Chris):我期望从 3D 图中看到的是从红色到绿色的点的颜色渐变,就像在 2D 散点图中一样。 我在 3D 散点图中看到的只是红点。

解决方案:由于某些原因(与我在别处复制的渐变示例有关),我将 xrange 设置为 len-1,这会弄乱 3D 图中的所有内容。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Create Map
cm = plt.get_cmap("RdYlGn")

x = np.random.rand(30)
y = np.random.rand(30)
z = np.random.rand(30)
#col = [cm(float(i)/(29)) for i in xrange(29)] # BAD!!!
col = [cm(float(i)/(30)) for i in xrange(30)]

# 2D Plot
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x, y, s=10, c=col, marker='o')  

# 3D Plot
fig = plt.figure()
ax3D = fig.add_subplot(111, projection='3d')
ax3D.scatter(x, y, z, s=10, c=col, marker='o')  

plt.show()

【问题讨论】:

3D 散点图有什么问题?您希望从中看到什么以及您实际看到了什么?从你编码你到Axes3D.scatter 的电话似乎没问题。 我期望从 3D 图中看到的是从红色到绿色的点的颜色渐变,就像在 2D 散点图中一样。我在 3D 散点图中看到的只是红点。 Answer to a similar question 【参考方案1】:

这是一个带有渐变色的 3d 散点图示例:

import matplotlib.cm as cmx
from mpl_toolkits.mplot3d import Axes3D
def scatter3d(x,y,z, cs, colorsMap='jet'):
    cm = plt.get_cmap(colorsMap)
    cNorm = matplotlib.colors.Normalize(vmin=min(cs), vmax=max(cs))
    scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=cm)
    fig = plt.figure()
    ax = Axes3D(fig)
    ax.scatter(x, y, z, c=scalarMap.to_rgba(cs))
    scalarMap.set_array(cs)
    fig.colorbar(scalarMap)
    plt.show()

当然,您可以选择不同值的范围,例如 0 和 1。

【讨论】:

ax.scatter(z, y, z, c=scalarMap.to_rgba(cs)) 应该是ax.scatter(x, y, z, c=scalarMap.to_rgba(cs)) @NoamPeled cs 是什么意思? 这是每个 3D 点的值。如果 colors_data 是一个 3D 矩阵,每个 3D 点都有一个值,X 是 x,y,z 坐标列表的 Nx3 矩阵,所以 cs=[colors_data[x,y,z] for x,y,z in zip (X[:, 0], X[:, 1], X[:, 2])]【参考方案2】:

以下作品:我不知道为什么你的作品没有。您应该能够将颜色设置为 RGBA 浮点数序列,或者只是浮点数序列。

# Create Map
cm = plt.get_cmap("RdYlGn")

x = np.random.rand(30)
y = np.random.rand(30)
z = np.random.rand(30)
col = np.arange(30)

# 2D Plot
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x, y, s=10, c=col, marker='o')  

# 3D Plot
fig = plt.figure()
ax3D = fig.add_subplot(111, projection='3d')
p3d = ax3D.scatter(x, y, z, s=30, c=col, marker='o')                                                                                

plt.show()

但是,在scatter的帮助下,我看到了以下内容,可能是相关的。

    A :class:`matplotlib.colors.Colormap` instance or registered
    name. If *None*, defaults to rc ``image.cmap``. *cmap* is
    only used if *c* is an array of floats.

【讨论】:

添加 ", cmap=cm" (ax3D.scatter(x, y, z, s=30, c=col, marker='o', cmap=cm)) 到散射函数 I在 3D 散点图中也有颜色渐变。我现在想念的似乎是深度,但我想我不能两者兼得。 你没有深度是什么意思?

以上是关于matplotlib如何画渐变颜色的线的主要内容,如果未能解决你的问题,请参考以下文章

带有颜色渐变的 Matplotlib 3D 散点图

请问各位大师,怎么用WPF沿着曲线颜色渐变啊!

在 matplotlib 中使用颜色作为渐变进行绘图

是否可以使用 matplotlib 实现表面图的连续颜色渐变?

css画长方形颜色各一半怎么画

如何以编程方式从Android上的渐变中获取颜色列表