繁体   English   中英

我可以从 colors 和 for 循环的列表中 plot 一个颜色条吗?

[英]Can I plot a colorbar from a list of colors and for loop?

这是我正在处理的 Python 代码的一部分:

cm = LinearSegmentedColormap.from_list('defcol', ["#000000", "#FF0000"])
trace_color = cm(np.linspace(0,1,cycles))
for k, color in zip(range(cycles),trace_color):
        lis = KL_rest[k::cycles]
        plt.scatter(scanpoints, lis, color = color, marker = '^', alpha = 0.9)

在这里,我使用 for 循环生成散点图 plot,而 colors 来自列表trace_color 我的问题是我是否可以生成一个颜色条,其中 colors 来自trace_color并且颜色条上的标签(比例)来自range(cycles) 我试图在 for 循环之后添加plt.colorbar()但这没有用。 谢谢!!

Matplotlib 的颜色条需要一个ScalarMappable object。默认情况下,它取自绘制的内容,例如在一次调用中创建的散点图 plot。 如果您需要组合多个调用的结果,您可以创建一个自己的ScalarMappable 它需要一个 colormap 和一个 norm

from matplotlib import pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
from matplotlib.cm import ScalarMappable
import numpy as np

cycles = 7
N = 100
KL_rest = np.sin(np.linspace(0, 10 * np.pi, cycles * N))
scanpoints = np.arange(N)
cm = LinearSegmentedColormap.from_list('defcol', ["#000000", "#FF0000"])
trace_color = cm(np.linspace(0, 1, cycles))
for k, color in zip(range(cycles), trace_color):
    lis = KL_rest[k::cycles]
    plt.scatter(scanpoints, lis, color=color, marker='^', alpha=0.9)
plt.colorbar(ScalarMappable(cmap=cm, norm=plt.Normalize(0, cycles - 1)), ticks=np.arange(cycles), label='cycles')
plt.show()

自定义颜色条

请注意,在这种情况下,您可以在一个 go 中创建散点图 plot,启用默认颜色条。 为此,可以为每个循环重复扫描点,并且可以通过为每个扫描点平铺循环来指示scanpoints

如果只想显示真正使用过的 colors,可以在颜色 map 的创建中添加N=cycles 。要将每个数字的刻度线放在单元格的中心,可以将默认限制移动0.5

from matplotlib import pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import numpy as np

cycles = 7
N = 100
KL_rest = np.sin(np.linspace(0, 10 * np.pi, cycles * N))
scanpoints = np.arange(N)
cm = LinearSegmentedColormap.from_list('defcol', ["#000000", "#FF0000"], N=cycles)

plt.scatter(np.repeat(scanpoints, cycles), KL_rest,
            c=np.tile(range(cycles), len(scanpoints)),
            cmap=cm, norm=plt.Normalize(-0.5, cycles - 0.5),
            marker='^', alpha=0.9)
plt.colorbar(ticks=np.arange(cycles), label='cycles')
plt.show()

一次性绘制散点图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM