You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更改skfuzzy生成的Matplotlib模糊变量绘图的colormap?

解决skfuzzy模糊变量可视化的配色修改问题

核心思路

skfuzzy的FuzzyVariableVisualizer在绘制隶属度函数时,会为每个语言变量单独指定线条和填充颜色,全局设置colormap(如plt.set_cmap())不会生效。我们需要手动从目标colormap中提取对应数量的颜色,逐个替换每个隶属度函数的线条和填充色。

修改后的完整代码

import numpy as np
import matplotlib.pyplot as plt
import skfuzzy as fuzz
from skfuzzy import control as ctrl
from skfuzzy.control import visualization

room_temp = ctrl.Antecedent(np.arange(0, 11, 1), 'room temperature')
clothing = ctrl.Antecedent(np.arange(0, 11, 1), 'amount of clothing')
temp_control = ctrl.Consequent(np.arange(0, 11, 1), 'temperature control')

temp_qualitative_values = ['absolute zero',
                           'freezing',
                           'extremely cold',
                           'cold',
                           'chilly',
                           'OK',
                           'warm',
                           'hot',
                           'very hot',
                           'hot as hell',
                           'melting']

clothing.automf(3)
clothing.view()

temp_control.automf(5)
temp_control.view()

# 自定义room_temp的可视化配色
room_temp.automf(10, names=temp_qualitative_values)
room_temp_viz = visualization.FuzzyVariableVisualizer(room_temp)
fig, ax = room_temp_viz.view()

# 从bwr colormap生成对应数量的颜色
cmap = plt.get_cmap('bwr')
num_terms = len(room_temp.terms)
# 生成从冷(蓝)到暖(红)的渐变颜色
colors = [cmap(i / (num_terms - 1)) for i in range(num_terms)]

# 逐个替换线条和填充的颜色
for line, patch, color in zip(ax.lines, ax.patches, colors):
    line.set_color(color)
    patch.set_facecolor(color)
    patch.set_alpha(0.3)  # 保持默认的填充透明度

plt.show()

关键步骤说明

  • 获取目标colormap:用plt.get_cmap('bwr')获取蓝-白-红的渐变配色方案。
  • 生成对应数量的颜色:根据语言变量的总数(len(room_temp.terms)),从colormap中均匀提取颜色,确保从最冷的蓝色到最热的红色渐变。
  • 替换元素颜色:遍历axes对象中的线条(ax.lines)和填充块(ax.patches),分别设置它们的颜色,同时保持填充的透明度和默认效果一致。

内容的提问来源于stack exchange,提问作者Alexander Grantcharov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:25:23