Matplotlib绘图:无需显式迭代为数组列指定自定义颜色
在Matplotlib中无需迭代实现2D数组多列自定义颜色绘图
当y为2D数组时,确实可以不用手动循环,直接通过指定颜色列表为每一列的线条自定义颜色,同时让每组散点和对应拟合线使用同色,以下是两种实用方法:
方法1:自定义颜色循环(更灵活)
通过设置当前子图的颜色循环规则,让plt.plot自动按你指定的颜色依次绘制所有线条,散点和拟合线会自动匹配对应颜色:
import numpy as np import matplotlib.pyplot as plt from cycler import cycler np.random.seed(0) # 生成示例数据 slope = [1, 2, 3] X = np.arange(10) Y = slope * X[:,None] + np.random.randn(10,3) # 计算拟合曲线 params = np.polyfit(X, Y, deg=1) x = np.linspace(0, 10, 50) y = np.polyval(params, x[:,None]) # 设置自定义颜色循环 colors = ['b', 'r', 'g'] plt.gca().set_prop_cycle(cycler('color', colors)) # 直接绘制所有散点和拟合线,自动应用循环颜色 plt.plot(X, Y, '.') plt.plot(x, y) plt.show()
方法2:直接传递颜色列表给plot函数
Matplotlib支持直接给plot的color参数传入长度与y列数一致的颜色列表,每列线条会对应列表中的颜色:
import numpy as np import matplotlib.pyplot as plt np.random.seed(0) # 生成示例数据和拟合曲线 slope = [1, 2, 3] X = np.arange(10) Y = slope * X[:,None] + np.random.randn(10,3) params = np.polyfit(X, Y, deg=1) x = np.linspace(0, 10, 50) y = np.polyval(params, x[:,None]) colors = ['b', 'r', 'g'] # 绘制散点,指定每列对应颜色 plt.plot(X, Y, '.', color=colors) # 绘制拟合线,对应相同颜色 plt.plot(x, y, color=colors) plt.show()
两种方法都能实现你想要的效果,完全替代手动循环的写法。需要注意的是,Matplotlib 3.0及以上版本对color参数接受可迭代对象的支持更完善,若使用旧版本建议优先选择方法1。
内容的提问来源于stack exchange,提问作者alpelito7
相关产品推荐
相关产品推荐

