python生成颜色数组

2 篇文章 0 订阅
1 篇文章 0 订阅

利用matplotlib.pyplot工具生成颜色数组

用途

利用循环语句生成图表时,有时希望自定义每组数据在图表上颜色

如果多组数据在同一图表上生成图形,其实matplotlib.pyplot会自动给每组数据分配不同的颜色
例如:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,10,1000,endpoint=False) 
ys = [0, 4, 5, 3, 8, 9, 1, 7, 6, 2]     # 每条横线位置
print(ys)
plt.figure(figsize=(10,8))
ax = plt.gca()
for i in range(10):
    plt.scatter(x=x,y=np.full(1000,ys[i]),s=1,label=i)
plt.legend(fontsize=12)
plt.show()

对应的图像(标签值对应的是直线插入的顺序)如下:
在这里插入图片描述
颜色很漂亮,但如果想找第一条插入的直线在哪,第二条插入的直线在哪,其实并不直观甚至是很难找

所以,有时我们想要一组更具有规律性的颜色来区分,这意味着我们需要指定每条数据的颜色。
比如我们按数据插入先后顺序,每条线按从红到蓝显示,就像下图这样,通过颜色的递进关系一眼就能看出y=0的这条直线是第一条插入的,y=4的这条是第二条插入的

在这里插入图片描述

方法

要实现上面的效果,首先就是生成颜色数组

  1. 手动写一个数组列表的方法就不具体介绍了,自己搜一下有哪些颜色就行
# colors = ["darkred", "red", "orangered",此处省略, "blue", "darkblue"]
  1. 想要介绍的是从一个颜色渐进的图谱中取颜色
    常见的图谱色有,自己可以去搜下各颜色对应的名称,同时可以自己定义一个渐变色:
    在这里插入图片描述

get_cmap

然后我们要用到的一个主要函数是matplotlib.pyplot.get_cmap(name=None, lut=None)
简单来说,get_cmap()有两个参数:
name:颜色图谱,可以是字符串,也可以是colormap实例
lut:要得到的颜色个数,一个整数

# 比如选择了'RdBu'色谱,选择分为10段
colors = plt.get_cmap('RdBu',10)
# 我们要取颜色的话,传入整数或者整数列表
colors([0,1,2,3,4,5,6,7,8,9,10,11])

得到以下结果,可以看出这是个narray二维数组(只传入一个整数且不用列表,则返回一个python数组,plt绘图时需要二维数组的颜色),且大于9的数值都是一样的颜色了(这与我们设置了分为10段有关)

array([[0.40392157, 0.        , 0.12156863, 1.        ],
       [0.71372549, 0.1254902 , 0.18344227, 1.        ],
       [0.86535948, 0.43660131, 0.34814815, 1.        ],
       [0.96862745, 0.71764706, 0.6       , 1.        ],
       [0.98169935, 0.90762527, 0.86405229, 1.        ],
       [0.88583878, 0.92941176, 0.95337691, 1.        ],
       [0.65490196, 0.81437908, 0.89411765, 1.        ],
       [0.33159041, 0.62004357, 0.78823529, 1.        ],
       [0.14422658, 0.41960784, 0.68453159, 1.        ],
       [0.01960784, 0.18823529, 0.38039216, 1.        ],
       [0.01960784, 0.18823529, 0.38039216, 1.        ],
       [0.01960784, 0.18823529, 0.38039216, 1.        ]])

上面那幅红-蓝渐变色的图表是根据下方代码得到的

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,10,1000,endpoint=False) # 加密
ys = [0, 4, 5, 3, 8, 9, 1, 7, 6, 2]     # 每条横线位置
print(ys)
plt.figure(figsize=(10,8))
ax = plt.gca()
for i in range(10):
    plt.scatter(x=x,y=np.full(1000,ys[i]),s=1,label=i,c=plt.get_cmap('RdBu',10)([i]))
plt.legend(fontsize=12)
plt.show()

生成渐变颜色数组的方法

# 对get_cmap稍微整理下
def get_colors(name, lut):
	"""
	params:
		- name:颜色图谱,可以是字符串,也可以是colormap实例
		- lut:要得到的颜色个数,一个整数
	"""
    return plt.get_cmap(name, lut)([i for i in range(lut)])

效果就是这样
在这里插入图片描述

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值