matplotlib的配色(随机颜色函数,各种渐变色,彩虹色)

也是画图的时候经常会遇到的问题,什么颜色好看?

先直接上一个配色表:

 plt官网:List of named colors — Matplotlib 3.8.0.dev898+g4f5b5741ce documentation

需要什么颜色传入就行了。


例如我下面画一个柱状图,自己选了三个蓝色

导入包

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt 
import seaborn as sns
import time
import random
plt.rcParams ['font.sans-serif'] ='SimHei'               #显示中文
plt.rcParams ['axes.unicode_minus']=False               #显示负号

画图,表示不同的模型的效果

data = {'方法': ['QUBO+量子退火', 'QUBO+布谷鸟优化', 'QUBO+黏菌优化'],
        '最优的银行最终收入': [43.493, 42.95, 43.881]}
df = pd.DataFrame(data)
plt.figure(figsize=(4,2.5),dpi=128)
sns.barplot(x='方法', y='最优的银行最终收入', data=df,width=0.5,palette=['cornflowerblue','aqua','deepskyblue'])
plt.xticks(rotation=20)
plt.yticks(np.arange(0,60,10))

# 在每个柱形上方添加对应的数值
for i, val in enumerate(df['最优的银行最终收入']):
    plt.text(i, val + 1.5, str(val), ha='center', fontsize=8)
plt.savefig('第三问2.png',bbox_inches='tight')
plt.show()

palette=['cornflowerblue','aqua','deepskyblue']就是我传入的颜色列表,这里是sns画法,所以参数是palette,plt画柱状图就直接color参数就行了。

其他的渐变色列表:

blue_palette = ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b']
red_palette = ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d']
green_palette = ['#edf8e9', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b']
orange_palette = ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704']

柱状图还有一些别的默认好的颜色列表可以试试:

palette='crest'
palette='viridis_r'
palette='vlag'
palette='Spectral'
palette='twilight_r'

随机颜色 

如果有颜色旋选择困难症,可以试试下面这个随机颜色函数

import random   #定义随机生成颜色函数
def randomcolor():
    colorArr = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
    color ="#"+''.join([random.choice(colorArr) for i in range(6)])
    return color
[randomcolor() for i in range(3)]

他就能随机生成颜色列表


热力图的渐变色

热力图的代码主要是camp这个是参数空值颜色,

有两篇博客已经讲的很不错了:

Python-matplotlib绘制散点图-plt.scatter-颜色设置(c, cmap)_plt散点图颜色_假如我年华正好的博客-CSDN博客

【Python】绘制热力图seaborn.heatmap,cmap设置颜色的参数_sns.heatmap颜色_兔子爱读书的博客-CSDN博客

我这里主要讲一下怎么自定义渐变色:

例如我想画一个热力图,只有蓝黄色简便,可以自己写一个颜色列表:

import matplotlib.colors as mcolors

# 定义黄蓝渐变色
colors = ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0']
my_cmap = mcolors.LinearSegmentedColormap.from_list('my_colormap', colors)

plt.figure(figsize=(7,5),dpi=256)
sns.heatmap((data1.iloc[:,45:55]*1000).round(3), cmap=my_cmap, annot=True, annot_kws={"size": 8})
plt.savefig('第一问.png')

主要就是这个颜色列表,需要自己设置['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0']。

当然现在可以问gpt,让他给你写一个渐变的颜色列表也是可以的,想要红变黄,或者紫变粉色,都可以,我示例一下:

colors = [ '#FF0000','#FF1E00', '#FF3C00', '#FF5A00', '#FF7800', '#FF9600', '#FFB400', '#FFD200']
my_cmap = mcolors.LinearSegmentedColormap.from_list('my_colormap', colors)
plt.figure(figsize=(7,5),dpi=256)
sns.heatmap((data1.iloc[:,45:55]).round(3), cmap=my_cmap, annot=True, annot_kws={"size": 8})

紫粉色:

purple_to_pink = sns.color_palette("PuRd", 10).as_hex()[1:9]
plt.figure(figsize=(7,5),dpi=256)
sns.heatmap((data1.iloc[:,45:55]).round(3), cmap=purple_to_pink, annot=True, annot_kws={"size": 8})

还可以吧。

最后再来一个彩虹色列表,下次画图直接复制就行了:

colors=['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']*2