# colorbm
**Repository Path**: weeshin/colorbm
## Basic Information
- **Project Name**: colorbm
- **Description**: Color Beyond Matplotlib:提供matplotlib之外的色彩图以及色板,仅此而已。
- **Primary Language**: Python
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 1
- **Created**: 2020-09-22
- **Last Updated**: 2023-03-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# colorbm
Color Beyond Matplotlib:提供`matplotlib` 之外的色彩图(Colormap)以及色板(Color Palette),仅此而已。
主要用于使用`matplotlib`进行科技论文配图的绘制。
`colorbm`提供三类色彩图或色板(色彩图包含diverging和sequential两类):
1. `diverging` 色彩图:此类色彩图适合绘制需要突出数值正负区别的图片,或者数值大小之间有明显的分界线
2. `sequential` 色彩图:此类色彩图具有连续的色彩变化,适合绘制数值连续变化(Continuous Data)的图片
3. `palettes` 色板:顾名思义,色板是不同颜色的集合,适合绘制分类数据(Categorical Data)以及离散数据(Discrete Data)
所有彩色图以及色板均从网络收集,包括或不仅限于以下图集:
- `ggsci` :[官网](https://nanx.me/ggsci/index.html)
- `seaborn` :[官网](https://seaborn.pydata.org/)
- `cmocean` :[官网](https://github.com/matplotlib/cmocean)
- `scientific` :[官网](http://www.fabiocrameri.ch/colourmaps.php)
- `CMasher` :[官网](https://github.com/1313e/CMasher)
- `CARTO` :[官网](https://github.com/CartoDB/cartocolor)
- `Material Design` :[官网](https://material.io/design/color/the-color-system.html#color-usage-and-palettes)
## 版本变动
20201009:
- 🐛 修正使用`d3_10`时发生的小错误
- 🐛 修正无法输出色板颜色至`xml`文件
- 增加`wesanderson`色版,来自Wes Anderson所导演的电影。[来源网站](https://github.com/karthik/wesanderson)
20200930:
- 添加`colorcet`颜色分类,具体颜色可查询[网站](https://colorcet.holoviz.org/user_guide/index.html)
20200924:
- 增加了`pal`类,现在导入色板与色彩图有同样的操作
- 增加了输出颜色至`xml`与`csv`格式文件,可以用于导入至`paraview`软件;
- 色板中增加了`nintendo`分类,包括`mario`,`luigi`,`yoshi`,`isabelle`以及`tomnook` 五个色板
20200923:
- 增加了色彩图
- 增加了预览色彩图以及色板的功能
- 增加了输出色彩图以及色板名称的功能
- 增加`pip`安装选项
- 增加了色彩图:`turbo`(Google AI Lab)以及`parula`(MATLAB默认色彩图)
20200922:增加来自[世界名画](https://designshack.net/articles/inspiration/10-free-color-palettes-from-10-famous-paintings/) 的色板以及《经济学人》杂志色板
## 使用说明
### 安装
使用`pip`进行安装:
```
pip install colorbm
```
在国内网络环境可以通过`pypi`镜像进行安装,例如:
```
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple colorbm
```
如果使用`anaconda`发行版,可切换至需要安装的虚拟环境,再使用`pip`进行安装:
```
conda activate myenv
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple colorbm
```
### 安装测试
```
import colorbm as cbm
cbm.pcolor('crest').show()
```
如果安装成功便可输出类似下方图片。

### 色彩图与色板名称说明
为了输入方便,所有的色彩图与色板名称均采用`小写字母`
### 色板的使用
调用`pal()`类以使用色板,该类下面有4种方法:
- `as_cmap` :此方法返回`Colormap object`
- `as_cmap_r`:此方法返回反向颜色的色板
- `as_hex` :此方法返回所选色板颜色的`HEX`列表
- `as_rgb`: 此方法返回所选色板颜色的`RGB`列表
这四种方法定义时加上了属性(`property`)装饰器,调用时不用加括号。
例如: `cbm.pal('mario').as_cmap`,将返回通过 `mario` 色板创建的 `Colormap object`
实例:将所选择色板赋值于`matplotlib`中`cmap`参数
下例中调用`npg` 色板
```
import numpy as np
import matplotlib.pyplot as plt
import colorbm as cbm
plt.rcParams['scatter.edgecolors'] = 000000
np.random.seed(19680801)
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
fig, ax = plt.subplots()
colors = np.random.rand(N)
area = (30 * np.random.rand(N)) ** 2 # 0 to 15 point radii
ax.scatter(x, y, s=area, c=colors, alpha=0.5, cmap=cbm.pal('npg').as_cmap)
plt.show()
```

此外,也可将颜色的`HEX`列表用于`seaborn`中
```
import matplotlib.pyplot as plt
import seaborn as sns
import colorbm as cbm
sns.set_palette(sns.color_palette(cbm.pal('npg').as_hex))
# Load the penguins dataset
penguins = sns.load_dataset("penguins")
# Plot sepal width as a function of sepal_length across days
g = sns.lmplot(
data=penguins,
x="bill_length_mm", y="bill_depth_mm", hue="species",
height=5
)
plt.show()
```

### 色彩图的使用
调用`seq()` 或 `div()` 类以使用色彩图,这两类分别对应 `sequential` 和 `diverging` 色彩图
这两类同样有四种方法:
- `as_cmap` :此方法返回`Colormap object`
- `as_cmap_r`:此方法返回反向色彩图
- `as_hex` :此方法返回所选色板颜色的`HEX`列表
- `as_rgb`: 此方法返回所选色板颜色的`RGB`列表
例如:
`cbm.seq('burg').as_cmap` :使用连续色彩图`burg`;
`cbm.div('vlag').as_cmap` :使用离散色彩图`vlag`;
`cbm.seq('burg').as_cmap_r` :使用可以反转的`burg`色彩图。
此外,还可以确定离散颜色的个数,例如: `cbm.seq('burg', 10).as_cmap`。这将从色彩图中通过均匀抽样取得10种颜色。下方是5种与10种离散颜色的区别:

实例:
```
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import colorbm as cbm
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cbm.seq('burg', 50).as_cmap)
plt.show()
```

### 色彩图与色板的测试
调用`pcolor`类对已有色彩图与色板进行测试,此类下方有三种方法:
- `show()` :会临时显示一幅使用该色板的图像。例如:`cbm.pcolor('flare').show()`;或者使用 `cbm.pcolor('flare').show(reversed=True)` 获得反转色彩图。也可以确定离散颜色的个数,例如 `cbm.pcolor('flare', 50).show()`
- `to_xml()`:输出`paraview`使用的色彩图`xml`文件,对色板无效。需要输入保存文件路径以及文件名(如果没有参数输入,默认路径为当前路径,文件名为色彩图名称)。例如: `cbm.pcolor('flare').to_xml(wd=myDir, filename=myName)`
- `to_csv()`:默认输出色彩图以及色板中颜色的`RGB`列表至`csv`文件(如果没有参数输入,默认路径为当前路径,文件名为色彩图名称,保存格式为rgb列表)。也可以设置输出`HEX`列表,例如`cbm.pcolor('flare').to_csv(wd=myDir, filename=myName, fmt='hex')`
### 通过色彩图与色板方案查询色彩图或色板名称
`print(cbm.available_palettes().get)` :输出所有色板的名称。
`print(cbm.available_palettes('nintendo').get)` :输出特定色板方案中有的色板名称
现色板方案有:`ggsci`, `paintings`, `carto`, `misc`,`nintendo`
`print(cbm.available_colormaps().all)` :输出所有色彩图的名称
`print(cbm.available_colormaps('carto').all)` :输出某个色彩图方案中所有色彩图的名称
`print(cbm.available_colormaps().div)` :输出所有离散色彩图的名称
`print(cbm.available_colormaps().seq)` :输出所有连续色彩图的名称
`print(cbm.available_colormaps('carto').div)` :输出某个色彩图方案中所有离散色彩图的名称
`print(cbm.available_colormaps('carto').seq)` :输出某个色彩图方案中所有离散色彩图的名称
现色彩图方案有:`seaborn`,`carto`,`scientific`,`cmasher`,`cmocean`,`misc`,`mat`
## 包含的色彩图以及色板
### 色彩图
#### **`seaborn`**

#### **`carto`**

#### **`cmoceam`**

#### **`scientific`**

#### **`cmasher`**

#### **`mat`** (Material Design)
#### **`misc`**
### 色板
#### **`carto`**

- `antique`
- `bold`
- `pastel`
- `prism`
- `safe`
- `vivid`
#### **_`ggsci`_**
具体颜色可查询[ggsci网站](https://cran.r-project.org/web/packages/ggsci/vignettes/ggsci.html)
- `npg`:自然出版集团出版杂志所用色板(Nature系列杂志)
- `aaas`:美国科学促进会出版杂志所用色板(Science系列杂志)
- `nejm`: 新英格兰医学杂志所用色板
- `lancet`:柳叶刀杂志所用色板
- `jama`:美国医学会杂志所用色板
- `jco`: 临床肿瘤学杂志所用色板
- `ucscgb`: 基因组浏览器用于染色体可视化的色板
- `d3`: JavaScript程序库D3.js所用色板,有四个分类: `d3_10`、`d3_20`、`d3_20b`以及 `d3_20c`
- `locuszoom`: LocusZoom图所用色板
- `igv`:`IGV`软件所用色板,有两个分类可用:`igv`以及`igv_alternative`
- `uchicago`: 芝加哥大学所用色板,有三个分类可用:`uchicago`、`uchicago_light`以及`uchicago_dark`
- `startrek`: 《星际迷航》系列影片所用色板
- `tron`: 《创:战纪》影片所用色板,其背景颜色较暗
- `futurama`: 《飞出个未来》电视剧所用色板
- `rickandmorty`: 《瑞克和莫蒂》电视剧所用色板
- `simpsons`: 《辛普森一家》电视剧所用色板
#### **_`paintings`_**
具体颜色可查询[网站](https://designshack.net/articles/inspiration/10-free-color-palettes-from-10-famous-paintings/)
- `starrynight`:来自梵高的名画《星夜》
- `monalisa`:来自达芬奇的名画《蒙娜丽莎》
- `scream`:来自蒙克的名画《呐喊》
- `lastsupper`:来自达芬奇的名画《最后的晚餐》
- `afternoon`:来自修拉的名画《大碗岛的星期天下午》
- `optometrist`:来自洛克威尔的名画《验光师》
- `kanagawa`:来自葛饰北斋的名画《神奈川冲浪里》
- `kiss`:来自克里姆特的名画《吻》
- `memory`:来自达利的名画《《持续的记忆》
- `lilies`:来自莫奈的名画《睡莲》
#### **_`wesanderson`_**
来自Wes Anderson所导演的电影,包含以下色板
- `bottlerocket1`
- `bottlerocket2`
- `rushmore1`
- `rushmore2`
- `royal1`
- `royal2`
- `rissou`
- `darjeeling1`
- `darjeeling2`
- `chevalier`
- `fantasticfox`
- `moonrise1`
- `moonrise2`
- `moonrise3`
- `cavalcanti`
- `grandbudapest1`
- `grandbudapest2`
- `isleofdogs1`
- `isleofdogs2`
#### **_`misc`_**
包含以下色板
- `economist`: 经济学人杂志所用色板,有三个分类:`economist`、`economist_primary`以及`economist_alternative`