2021/04/21:我火星了????

python Seaborn库 调色板

所以下面的东西都别看了

.

.

.

.

.

.

.

.

.

.

由来

昨天画了这张图,自动分配的颜色比较深,而且总颜色数不多,这张图的颜色是自己一点一点写的,很麻烦,所以想制作一个简单的颜色序列生成器一劳永逸

介绍

我给这个文件取名为InterestingColorfulColor.py,把它放在python安装目录的Lib文件夹就可以随时用import语句导入,非常方便。
例如:

import InterestingColorfulColor as ICC

目前这个文件的主要内容只有一个类:ColorOrder
ColorOrder类里给出了15种按照颜色深浅梯度变化的基础颜色序列,分别为:红,红橙,橙,橙黄,黄,黄绿,绿,绿青,青,青蓝,蓝,蓝紫,紫,紫红,和灰色(由纯黑到纯白)
每种序列有16种不同的颜色。
通过这个类可以较为轻松地得到一种你想要的颜色序列,有可能可以让你的工作提高一点点效率。不过这毕竟是个小制作,功能不复杂。
下图展示其中一部分颜色

使用

约定

约定上述15种颜色序列为 gray red, orange,yellow,green,cyan,blue,purple 以及除了gray外剩下七种颜色中相邻颜色之间的两两组合 如redorange, greencyan等,对两种颜色书写的先后顺序不做要求即redpurple和purplered都是正确的

导入模块

import InterestingColorfulColor as ICC

创建一个ColorOrder对象

co = ICC.ColorOrder(['red','blue'],mixtype = 'cross')

参数解析:
def init(self, colornames, mixtype = ‘Connect’)
两个参数,colornames , mixtype

参数colornamse给出若干个颜色序列的名称。
参数mixtype表示混合这些颜色序列的方式,目前只有两个值:connect 和 cross(不需要区分大小写)
connect为默认值 以连接的方式混合,即按照顺序依次把colornames中给出的颜色序列首尾相接
cross 以交叉的方式混合 。举个例子 如果以cross的方式混合三个颜色序列[1,2,3][a,b,c][x,y,z] 最后的结果序列为[1,a,x,2,b,y,3,c,z]

查看颜色序列,以及其他两个隐藏属性

co.getOrder() #查看序列
co.getLength() #查看序列长度
co.getBaseOrderNumber() #查看该序列由几个基础序列混合而成结果:
['#2F0000', '#000079', '#4D0000', '#000093', '#600000', '#0000C6', '#750000', '#0000C6', '#930000', '#0000E3', '#AE0000', '#2828FF', '#CE0000', '#4A4AFF', '#EA0000', '#6A6AFF', '#FF0000', '#7D7DFF', '#FF2D2D', '#9393FF', '#FF5151', '#AAAAFF', '#ff7575', '#B9B9FF', '#FF9797', '#CECEFF', '#FFB5B5', '#DDDDFF', '#FFD2D2', '#ECECFF', '#FFECEC','#FBFBFF']
32
2

切片获取序列

co.getLeft(False) #获得序列左边的25%
co.getRight(True) #获得序列右边的25%
co.getMiddle() #获得序列中间的50%

参数分析:
def getLeft(self, muti_section = False):
三个方法只有一个相同的参数,muti_section
当muti_section默认为False 直接根据需求获得序列的前25%或后25%或中间50%
当muti_section为True, 考虑某些时候切片以connect方式混合的序列,他会单独提取每个基础序列的左、右或中间的部分,拼接到一起作为返回结果

与ColorOrder对象的序列混合

co.mix(co,'cross')

参数解析:
def mix(self, co, mixtype = ‘Connect’)
co为实例对象,mixtype与__init__中的mixtype相同
值得一提的是这时两个序列不一定时等长的,我们再举一个cross混合的例子。假设混合[2,3,4,2,3,4,2,3,4]和[0,1,0,1,0,1]两个序列,最后的结果是[2,3,4,0,1,2,3,4,0,1,2,3,4,0 1]

应用简例

%matplotlib inline
import InterestingColorfulColor as ICC
import matplotlib.pyplot as pltfig, ax = plt.subplots(1,2,figsize = (16,8))co = ICC.ColorOrder(['blue','redpurple'],'cross')
ax[0].pie([1]*len(co.getOrder()),colors = co.getOrder())co.mix(ICC.ColorOrder(['Green']),'cross')
ax[1].pie([1]*len(co.getMiddle()),colors = co.getMiddle())

效果:

%……&%¥……?????!!!

弄到颜色序列之后是可以用co.getOrder()导出来自己随便切的,并不是只能按照getMiddle,getLeft,getRight的固定方式切片

源代码

class ICC_UnknowColorName(Exception):pass
class ICC_UnknowMixType(Exception):passclass ColorOrder:BaseOrderLength_Normal = 16#BaseOrderLength_Dull   = 12ErrorText_ICC_UnknowColorName = 'Exist color name not in ColorOrder.ColorMap, can not identify what color the name means. Or you need to use an iteratable object to iteratable object all color names'ErrorText_ICC_UnknowMixType = 'Can not identify mixtype'ColorMap = { 'Gray'        : 'Gray','Red'         : 'Red','Redpurple'   : 'RedPurple','Purplered'   : 'RedPurple','Purple'      : 'Purple','Purpleblue'  : 'PurpleBlue','Bluepurple'  : 'PurpleBlue','Blue'        : 'Blue','Bluecyan'    : 'BlueCyan','Cyanblue'    : 'BlueCyan','Cyan'        : 'Cyan','Cyangreen'   : 'CyanGreen','Greencyan'   : 'CyanGreen','Green'       : 'Green','Greenyellow' : 'GreenYellow','Yellowgreen' : 'GreenYellow','Yellow'      : 'Yellow','Yelloworange': 'YellowOrange','Orangeyellow': 'YellowOrange','Orange'      : 'Orange','Orangered'   : 'OrangeRed','Redorange'   : 'OrangeRed'#,'Dullred'     : 'DullRed'#,'Dullyellow'  : 'DullYellow'#,'Dullcyan'    : 'DullCyan'#,'Dullblue'    : 'DullBlue'#,'Dullpurple'  : 'DullPurple'}BaseColorOrder = { 'Gray'        :   ['#ffffff','#272727','#3C3C3C','#4F4F4F','#5B5B5B','#6C6C6C','#7B7B7B','#8E8E8E','#9D9D9D','#ADADAD','#BEBEBE','#d0d0d0','#E0E0E0','#F0F0F0','#FCFCFC','#FFFFFF'],'Red'         :   ['#2F0000','#4D0000','#600000','#750000','#930000','#AE0000','#CE0000','#EA0000','#FF0000','#FF2D2D','#FF5151','#ff7575','#FF9797','#FFB5B5','#FFD2D2','#FFECEC'],'RedPurple'   :   ['#600030','#820041','#9F0050','#BF0060','#D9006C','#F00078','#FF0080','#FF359A','#FF60AF','#FF79BC','#FF95CA','#ffaad5','#FFC1E0','#FFD9EC','#FFECF5','#FFF7FB'],'Purple'      :   ['#460046','#5E005E','#750075','#930093','#AE00AE','#D200D2','#E800E8','#FF00FF','#FF44FF','#FF77FF','#FF8EFF','#ffa6ff','#FFBFFF','#FFD0FF','#FFE6FF','#FFF7FF'],'PurpleBlue'  :   ['#28004D','#3A006F','#4B0091','#5B00AE','#6F00D2','#8600FF','#921AFF','#9F35FF','#B15BFF','#BE77FF','#CA8EFF','#d3a4ff','#DCB5FF','#E6CAFF','#F1E1FF','#FAF4FF'],'Blue'        :   ['#000079','#000093','#0000C6','#0000C6','#0000E3','#2828FF','#4A4AFF','#6A6AFF','#7D7DFF','#9393FF','#AAAAFF','#B9B9FF','#CECEFF','#DDDDFF','#ECECFF','#FBFBFF'],'BlueCyan'    :   ['#000079','#003D79','#004B97','#005AB5','#0066CC','#0072E3','#0080FF','#2894FF','#46A3FF','#66B3FF','#84C1FF','#97CBFF','#ACD6FF','#C4E1FF','#D2E9FF','#ECF5FF'],'Cyan'        :   ['#003E3E','#005757','#007979','#009393','#00AEAE','#00CACA','#00E3E3','#00FFFF','#4DFFFF','#80FFFF','#A6FFFF','#BBFFFF','#CAFFFF','#D9FFFF','#ECFFFF','#FDFFFF'],'CyanGreen'   :   ['#006030','#01814A','#019858','#01B468','#02C874','#02DF82','#02F78E','#1AFD9C','#4EFEB3','#7AFEC6','#96FED1','#ADFEDC','#C1FFE4','#D7FFEE','#E8FFF5','#FBFFFD'],'Green'       :   ['#006000','#007500','#009100','#00A600','#00BB00','#00DB00','#00EC00','#28FF28','#53FF53','#79FF79','#93FF93','#A6FFA6','#BBFFBB','#CEFFCE','#DFFFDF','#F0FFF0'],'GreenYellow' :   ['#467500','#548C00','#64A600','#73BF00','#82D900','#8CEA00','#9AFF02','#A8FF24','#B7FF4A','#C2FF68','#CCFF80','#D3FF93','#DEFFAC','#E8FFC4','#EFFFD7','#F5FFE8'],'Yellow'      :   ['#424200','#5B5B00','#737300','#8C8C00','#A6A600','#C4C400','#E1E100','#F9F900','#FFFF37','#FFFF6F','#FFFF93','#FFFFAA','#FFFFB9','#FFFFCE','#FFFFDF','#FFFFF4'],'YellowOrange':   ['#5B4B00','#796400','#977C00','#AE8F00','#C6A300','#D9B300','#EAC100','#FFD306','#FFDC35','#FFE153','#FFE66F','#FFED97','#FFF0AC','#FFF4C1','#FFF8D7','#FFFCEC'],'Orange'      :   ['#844200','#9F5000','#BB5E00','#D26900','#EA7500','#FF8000','#FF9224','#FFA042','#FFAF60','#FFBB77','#FFC78E','#FFD1A4','#FFDCB9','#FFE4CA','#FFEEDD','#FFFAF4'],'OrangeRed'   :   ['#642100','#842B00','#A23400','#BB3D00','#D94600','#F75000','#FF5809','#FF8040','#FF8F59','#FF9D6F','#FFAD86','#FFBD9D','#FFCBB3','#FFDAC8','#FFE6D9','#FFF3EE']#,'DullRed'     :   ['#613030','#743A3A','#804040','#984B4B','#AD5A5A','#B87070','#C48888','#CF9E9E','#D9B3B3','#E1C4C4','#EBD6D6','#F2E6E6']#,'DullYellow'  :   ['#616130','#707038','#808040','#949449','#A5A552','#AFAF61','#B9B973','#C2C287','#CDCD9A','#D6D6AD','#DEDEBE','#E8E8D0']#,'DullCyan'    :   ['#336666','#3D7878','#408080','#4F9D9D','#5CADAD','#6FB7B7','#81C0C0','#95CACA','#A3D1D1','#B3D9D9','#C4E1E1','#D1E9E9']#,'DullBlue'    :   ['#484891','#5151A2','#5A5AAD','#7373B9','#8080C0','#9999CC','#A6A6D2','#B8B8DC','#C7C7E2','#D8D8EB','#E6E6F2','#F3F3FA']#,'DullPurple'  :   ['#6C3365','#7E3D76','#8F4586','#9F4D95','#AE57A4','#B766AD','#C07AB8','#CA8EC2','#D2A2CC','#DAB1D5','#E2C2DE','#EBD3E8']}def __init__(self, colornames, mixtype = 'Connect'):colornames = [i.capitalize() for i in colornames]mixtype = mixtype.capitalize()for each in colornames:if each not in ColorOrder.ColorMap:raise ICC_UnknowColorName(ColorOrder.ErrorText_ICC_UnknowColorName)self.__order = []if mixtype == 'Connect':for eachname in colornames:self.__order.extend(ColorOrder.BaseColorOrder[ColorOrder.ColorMap[eachname]])elif mixtype == 'Cross':lst = []for eachname in colornames:lst.append(ColorOrder.BaseColorOrder[ColorOrder.ColorMap[eachname]])for i in range(ColorOrder.BaseOrderLength_Normal):for each in lst:self.__order.append(each[i])else:raise ICC_UnknowMixType(ColorOrder.ErrorText_ICC_UnknowMixType)self.__baseOrderNumber = len(colornames)self.__length = self.__baseOrderNumber * ColorOrder.BaseOrderLength_Normaldef getBaseOrderNumber(self):return self.__baseOrderNumberdef getLength(self):return self.__lengthdef getOrder(self):return self.__order.copy()def getLeft(self, muti_section = False):if muti_section == False:lst = self.__order[ : 4 * self.__baseOrderNumber ]else:lst = []for i in range(self.__baseOrderNumber):pos = i * ColorOrder.BaseOrderLength_Normallst.extend(self.__order[ pos : pos + 4])return lstdef getRight(self, muti_section = False):if muti_section == False:lst = self.__order[ -4 * self.__baseOrderNumber : ]else:lst = []for i in range(1,self.__baseOrderNumber+1):pos = i * ColorOrder.BaseOrderLength_Normallst.extend(self.__order[ pos - 4 : pos])return lstdef getMiddle(self, muti_section = False):if muti_section == False:lst = self.__order[ 4 * self.__baseOrderNumber : 12 * self.__baseOrderNumber ]else:lst = []for i in range(self.__baseOrderNumber):pos = i * ColorOrder.BaseOrderLength_Normallst.extend(self.__order[ pos + 4 : pos + 12])return lstdef mix(self, co, mixtype = 'Connect'):mixtype = mixtype.capitalize()if mixtype == 'Connect':self.__order.extend(co.__order)elif mixtype == 'Cross':lst = []idx1 = 0idx2 = 0for i in range(ColorOrder.BaseOrderLength_Normal):for j in range(self.__baseOrderNumber):lst.append(self.__order[idx1])idx1 += 1for j in range(co.__baseOrderNumber):lst.append(co.__order[idx2])idx2 += 1self.__order = lstself.__length += co.__lengthself.__baseOrderNumber += co.__baseOrderNumber

python 简单的颜色序列生成器相关推荐

  1. python随机颜色数字_python颜色随机生成器的实例代码

    1. 代码: def random_color(number=number): color = [] intnum = [str(x) for x in np.arange(10)] #Out[138 ...

  2. oracle简单序列,oracle序列生成器(sequence)使用的一点小注意

    oracle序列生成器(sequence)使用的一点小注意 有人遇到这么一个问题,访问一个序列怎么出错了,错误如下: ORA-08002: 序列 SEQ_GX.CURRVAL 尚未在此会话中定义 这是 ...

  3. python夯实基础日记-序列、列表、元组

    30.可变字符串_io.StringIO 在 Python中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能创建新的字符串对象.但是,经常我们确实需要原地修改字符串,可以使用io. ...

  4. python程序设计第二章序列类型 题库及选解

    由于学校的python是笔试,所以找了份感觉比较好的题库刷了下其中前八章的填空和判断,附上选解.各章链接如下 python程序设计题库完整版 https://blog.csdn.net/lijia11 ...

  5. Python简单教程

    Python综述 python是什么 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些 ...

  6. python正确的赋值语句-Python 赋值语句技巧之序列解包

    python赋值语句技巧之序列解包sequence unpacking,是python语言赋值语句的一种技巧方法,在给多个python 变量命名同时赋值时是很有效率的一种方法. 赋值语句序列解包概念 ...

  7. Python程序设计之迭代器和生成器示例

    一. 迭代器 Python中只要实现了__iter__和__next__方法的对象都可以称之为迭代器,迭代器是一个带状态的对象,可以记录迭代的位置. #!/usr/bin/env python3cla ...

  8. python怎么用for循环找出最大值_如何获取Python简单for循环索引

    如何获取Python简单for循环索引 这篇文章主要介绍了如何获取Python简单for循环索引,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Py ...

  9. Oracle序列生成器

    文章目录 一.创建序列 二.序列的使用 1.创建最简单的序列 2.在dual虚表使用序列 3.在SQL语句中使用序列 三.序列裂缝 1.序列不产生事务 2.序列裂缝 四.修改序列 五.删除序列 六.版 ...

最新文章

  1. Centos下通过SMTP发送邮件失败解决
  2. 【干货】仪器仪表常用术语汇总
  3. JBPM工作流(七)——详解流程图
  4. 看透设计模式-行为型模式
  5. 加油站都需要什么手续_公司变更需要什么手续
  6. 不要把a href=当作按钮用
  7. Jupyter 中 ValueError: Duplicate names are not allowed.的问题解决
  8. 吴恩达深度学习笔记 第二章作业1
  9. 唐宇迪学习笔记17:支持向量机
  10. 数据结构与算法之python
  11. 第二章 VB语言基础
  12. 语音模块:pyttsx变声项目
  13. 机器学习Machine Learning:特征选择Feature Selection 与 数据降维Dimension Reduction的区别?
  14. 【Linux】CPU信息速查(品牌型号 | 物理CPU数 | 物理核数 | 逻辑核数)
  15. 申宝证券-A股市场的普涨
  16. 如何办理股票开户手续
  17. Feelings On Life II
  18. 美国AMC数学竞赛的含金量如何?
  19. AI一分钟 | 传锤子和360手机正洽谈合并;吴恩达Woebot Labs完成800万美元融资;吴甘沙:AI技术中国排第二没问题
  20. 国庆档来袭,电影市场只能依靠“黄道吉日”捞金?

热门文章

  1. 【仿真建模】第三课:AnyLogic入门基础课程 - 多层建筑行人疏散仿真讲解
  2. 实现isPrime()函数,参数为整数,要有异常处理,如果是质数返回True,否则返回False
  3. php的amqp扩展 安装(windows) rabbitmq学习篇
  4. 什么是“沙箱”技术?
  5. MySQL获取季初日期_用于取得当前日期相对应的月初,月末,季初,季末,年初,年末时间...
  6. Arcgis js featureLayer加载完成之后,对其加载的要素重新定义样式
  7. windows操作系统知识最全
  8. JSD-2204-反射-Day17
  9. 教你一招利用Python快速去除图片水印
  10. java get方法使用_java中关于set()和get()方法的理解和使用