matplotlib 创建离散的colorbar,适用于图像分割可视化

如下

import numpy as np
import matplotlib
import matplotlib.ticker as ticker
from matplotlib.colors import ListedColormap, BoundaryNorm

#随机生成mask,像素值为0、1、2
mask=np.random.randint(0,3,[255,255])

#mask中像素的种类数
unique_values = np.unique(mask).size
#选择一种cmap
cmap = matplotlib.colormaps.get_cmap('cool')
#选取n种颜色
cmap = ListedColormap(cmap(np.linspace(0, 255, unique_values).astype(np.uint8)))
# 创建边界规范。bounds 指定了颜色分界线在哪里
bounds = np.array(list((np.unique(mask)))+[unique_values]) #需要+1,否则少一种颜色
norm = BoundaryNorm(bounds, cmap.N)
# 绘制颜色条
cb = plt.colorbar(
    plt.cm.ScalarMappable(cmap=cmap, norm=norm),
    ticks=bounds+0.5, #ticks指定了刻度标在哪里,+0.5是为了使刻度标在颜色中间
    boundaries=bounds,
    orientation='vertical',
    format='%d'
)
plt.imshow(mask, cmap=cmap, norm=norm)
plt.show()

效果
在这里插入图片描述

### 创建带有离散颜色条的 Python 可视化 为了创建具有离散颜色条的颜色映射图,可以利用 `matplotlib` 和 `seaborn` 库的功能。通过自定义离散颜色映射并将其应用于图表中来实现这一点。 #### 使用 Matplotlib 实现离散 Colorbar 的方法 可以通过设置边界和规范化对象来自定义离散颜色条: ```python import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import BoundaryNorm, ListedColormap # 定义数据矩阵 data = np.random.rand(10, 10) # 设定离散级别数以及对应的色彩列表 levels = [-1, 0, 0.5, 1] colors = ["white", "blue", "red"] # 构建 colormap 和 norm 对象 cmap = ListedColormap(colors) norm = BoundaryNorm(levels, ncolors=cmap.N) fig, ax = plt.subplots() im = ax.imshow(data, cmap=cmap, norm=norm) # 添加离散 colorbar cb = fig.colorbar(im, boundaries=np.linspace(-1, 1, len(levels)), ticks=[-0.5, 0, 0.5], spacing='proportional') plt.show() ``` 这段代码展示了如何使用 `BoundaryNorm` 来指定不同级别的界限,并且通过 `ListedColormap` 来设定对应的颜色[^1]。 #### 结合 Seaborn 进行更加美观的数据展示 Seaborn 提供了更高层次接口用于简化绘图流程,在某些情况下也可以更容易地处理离散颜色条的情况: ```python import pandas as pd import seaborn as sns sns.set() # 假设有一个 DataFrame 包含分类变量 'group' df = pd.DataFrame({ 'x': np.random.randn(100), 'y': np.random.randn(100), 'group': ['A']*25 + ['B']*25 + ['C']*25 + ['D']*25, }) palette = {"A": "#FF9999", "B": "#66B2FF", "C": "#99FF99", "D": "#FFCC99"} g = sns.scatterplot(x="x", y="y", hue="group", palette=palette, data=df) # 自动添加 legend 并显示 plot plt.legend(title='Groups') plt.show() ``` 此示例说明了当拥有分类型数据时,可以直接借助于 Seaborn 中内置的支持来进行着色,而无需手动构建复杂的颜色映射逻辑[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值