python - 我可以从颜色列表和 for 循环中绘制颜色条吗?

标签 python matplotlib plot colorbar

这是我正在处理的部分 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 循环生成散点图,颜色来自列表 trace_color。我的问题是我是否可以生成一个颜色条,其中颜色来自 trace_color ,颜色条上的标签(比例)来自 range(cycles) 。我尝试在 for 循环之后添加 plt.colorbar() 但没有成功。谢谢!!

最佳答案

Matplotlib 的颜色条需要一个 ScalarMappable 对象。默认情况下,它取自绘制的内容,例如在一次调用中创建的散点图。如果您需要合并多个调用的结果,您可以创建自己的ScalarMappable。它需要一个颜色图和 a 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()

custom colorbar

请注意,在这种情况下,您可以一次性创建散点图,从而启用默认颜色条。为此,可以在每个周期重复扫描点,并且可以通过平铺每个扫描点的周期来指示颜色。

如果您只想显示真正使用的颜色,可以在创建颜色图时添加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()

scatterplot in one go

关于python - 我可以从颜色列表和 for 循环中绘制颜色条吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72525260/

相关文章:

子标签的python sax xml名称

python - 是否有任何方法可以调整整个图的大小以及 matplotlib 或 seaborn 中的字体大小和线宽?

python-2.7 - Python如何绘制正弦波图

python - 绘制 Windrose : making a pollution rose with concentration set to color

r - Circlize 迁移图缺少链接

python - 什么时候反射(reflection)不再值得?

python - 如何将多类别数据框绘制为单个箱线图

python - 解析 HTML 以检索术语

python - Matplotlib 通过颜色或形状区分均值和中值

python - Matplotlib 和日期时间错误 date2num 函数 AttributeError