matplotlib论文图片配色

发布时间 2023-10-29 23:13:34作者: 楚千羽

还在为配图的颜色而烦恼嘛,还在为matplotlib的经典颜色而困惑嘛,看完下面的文章,教你如何选择图片颜色
image

上图左边是matplotlib默认的颜色系统,而右边就是使用matplotlib自带的颜色系统实现的。如何实现,请继续往下浏览

1 官方色组
1.1 推荐色组
由于官方的色组比较多,我选了几款效果比较好的几个色组,见下图。

image

图1 我的推荐色组

图1左边的是色组的名字,在使用时会用到。官方所有色组后在文章末尾出现。

1.2 查看色组

import matplotlib.pyplot as plt
color_name = 'Set3' #官方色组名称

# 法一:在jupyter`在这里插入代码片` notebook中可以这样查看
plt.get_cmap(color_name)
# 法二:使用fig查看
fig,ax = plt.subplots(figsize=(10,0.5))
fig.colorbar(mpl.cm.ScalarMappable(cmap=color_name),cax=ax, orientation='horizontal')
plt.show()

image

图2 查看色组结果

1.3 使用色组
下面为我使用官方色组画扇形图的demo

import matplotlib.pyplot as plt
import numpy as np
labels = ['Frogs','Hogs','Dogs','Logs']
sizes = [15, 30, 45, 10]

color_name = 'rainbow'
# 手动选择
select1 = (0,45,103,253) #连续性色组图可以从0-256之间选择,e.g‘rainbow’
select2 = (0.1,0.5,0.3,0.8) # 连续性色组图也可以从0-1之间选择
select3 = (1,4,8,3) # 非连续型色组在0-(色组长度-1)之间选择,e.g‘Set3’在0-11之间选择
# 自动选择
select4 = np.random.uniform(0,1,len(sizes)) # 使用uniform可以随机选择颜色
select5 = np.random.uniform(0,1,len(sizes))
select5.sort()
select6 = np.linspace(0,1,len(sizes))

colors = plt.get_cmap(color_name)(select2) # 从色组里选择颜色,我选择的是select2

fig,ax = plt.subplots()
ax.pie(sizes, labels=labels, autopct='%1.1f%%', shadow=True, colors=colors)
ax.axis('equal')
plt.show()

image

图3 画图结果

2 自定义色组
除了使用官方给定的色组,还可以自己定义色组

from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
colors = ['#3682be','#45a776','#f05326','#eed777','#334f65','#b3974e','#38cb7d','#ddae33','#844bb3','#93c555','#5f6694','#df3881']

cmap = ListedColormap(colors, name = 'mycmap')
fig,ax = plt.subplots(figsize=(10,0.5))
fig.colorbar(mpl.cm.ScalarMappable(cmap=cmap),cax=ax, orientation='horizontal')
plt.show()

图4 画图结果
image

这里会使用到一个叫做ListedColormap的函数

3 总结
总的来说使用不同的颜色,在图形样式不变的情况下,给人一焕然一新的感觉。而不是使用matplotlib的经典配色,他人一看就看出是用matplotlib所画。

4 其他有用资料
matplotlib颜色官方

论文配色方案(自用)

整理了几套好看的配色方案

JUST ENTER A COLOR!

BrandColors

FLAT UI COLORS2

Matplotlib颜色设置

image

转自:https://blog.csdn.net/m0_52523943/article/details/126785928