Hướng dẫn python continuous colorbar - thanh màu liên tục python

Mục tiêu là tạo ra một colormap liên tục từ các cặp giá trị cụ thể và màu RGB.

Example:

values = [1, 5, 10, 20]
colors = [(3, 40, 252), (252, 3, 20), (252, 223, 3), (35, 224, 13)]

Giả sử tôi muốn có được màu cho giá trị 15, màu được lấy sẽ là sự pha trộn mờ nhạt của (252, 223, 3) và (35, 224, 13). Trong trường hợp của tôi, màu sẽ là (143, 223, 8). Tôi muốn có được màu chính xác cho các giá trị từ 1 đến 20.

Bạn có thể chạy mã này để có được màu tính toán:

import matplotlib as mpl
import numpy as np 

colors_zero_one = np.array([[252, 223, 3], [35, 224, 13]]) / 255
cmap = mpl.colors.LinearSegmentedColormap.from_list('custom', colors_zero_one, N=256)
norm = mpl.colors.Normalize(vmin=10, vmax=20)

print((np.array(cmap(norm(15))) * 255).astype(int))

Ý tưởng của tôi là tạo ra nhiều colormaps và định mức và kết hợp chúng thành một. Nhưng đây chỉ là một ý tưởng rộng.

Có ai đó có ý tưởng làm thế nào để giải quyết nhiệm vụ? Bất kỳ trợ giúp đánh giá cao

Tất cả mọi thứ tôi tìm thấy cho đến nay, là sử dụng các màu sắc riêng biệt, thay vì chuyển tiếp liên tục.

Ghi chú

Nhấn vào đây để tải xuống mã ví dụ đầy đủhere to download the full example code

Hướng dẫn này cho thấy cách xây dựng và tùy chỉnh các màu độc lập, tức là không có sơ đồ đính kèm.

Colorbars tùy chỉnh#

Một colorbar cần một đối tượng "có thể ánh xạ" (matplotlib.cm.ScalarMappable) (thông thường là một hình ảnh) chỉ ra colormap và tiêu chuẩn được sử dụng. Để tạo một thanh màu mà không có hình ảnh đính kèm, thay vào đó, người ta có thể sử dụng

import matplotlib as mpl
import numpy as np 

colors_zero_one = np.array([[252, 223, 3], [35, 224, 13]]) / 255
cmap = mpl.colors.LinearSegmentedColormap.from_list('custom', colors_zero_one, N=256)
norm = mpl.colors.Normalize(vmin=10, vmax=20)

print((np.array(cmap(norm(15))) * 255).astype(int))
0 mà không có dữ liệu liên quan.

Thanh màu liên tục cơ bản#

Ở đây chúng tôi tạo ra một thanh màu liên tục cơ bản với ve và nhãn.

Các đối số cho cuộc gọi colorbar

import matplotlib as mpl
import numpy as np 

colors_zero_one = np.array([[252, 223, 3], [35, 224, 13]]) / 255
cmap = mpl.colors.LinearSegmentedColormap.from_list('custom', colors_zero_one, N=256)
norm = mpl.colors.Normalize(vmin=10, vmax=20)

print((np.array(cmap(norm(15))) * 255).astype(int))
0 (được xây dựng bằng cách sử dụng các đối số định mức và CMAP), các trục cần rút thanh màu và hướng của ColorBar.

Để biết thêm thông tin, hãy xem API colorbar.

Hướng dẫn python continuous colorbar - thanh màu liên tục python


Thanh màu mở rộng với màu sắc liên tục#

Ví dụ thứ hai cho thấy cách tạo một thanh màu riêng biệt dựa trên CMAP liên tục. Với đối số từ khóa "mở rộng", các màu thích hợp được chọn để lấp đầy không gian màu, bao gồm các phần mở rộng:

fig, ax = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)

cmap = mpl.cm.viridis
bounds = [-1, 2, 5, 7, 12, 15]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N, extend='both')

fig.colorbar(mpl.cm.ScalarMappable(norm=norm, cmap=cmap),
             cax=ax, orientation='horizontal',
             label="Discrete intervals with extend='both' keyword")

Hướng dẫn python continuous colorbar - thanh màu liên tục python


Khoảng thời gian riêng biệt colorbar#

Ví dụ thứ ba minh họa việc sử dụng

import matplotlib as mpl
import numpy as np 

colors_zero_one = np.array([[252, 223, 3], [35, 224, 13]]) / 255
cmap = mpl.colors.LinearSegmentedColormap.from_list('custom', colors_zero_one, N=256)
norm = mpl.colors.Normalize(vmin=10, vmax=20)

print((np.array(cmap(norm(15))) * 255).astype(int))
4 tạo ra colormap từ một tập hợp các màu được liệt kê,
import matplotlib as mpl
import numpy as np 

colors_zero_one = np.array([[252, 223, 3], [35, 224, 13]]) / 255
cmap = mpl.colors.LinearSegmentedColormap.from_list('custom', colors_zero_one, N=256)
norm = mpl.colors.Normalize(vmin=10, vmax=20)

print((np.array(cmap(norm(15))) * 255).astype(int))
5 tạo ra chỉ số colormap dựa trên các khoảng thời gian riêng biệt và các đầu mở rộng để hiển thị màu "trên" và "dưới". Trên và dưới được sử dụng để hiển thị dữ liệu bên ngoài phạm vi [0, 1] được chuẩn hóa. Ở đây chúng tôi vượt qua màu sắc dưới dạng màu xám khi một chuỗi mã hóa một float trong phạm vi 0-1.

Nếu

import matplotlib as mpl
import numpy as np 

colors_zero_one = np.array([[252, 223, 3], [35, 224, 13]]) / 255
cmap = mpl.colors.LinearSegmentedColormap.from_list('custom', colors_zero_one, N=256)
norm = mpl.colors.Normalize(vmin=10, vmax=20)

print((np.array(cmap(norm(15))) * 255).astype(int))
4 được sử dụng, độ dài của mảng giới hạn phải lớn hơn chiều dài của danh sách màu. Các giới hạn phải được tăng đơn điệu.

Lần này chúng tôi chuyển các đối số bổ sung cho colorbar. Đối với các giá trị ngoài phạm vi để hiển thị trên thanh màu mà không cần sử dụng từ khóa mở rộng với

import matplotlib as mpl
import numpy as np 

colors_zero_one = np.array([[252, 223, 3], [35, 224, 13]]) / 255
cmap = mpl.colors.LinearSegmentedColormap.from_list('custom', colors_zero_one, N=256)
norm = mpl.colors.Normalize(vmin=10, vmax=20)

print((np.array(cmap(norm(15))) * 255).astype(int))
5, chúng tôi phải sử dụng đối số từ khóa mở rộng trực tiếp trong cuộc gọi colorbar. Ở đây chúng tôi cũng sử dụng đối số khoảng cách để làm cho độ dài của từng phân đoạn colorbar tỷ lệ với khoảng tương ứng của nó.

fig, ax = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)

cmap = (mpl.colors.ListedColormap(['red', 'green', 'blue', 'cyan'])
        .with_extremes(over='0.25', under='0.75'))

bounds = [1, 2, 4, 7, 8]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
fig.colorbar(
    mpl.cm.ScalarMappable(cmap=cmap, norm=norm),
    cax=ax,
    extend='both',
    ticks=bounds,
    spacing='proportional',
    orientation='horizontal',
    label='Discrete intervals, some other units',
)

Hướng dẫn python continuous colorbar - thanh màu liên tục python


Colorbar với độ dài tiện ích mở rộng tùy chỉnh#

Ở đây chúng tôi minh họa việc sử dụng các phần mở rộng thanh màu dài tùy chỉnh, trên một thanh màu với các khoảng thời gian riêng biệt.Để làm cho chiều dài của mỗi phần mở rộng giống như chiều dài của các màu bên trong, hãy sử dụng

import matplotlib as mpl
import numpy as np 

colors_zero_one = np.array([[252, 223, 3], [35, 224, 13]]) / 255
cmap = mpl.colors.LinearSegmentedColormap.from_list('custom', colors_zero_one, N=256)
norm = mpl.colors.Normalize(vmin=10, vmax=20)

print((np.array(cmap(norm(15))) * 255).astype(int))
9.

fig, ax = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)

cmap = (mpl.colors.ListedColormap(['royalblue', 'cyan', 'yellow', 'orange'])
        .with_extremes(over='red', under='blue'))

bounds = [-1.0, -0.5, 0.0, 0.5, 1.0]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
fig.colorbar(
    mpl.cm.ScalarMappable(cmap=cmap, norm=norm),
    cax=ax,
    extend='both',
    extendfrac='auto',
    ticks=bounds,
    spacing='uniform',
    orientation='horizontal',
    label='Custom extension lengths, some other units',
)

plt.show()

Hướng dẫn python continuous colorbar - thanh màu liên tục python

Phòng trưng bày được tạo ra bởi Sphinx-Gallery