oafuncs 0.0.75__py2.py3-none-any.whl → 0.0.77__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- oafuncs/oa_cmap.py +73 -24
- oafuncs/oa_down/User_Agent-list.txt +9521 -0
- oafuncs/oa_down/__init__.py +2 -3
- oafuncs/oa_down/test.py +24 -1
- oafuncs/oa_file.py +40 -4
- oafuncs/oa_nc.py +98 -36
- {oafuncs-0.0.75.dist-info → oafuncs-0.0.77.dist-info}/METADATA +9 -6
- {oafuncs-0.0.75.dist-info → oafuncs-0.0.77.dist-info}/RECORD +11 -11
- oafuncs/oa_down/refs_pdf.py +0 -338
- {oafuncs-0.0.75.dist-info → oafuncs-0.0.77.dist-info}/LICENSE.txt +0 -0
- {oafuncs-0.0.75.dist-info → oafuncs-0.0.77.dist-info}/WHEEL +0 -0
- {oafuncs-0.0.75.dist-info → oafuncs-0.0.77.dist-info}/top_level.txt +0 -0
oafuncs/oa_cmap.py
CHANGED
@@ -1,24 +1,23 @@
|
|
1
1
|
#!/usr/bin/env python
|
2
2
|
# coding=utf-8
|
3
|
-
|
3
|
+
"""
|
4
4
|
Author: Liu Kun && 16031215@qq.com
|
5
5
|
Date: 2024-09-17 16:55:11
|
6
6
|
LastEditors: Liu Kun && 16031215@qq.com
|
7
7
|
LastEditTime: 2024-11-21 13:14:24
|
8
8
|
FilePath: \\Python\\My_Funcs\\OAFuncs\\oafuncs\\oa_cmap.py
|
9
|
-
Description:
|
9
|
+
Description:
|
10
10
|
EditPlatform: vscode
|
11
11
|
ComputerInfo: XPS 15 9510
|
12
12
|
SystemInfo: Windows 11
|
13
13
|
Python Version: 3.11
|
14
|
-
|
15
|
-
|
14
|
+
"""
|
16
15
|
|
17
16
|
import matplotlib as mpl
|
18
17
|
import matplotlib.pyplot as plt
|
19
18
|
import numpy as np
|
20
19
|
|
21
|
-
__all__ = [
|
20
|
+
__all__ = ["show", "extract_colors", "create_custom", "create_diverging", "create_5rgb_txt", "my_cmap"]
|
22
21
|
|
23
22
|
# ** 将cmap用填色图可视化(官网摘抄函数)
|
24
23
|
|
@@ -42,20 +41,20 @@ def show(colormaps: list):
|
|
42
41
|
|
43
42
|
# ** 将cmap转为list,即多个颜色的列表
|
44
43
|
def extract_colors(cmap, n=256):
|
45
|
-
|
44
|
+
"""
|
46
45
|
cmap : cmap名称
|
47
46
|
n : 提取颜色数量
|
48
47
|
return : 提取的颜色列表
|
49
48
|
example : out_cmap = extract_colors('viridis', 256)
|
50
|
-
|
49
|
+
"""
|
51
50
|
c_map = mpl.colormaps.get_cmap(cmap)
|
52
51
|
out_cmap = [c_map(i) for i in np.linspace(0, 1, n)]
|
53
52
|
return out_cmap
|
54
53
|
|
55
54
|
|
56
55
|
# ** 自制cmap,多色,可带位置
|
57
|
-
def create_custom(colors: list, nodes=None): # 利用颜色快速配色
|
58
|
-
|
56
|
+
def create_custom(colors: list, nodes=None, under=None, over=None): # 利用颜色快速配色
|
57
|
+
"""
|
59
58
|
func : 自制cmap,自动确定颜色位置(等比例)
|
60
59
|
description : colors可以是颜色名称,也可以是十六进制颜色代码
|
61
60
|
param {*} colors 颜色
|
@@ -63,62 +62,112 @@ def create_custom(colors: list, nodes=None): # 利用颜色快速配色
|
|
63
62
|
return {*} c_map
|
64
63
|
example : c_map = mk_cmap(['#C2B7F3','#B3BBF2','#B0CBF1','#ACDCF0','#A8EEED'])
|
65
64
|
c_map = mk_cmap(['aliceblue','skyblue','deepskyblue'],[0.0,0.5,1.0])
|
66
|
-
|
65
|
+
"""
|
67
66
|
if nodes is None: # 采取自动分配比例
|
68
|
-
cmap_color = mpl.colors.LinearSegmentedColormap.from_list(
|
67
|
+
cmap_color = mpl.colors.LinearSegmentedColormap.from_list("mycmap", colors)
|
69
68
|
else: # 按照提供比例分配
|
70
69
|
cmap_color = mpl.colors.LinearSegmentedColormap.from_list("mycmap", list(zip(nodes, colors)))
|
70
|
+
if under is not None:
|
71
|
+
cmap_color.set_under(under)
|
72
|
+
if over is not None:
|
73
|
+
cmap_color.set_over(over)
|
71
74
|
return cmap_color
|
72
75
|
|
76
|
+
|
73
77
|
# ** 自制diverging型cmap,默认中间为白色
|
74
78
|
|
75
79
|
|
76
80
|
def create_diverging(colors: list):
|
77
|
-
|
81
|
+
"""
|
78
82
|
func : 自制cmap,双色,中间默认为白色;如果输入偶数个颜色,则中间为白,如果奇数个颜色,则中间色为中间色
|
79
83
|
description : colors可以是颜色名称,也可以是十六进制颜色代码
|
80
84
|
param {*} colors
|
81
85
|
return {*}
|
82
86
|
example : diverging_cmap = mk_cmap_diverging(["#00c0ff", "#a1d3ff", "#DCDCDC", "#FFD39B", "#FF8247"])
|
83
|
-
|
87
|
+
"""
|
84
88
|
# 自定义颜色位置
|
85
89
|
n = len(colors)
|
86
90
|
nodes = np.linspace(0.0, 1.0, n + 1 if n % 2 == 0 else n)
|
87
91
|
newcolors = colors
|
88
92
|
if n % 2 == 0:
|
89
|
-
newcolors.insert(int(n / 2),
|
93
|
+
newcolors.insert(int(n / 2), "#ffffff") # 偶数个颜色,中间为白色
|
90
94
|
cmap_color = mpl.colors.LinearSegmentedColormap.from_list("mycmap", list(zip(nodes, newcolors)))
|
91
95
|
return cmap_color
|
92
96
|
|
97
|
+
|
93
98
|
# ** 根据RGB的txt文档制作色卡(利用Grads调色盘)
|
94
99
|
|
95
100
|
|
96
101
|
def create_5rgb_txt(rgb_txt_filepath: str): # 根据RGB的txt文档制作色卡/根据rgb值制作
|
97
|
-
|
102
|
+
"""
|
98
103
|
func : 根据RGB的txt文档制作色卡
|
99
104
|
description : rgb_txt_filepath='E:/python/colorbar/test.txt'
|
100
105
|
param {*} rgb_txt_filepath txt文件路径
|
101
106
|
return {*} camp
|
102
107
|
example : cmap_color=dcmap(path)
|
103
|
-
|
108
|
+
"""
|
104
109
|
with open(rgb_txt_filepath) as fid:
|
105
110
|
data = fid.readlines()
|
106
111
|
n = len(data)
|
107
112
|
rgb = np.zeros((n, 3))
|
108
113
|
for i in np.arange(n):
|
109
|
-
rgb[i][0] = data[i].split(
|
110
|
-
rgb[i][1] = data[i].split(
|
111
|
-
rgb[i][2] = data[i].split(
|
114
|
+
rgb[i][0] = data[i].split(",")[0]
|
115
|
+
rgb[i][1] = data[i].split(",")[1]
|
116
|
+
rgb[i][2] = data[i].split(",")[2]
|
112
117
|
max_rgb = np.max(rgb)
|
113
118
|
if max_rgb > 2: # 如果rgb值大于2,则认为是0-255的值,需要归一化
|
114
119
|
rgb = rgb / 255.0
|
115
|
-
icmap = mpl.colors.ListedColormap(rgb, name=
|
120
|
+
icmap = mpl.colors.ListedColormap(rgb, name="my_color")
|
116
121
|
return icmap
|
117
122
|
|
118
123
|
|
119
|
-
|
124
|
+
def my_cmap(cmap_name=None, query=False):
|
125
|
+
"""
|
126
|
+
description: Choosing a colormap from the list of available colormaps or a custom colormap
|
127
|
+
param {*} cmap_name:
|
128
|
+
param {*} query:
|
129
|
+
return {*}
|
130
|
+
"""
|
131
|
+
|
132
|
+
my_cmap_dict = {
|
133
|
+
"diverging_1": create_custom(["#4e00b3", "#0000FF", "#00c0ff", "#a1d3ff", "#DCDCDC", "#FFD39B", "#FF8247", "#FF0000", "#FF5F9E"]),
|
134
|
+
"cold_1": create_custom(["#4e00b3", "#0000FF", "#00c0ff", "#a1d3ff", "#DCDCDC"]),
|
135
|
+
"warm_1": create_custom(["#DCDCDC", "#FFD39B", "#FF8247", "#FF0000", "#FF5F9E"]),
|
136
|
+
# "land_1": create_custom(["#3E6436", "#678A59", "#91A176", "#B8A87D", "#D9CBB2"], under="#A6CEE3", over="#FFFFFF"), # 陆地颜色从深绿到浅棕,表示从植被到沙地的递减
|
137
|
+
# "ocean_1": create_custom(["#126697", "#2D88B3", "#4EA1C9", "#78B9D8", "#A6CEE3"], under="#8470FF", over="#3E6436"), # 海洋颜色从深蓝到浅蓝,表示从深海到浅海的递减
|
138
|
+
# "ocean_land_1": create_custom(
|
139
|
+
# [
|
140
|
+
# "#126697", # 深蓝(深海)
|
141
|
+
# "#2D88B3", # 蓝
|
142
|
+
# "#4EA1C9", # 蓝绿
|
143
|
+
# "#78B9D8", # 浅蓝(浅海)
|
144
|
+
# "#A6CEE3", # 浅蓝(近岸)
|
145
|
+
# "#AAAAAA", # 灰色(0值,海平面)
|
146
|
+
# "#D9CBB2", # 沙质土壤色(陆地开始)
|
147
|
+
# "#B8A87D", # 浅棕
|
148
|
+
# "#91A176", # 浅绿
|
149
|
+
# "#678A59", # 中绿
|
150
|
+
# "#3E6436", # 深绿(高山)
|
151
|
+
# ]
|
152
|
+
# ),
|
153
|
+
"colorful_1": create_custom(["#6d00db", "#9800cb", "#F2003C", "#ff4500", "#ff7f00", "#FE28A2", "#FFC0CB", "#DDA0DD", "#40E0D0", "#1a66f2", "#00f7fb", "#8fff88", "#E3FF00"]),
|
154
|
+
}
|
155
|
+
if query:
|
156
|
+
for key, _ in my_cmap_dict.items():
|
157
|
+
print(key)
|
158
|
+
|
159
|
+
if cmap_name in my_cmap_dict:
|
160
|
+
return my_cmap_dict[cmap_name]
|
161
|
+
else:
|
162
|
+
try:
|
163
|
+
return mpl.cm.get_cmap(cmap_name)
|
164
|
+
except ValueError:
|
165
|
+
raise ValueError(f"Unknown cmap name: {cmap_name}")
|
166
|
+
|
167
|
+
|
168
|
+
if __name__ == "__main__":
|
120
169
|
# ** 测试自制cmap
|
121
|
-
colors = [
|
170
|
+
colors = ["#C2B7F3", "#B3BBF2", "#B0CBF1", "#ACDCF0", "#A8EEED"]
|
122
171
|
nodes = [0.0, 0.2, 0.4, 0.6, 1.0]
|
123
172
|
c_map = create_custom(colors, nodes)
|
124
173
|
show([c_map])
|
@@ -128,8 +177,8 @@ if __name__ == '__main__':
|
|
128
177
|
show([diverging_cmap])
|
129
178
|
|
130
179
|
# ** 测试根据RGB的txt文档制作色卡
|
131
|
-
file_path =
|
180
|
+
file_path = "E:/python/colorbar/test.txt"
|
132
181
|
cmap_color = create_5rgb_txt(file_path)
|
133
182
|
|
134
183
|
# ** 测试将cmap转为list
|
135
|
-
out_cmap = extract_colors(
|
184
|
+
out_cmap = extract_colors("viridis", 256)
|