py2ls 0.2.4.2__py3-none-any.whl → 0.2.4.4__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.
- py2ls/.DS_Store +0 -0
- py2ls/.git/index +0 -0
- py2ls/bio.py +1225 -47
- py2ls/data/mygenes_fields_241022.txt +355 -0
- py2ls/ips.py +523 -110
- py2ls/ml2ls.py +1094 -0
- py2ls/netfinder.py +12 -1
- py2ls/plot.py +290 -75
- {py2ls-0.2.4.2.dist-info → py2ls-0.2.4.4.dist-info}/METADATA +1 -1
- {py2ls-0.2.4.2.dist-info → py2ls-0.2.4.4.dist-info}/RECORD +11 -9
- {py2ls-0.2.4.2.dist-info → py2ls-0.2.4.4.dist-info}/WHEEL +0 -0
py2ls/netfinder.py
CHANGED
@@ -742,7 +742,18 @@ def downloader(
|
|
742
742
|
counter_ = str(counter)
|
743
743
|
new_filename = f"{base}_{counter_}{ext}"
|
744
744
|
counter += 1
|
745
|
-
return new_filename
|
745
|
+
return new_filename
|
746
|
+
|
747
|
+
if url.startswith("ftp"):
|
748
|
+
import urllib.request
|
749
|
+
|
750
|
+
if dir_save is None:
|
751
|
+
dir_save = "./"
|
752
|
+
dir_save+= os.path.basename(url)
|
753
|
+
print(dir_save)
|
754
|
+
urllib.request.urlretrieve(url, dir_save)
|
755
|
+
print(f"Downloaded file to: {dir_save}")
|
756
|
+
return None
|
746
757
|
|
747
758
|
fpath_tmp, corrected_fname = None, None
|
748
759
|
if not isinstance(kind, list):
|
py2ls/plot.py
CHANGED
@@ -11,12 +11,14 @@ import logging
|
|
11
11
|
import os
|
12
12
|
import re
|
13
13
|
from typing import Union
|
14
|
-
from .ips import fsave, fload, mkdir, listdir, figsave, strcmp, unique, get_os, ssplit,plt_font
|
14
|
+
from .ips import fsave, fload, mkdir, listdir, figsave, strcmp, unique, get_os, ssplit,plt_font,flatten
|
15
15
|
from .stats import *
|
16
16
|
from .netfinder import get_soup, fetch
|
17
17
|
|
18
18
|
# Suppress INFO messages from fontTools
|
19
|
-
logging.getLogger("fontTools").setLevel(logging.
|
19
|
+
logging.getLogger("fontTools").setLevel(logging.ERROR)
|
20
|
+
logging.getLogger('matplotlib').setLevel(logging.ERROR)
|
21
|
+
|
20
22
|
|
21
23
|
|
22
24
|
def add_text(ax=None, height_offset=0.5, fmt=".1f", **kwargs):
|
@@ -1895,6 +1897,16 @@ def figsets(*args, **kwargs):
|
|
1895
1897
|
if ("fo" in key) and (("size" in key) or ("sz" in key)):
|
1896
1898
|
fontsize = value
|
1897
1899
|
plt.rcParams.update({"font.size": fontsize})
|
1900
|
+
# Customize tick labels
|
1901
|
+
ax.tick_params(axis='both', which='major', labelsize=fontsize)
|
1902
|
+
for label in ax.get_xticklabels() + ax.get_yticklabels():
|
1903
|
+
label.set_fontname(fontname)
|
1904
|
+
|
1905
|
+
# Optionally adjust legend font properties if a legend is included
|
1906
|
+
if ax.get_legend():
|
1907
|
+
for text in ax.get_legend().get_texts():
|
1908
|
+
text.set_fontsize(fontsize)
|
1909
|
+
text.set_fontname(fontname)
|
1898
1910
|
# style
|
1899
1911
|
if "st" in key.lower() or "th" in key.lower():
|
1900
1912
|
if isinstance(value, str):
|
@@ -3143,15 +3155,20 @@ def plotxy(
|
|
3143
3155
|
return g, ax
|
3144
3156
|
return ax
|
3145
3157
|
|
3158
|
+
def norm_cmap(data, cmap="coolwarm", min_max=[0, 1]):
|
3159
|
+
norm_ = plt.Normalize(min_max[0], min_max[1])
|
3160
|
+
colormap = plt.get_cmap(cmap)
|
3161
|
+
return colormap(norm_(data))
|
3146
3162
|
|
3147
3163
|
def volcano(
|
3148
3164
|
data:pd.DataFrame,
|
3149
3165
|
x:str,
|
3150
3166
|
y:str,
|
3151
|
-
gene_col=None,
|
3152
|
-
top_genes=5,
|
3153
|
-
thr_x=np.log2(1.5),
|
3167
|
+
gene_col:str=None,
|
3168
|
+
top_genes=[5, 5], # [down-regulated, up-regulated]
|
3169
|
+
thr_x=np.log2(1.5), # default: 0.585
|
3154
3170
|
thr_y=-np.log10(0.05),
|
3171
|
+
sort_xy="x", #'y'
|
3155
3172
|
colors=("#00BFFF", "#9d9a9a", "#FF3030"),
|
3156
3173
|
s=20,
|
3157
3174
|
fill=True, # plot filled scatter
|
@@ -3163,7 +3180,11 @@ def volcano(
|
|
3163
3180
|
ax=None,
|
3164
3181
|
verbose=False,
|
3165
3182
|
kws_text=dict(fontsize=10, color="k"),
|
3166
|
-
|
3183
|
+
kws_bbox=dict(facecolor='none',
|
3184
|
+
alpha=0.5,
|
3185
|
+
edgecolor='black',
|
3186
|
+
boxstyle='round,pad=0.3'),# '{}' to hide
|
3187
|
+
kws_arrow=dict(color="k", lw=0.5),# '{}' to hide
|
3167
3188
|
**kwargs,
|
3168
3189
|
):
|
3169
3190
|
"""
|
@@ -3179,7 +3200,7 @@ def volcano(
|
|
3179
3200
|
Column name for y-axis values (e.g., -log10(FDR)).
|
3180
3201
|
gene_col : str, optional
|
3181
3202
|
Column name for gene names. If provided, gene names will be displayed. Default is None.
|
3182
|
-
top_genes : int, optional
|
3203
|
+
top_genes : int, list, optional
|
3183
3204
|
Number of top genes to label based on y-axis values. Default is 5.
|
3184
3205
|
thr_x : float, optional
|
3185
3206
|
Threshold for x-axis values. Default is 0.585.
|
@@ -3233,21 +3254,39 @@ def volcano(
|
|
3233
3254
|
kws_figsets = v_arg
|
3234
3255
|
kwargs.pop(k_arg, None)
|
3235
3256
|
break
|
3236
|
-
|
3237
|
-
data
|
3257
|
+
|
3258
|
+
data=data.copy()
|
3259
|
+
# filter nan
|
3260
|
+
data = data.dropna(subset=[x, y]) # Drop rows with NaN in x or y
|
3261
|
+
data.loc[:,"color"] = np.where(
|
3238
3262
|
(data[x] > thr_x) & (data[y] > thr_y),
|
3239
3263
|
colors[2],
|
3240
|
-
np.where((data[x] < -thr_x) & (data[y] > thr_y),
|
3241
|
-
|
3242
|
-
|
3243
|
-
# Selecting top significant points for labeling
|
3244
|
-
sele_gene = (
|
3245
|
-
data.query("color != @colors[2]") # Exclude gray points
|
3246
|
-
.groupby("color", axis=0)
|
3247
|
-
.apply(lambda x: x.sort_values(y, ascending=False).head(top_genes))
|
3248
|
-
.droplevel(level=0)
|
3264
|
+
np.where((data[x] < -thr_x) & (data[y] > thr_y),
|
3265
|
+
colors[0],
|
3266
|
+
colors[1]),
|
3249
3267
|
)
|
3250
|
-
|
3268
|
+
top_genes=[top_genes, top_genes] if isinstance(top_genes,int) else top_genes
|
3269
|
+
|
3270
|
+
# could custom how to select the top genes, x: x has priority
|
3271
|
+
sort_by_x_y=[x,y] if sort_xy=="x" else [y,x]
|
3272
|
+
ascending_up=[True, True] if sort_xy=="x" else [False, True]
|
3273
|
+
ascending_down=[False, True] if sort_xy=="x" else [False, False]
|
3274
|
+
|
3275
|
+
down_reg_genes = data[
|
3276
|
+
(data["color"] == colors[0]) &
|
3277
|
+
(data[x].abs() > thr_x) &
|
3278
|
+
(data[y] > thr_y)
|
3279
|
+
].sort_values(by=sort_by_x_y, ascending=ascending_up).head(top_genes[0])
|
3280
|
+
up_reg_genes = data[
|
3281
|
+
(data["color"] == colors[2]) &
|
3282
|
+
(data[x].abs() > thr_x) &
|
3283
|
+
(data[y] > thr_y)
|
3284
|
+
].sort_values(by=sort_by_x_y, ascending=ascending_down).head(top_genes[1])
|
3285
|
+
sele_gene = pd.concat([down_reg_genes, up_reg_genes])
|
3286
|
+
|
3287
|
+
palette = {colors[0]: colors[0],
|
3288
|
+
colors[1]: colors[1],
|
3289
|
+
colors[2]: colors[2]}
|
3251
3290
|
# Plot setup
|
3252
3291
|
if ax is None:
|
3253
3292
|
ax = plt.gca()
|
@@ -3265,7 +3304,7 @@ def volcano(
|
|
3265
3304
|
data=data,
|
3266
3305
|
x=x,
|
3267
3306
|
y=y,
|
3268
|
-
|
3307
|
+
hue="color",
|
3269
3308
|
palette=palette,
|
3270
3309
|
s=s,
|
3271
3310
|
linewidths=edgelinewidth,
|
@@ -3277,66 +3316,64 @@ def volcano(
|
|
3277
3316
|
)
|
3278
3317
|
|
3279
3318
|
# Add threshold lines for x and y axes
|
3280
|
-
|
3281
|
-
|
3282
|
-
|
3319
|
+
ax.axhline(y=thr_y, color="black", linestyle="--",lw=1)
|
3320
|
+
ax.axvline(x=-thr_x, color="black", linestyle="--",lw=1)
|
3321
|
+
ax.axvline(x=thr_x, color="black", linestyle="--",lw=1)
|
3283
3322
|
|
3284
3323
|
# Add gene labels for selected significant points
|
3285
3324
|
if gene_col:
|
3286
3325
|
texts = []
|
3287
|
-
if kws_text:
|
3288
|
-
|
3289
|
-
|
3290
|
-
|
3291
|
-
|
3292
|
-
|
3293
|
-
|
3294
|
-
|
3295
|
-
|
3296
|
-
|
3297
|
-
|
3298
|
-
|
3299
|
-
|
3300
|
-
|
3301
|
-
|
3302
|
-
|
3303
|
-
|
3304
|
-
|
3305
|
-
|
3306
|
-
|
3307
|
-
|
3308
|
-
|
3309
|
-
|
3310
|
-
|
3311
|
-
|
3312
|
-
|
3313
|
-
|
3314
|
-
|
3315
|
-
|
3316
|
-
|
3317
|
-
|
3318
|
-
|
3319
|
-
"simple",
|
3320
|
-
"wedge",
|
3321
|
-
]
|
3322
|
-
arrowstyle = kws_arrow.pop("style", "-")
|
3323
|
-
arrowcolor = kws_arrow.pop("color", "0.5")
|
3324
|
-
arrowlinewidth = kws_arrow.pop("lw", 0.5)
|
3325
|
-
shrinkA = kws_arrow.pop("shrinkA", 5)
|
3326
|
-
shrinkB = kws_arrow.pop("shrinkB", 5)
|
3327
|
-
arrowstyle = strcmp(arrowstyle, arrowstyles)[0]
|
3328
|
-
adjust_text(
|
3329
|
-
texts,
|
3330
|
-
expand_text=(1.05, 1.2),
|
3331
|
-
arrowprops=dict(
|
3332
|
-
arrowstyle=arrowstyle,
|
3333
|
-
color=arrowcolor,
|
3334
|
-
lw=arrowlinewidth,
|
3335
|
-
shrinkA=shrinkA,
|
3336
|
-
shrinkB=shrinkB,
|
3337
|
-
**kws_arrow,
|
3338
|
-
),
|
3326
|
+
# if kws_text:
|
3327
|
+
fontname = kws_text.pop("fontname", "Arial")
|
3328
|
+
textcolor = kws_text.pop("color", "k")
|
3329
|
+
fontsize = kws_text.pop("fontsize", 10)
|
3330
|
+
arrowstyles = [
|
3331
|
+
"->","<-","<->","<|-","-|>","<|-|>",
|
3332
|
+
"-","-[","-[",
|
3333
|
+
"fancy","simple","wedge",
|
3334
|
+
]
|
3335
|
+
arrowstyle = kws_arrow.pop("style", "<|-")
|
3336
|
+
arrowstyle = strcmp(arrowstyle, arrowstyles,scorer='strict')[0]
|
3337
|
+
expand=kws_arrow.pop("expand",(1.05,1.1))
|
3338
|
+
arrowcolor = kws_arrow.pop("color", "0.4")
|
3339
|
+
arrowlinewidth = kws_arrow.pop("lw", 0.75)
|
3340
|
+
shrinkA = kws_arrow.pop("shrinkA", 0)
|
3341
|
+
shrinkB = kws_arrow.pop("shrinkB", 0)
|
3342
|
+
mutation_scale = kws_arrow.pop("head", 10)
|
3343
|
+
arrow_fill=kws_arrow.pop("fill", False)
|
3344
|
+
for i in range(sele_gene.shape[0]):
|
3345
|
+
if isinstance(textcolor, list): # be consistant with dots's color
|
3346
|
+
textcolor = colors[0] if sele_gene[x].iloc[i] > 0 else colors[1]
|
3347
|
+
texts.append(
|
3348
|
+
ax.text(
|
3349
|
+
x=sele_gene[x].iloc[i],
|
3350
|
+
y=sele_gene[y].iloc[i],
|
3351
|
+
s=sele_gene[gene_col].iloc[i],
|
3352
|
+
bbox=kws_bbox if kws_bbox else None,
|
3353
|
+
fontdict={
|
3354
|
+
"fontsize": fontsize,
|
3355
|
+
"color": textcolor,
|
3356
|
+
"fontname": fontname,
|
3357
|
+
},
|
3339
3358
|
)
|
3359
|
+
)
|
3360
|
+
print(arrowstyle)
|
3361
|
+
adjust_text(
|
3362
|
+
texts,
|
3363
|
+
expand=expand,
|
3364
|
+
min_arrow_len=5,
|
3365
|
+
ax=ax,
|
3366
|
+
arrowprops=dict(
|
3367
|
+
arrowstyle=arrowstyle,
|
3368
|
+
fill=arrow_fill,
|
3369
|
+
color=arrowcolor,
|
3370
|
+
lw=arrowlinewidth,
|
3371
|
+
shrinkA=shrinkA,
|
3372
|
+
shrinkB=shrinkB,
|
3373
|
+
mutation_scale=mutation_scale,
|
3374
|
+
**kws_arrow,
|
3375
|
+
)
|
3376
|
+
)
|
3340
3377
|
|
3341
3378
|
figsets(**kws_figsets)
|
3342
3379
|
|
@@ -3426,3 +3463,181 @@ def sns_func_info(dir_save=None):
|
|
3426
3463
|
dir_save + "sns_info.json",
|
3427
3464
|
sns_info,
|
3428
3465
|
)
|
3466
|
+
|
3467
|
+
|
3468
|
+
|
3469
|
+
|
3470
|
+
|
3471
|
+
|
3472
|
+
def venn(
|
3473
|
+
lists:list,
|
3474
|
+
labels:list,
|
3475
|
+
ax=None,
|
3476
|
+
colors=None,
|
3477
|
+
edgecolor="0.25",
|
3478
|
+
alpha=0.75,
|
3479
|
+
linewidth=.75,
|
3480
|
+
linestyle="-",
|
3481
|
+
fontname='Arial',
|
3482
|
+
fontsize=11,
|
3483
|
+
fontweight="normal",
|
3484
|
+
fontstyle="normal",
|
3485
|
+
label_align="center",
|
3486
|
+
label_baseline="center",
|
3487
|
+
subset_fontsize=9,
|
3488
|
+
subset_fontweight="normal",
|
3489
|
+
subset_fontstyle="normal",
|
3490
|
+
subset_label_format="{:d}",
|
3491
|
+
shadow=False,
|
3492
|
+
custom_texts=None,
|
3493
|
+
hatches=None,
|
3494
|
+
per_circle_styles=None,
|
3495
|
+
**kwargs
|
3496
|
+
):
|
3497
|
+
"""
|
3498
|
+
Advanced Venn diagram plotting function with extensive customization options.
|
3499
|
+
|
3500
|
+
Parameters:
|
3501
|
+
lists: list of sets, 2 or 3 sets
|
3502
|
+
labels: list of strings, labels for the sets
|
3503
|
+
ax: matplotlib axis, optional
|
3504
|
+
colors: list of colors, colors for the Venn diagram patches
|
3505
|
+
edgecolor: string, color of the circle edges
|
3506
|
+
alpha: float, transparency level for the patches
|
3507
|
+
linewidth: float, width of the circle edges
|
3508
|
+
linestyle: string, line style for the circles
|
3509
|
+
fontname: string, font for set labels
|
3510
|
+
fontsize: int, font size for set labels
|
3511
|
+
fontweight: string, weight of the set label font (e.g., 'bold', 'light')
|
3512
|
+
fontstyle: string, style of the set label font (e.g., 'italic')
|
3513
|
+
label_align: string, horizontal alignment of set labels ('left', 'center', 'right')
|
3514
|
+
label_baseline: string, vertical alignment of set labels ('top', 'center', 'bottom')
|
3515
|
+
subset_fontsize: int, font size for subset labels (the numbers)
|
3516
|
+
subset_fontweight: string, weight of subset label font
|
3517
|
+
subset_fontstyle: string, style of subset label font
|
3518
|
+
subset_label_format: string, format for subset labels (e.g., "{:.2f}" for floats)
|
3519
|
+
shadow: bool, add shadow effect to the patches
|
3520
|
+
custom_texts: list of custom texts to replace the subset labels
|
3521
|
+
hatches: list of hatch patterns for the patches
|
3522
|
+
per_circle_styles: dict, custom styles for each circle (e.g., {'circle_1': {'color': 'red'}})
|
3523
|
+
**kwargs: additional keyword arguments passed to venn2 or venn3
|
3524
|
+
"""
|
3525
|
+
if ax is None:
|
3526
|
+
ax = plt.gca()
|
3527
|
+
lists=[set(flatten(i, verbose=False)) for i in lists]
|
3528
|
+
# Function to apply text styles to labels
|
3529
|
+
def apply_text_style(text, fontname, fontsize, fontweight, fontstyle):
|
3530
|
+
if text: # Ensure text exists
|
3531
|
+
if fontname:
|
3532
|
+
text.set_fontname(fontname)
|
3533
|
+
if fontsize:
|
3534
|
+
text.set_fontsize(fontsize)
|
3535
|
+
if fontweight:
|
3536
|
+
text.set_fontweight(fontweight)
|
3537
|
+
if fontstyle:
|
3538
|
+
text.set_fontstyle(fontstyle)
|
3539
|
+
# Alignment customization
|
3540
|
+
text.set_horizontalalignment(label_align)
|
3541
|
+
text.set_verticalalignment(label_baseline)
|
3542
|
+
|
3543
|
+
if len(lists) == 2:
|
3544
|
+
from matplotlib_venn import venn2, venn2_circles
|
3545
|
+
v = venn2(subsets=lists, set_labels=labels, ax=ax, **kwargs)
|
3546
|
+
venn_circles = venn2_circles(subsets=lists, ax=ax,color=edgecolor)
|
3547
|
+
if not isinstance(linewidth,list):
|
3548
|
+
linewidth=[linewidth]
|
3549
|
+
if isinstance(linestyle,str):
|
3550
|
+
linestyle=[linestyle]
|
3551
|
+
linewidth=linewidth*2 if len(linewidth)==1 else linewidth
|
3552
|
+
linestyle=linestyle*2 if len(linestyle)==1 else linestyle
|
3553
|
+
for i in range(2):
|
3554
|
+
venn_circles[i].set_lw(linewidth[i])
|
3555
|
+
venn_circles[i].set_ls(linestyle[i])
|
3556
|
+
# Apply styles to set labels
|
3557
|
+
for i, text in enumerate(v.set_labels):
|
3558
|
+
apply_text_style(text, fontname, fontsize, fontweight, fontstyle)
|
3559
|
+
|
3560
|
+
# Apply styles to subset labels
|
3561
|
+
for i, text in enumerate(v.subset_labels):
|
3562
|
+
if text: # Ensure text exists
|
3563
|
+
if custom_texts: # Custom text handling
|
3564
|
+
text.set_text(custom_texts[i])
|
3565
|
+
else: # Default subset label formatting
|
3566
|
+
subset_size = (
|
3567
|
+
len(lists[i % 2])
|
3568
|
+
if i in [0, 1]
|
3569
|
+
else len(lists[0].intersection(lists[1]))
|
3570
|
+
)
|
3571
|
+
text.set_text(subset_label_format.format(subset_size))
|
3572
|
+
apply_text_style(
|
3573
|
+
text, None, subset_fontsize, subset_fontweight, subset_fontstyle
|
3574
|
+
)
|
3575
|
+
elif len(lists) == 3:
|
3576
|
+
from matplotlib_venn import venn3, venn3_circles
|
3577
|
+
v = venn3(
|
3578
|
+
subsets=lists, set_labels=labels, set_colors=colors, ax=ax, **kwargs
|
3579
|
+
)
|
3580
|
+
venn_circles = venn3_circles(
|
3581
|
+
subsets=lists, ax=ax,color=edgecolor
|
3582
|
+
)
|
3583
|
+
if not isinstance(linewidth,list):
|
3584
|
+
linewidth=[linewidth]
|
3585
|
+
if isinstance(linestyle,str):
|
3586
|
+
linestyle=[linestyle]
|
3587
|
+
linewidth=linewidth*3 if len(linewidth)==1 else linewidth
|
3588
|
+
linestyle=linestyle*3 if len(linestyle)==1 else linestyle
|
3589
|
+
for i in range(3):
|
3590
|
+
venn_circles[i].set_lw(linewidth[i])
|
3591
|
+
venn_circles[i].set_ls(linestyle[i])
|
3592
|
+
|
3593
|
+
# Apply styles to set labels
|
3594
|
+
for i, text in enumerate(v.set_labels):
|
3595
|
+
apply_text_style(text, fontname, fontsize, fontweight, fontstyle)
|
3596
|
+
|
3597
|
+
# Apply styles to subset labels
|
3598
|
+
for i, text in enumerate(v.subset_labels):
|
3599
|
+
if text: # Ensure text exists
|
3600
|
+
if custom_texts: # Custom text handling
|
3601
|
+
text.set_text(custom_texts[i])
|
3602
|
+
else: # Default subset label formatting
|
3603
|
+
subset_size = (
|
3604
|
+
len(lists[i])
|
3605
|
+
if i < 3
|
3606
|
+
else len(lists[0].intersection(lists[1], lists[2]))
|
3607
|
+
)
|
3608
|
+
text.set_text(subset_label_format.format(subset_size))
|
3609
|
+
apply_text_style(
|
3610
|
+
text, None, subset_fontsize, subset_fontweight, subset_fontstyle
|
3611
|
+
)
|
3612
|
+
else:
|
3613
|
+
raise ValueError("只支持2或者3个list")
|
3614
|
+
# Set circle and patch customizations (edge color, transparency, hatches)
|
3615
|
+
for i, patch in enumerate(v.patches):
|
3616
|
+
if patch:
|
3617
|
+
if colors:
|
3618
|
+
patch.set_facecolor(colors[i % len(colors)])
|
3619
|
+
patch.set_edgecolor("none")
|
3620
|
+
patch.set_alpha(alpha)
|
3621
|
+
if hatches:
|
3622
|
+
patch.set_hatch(hatches[i % len(hatches)])
|
3623
|
+
if shadow:
|
3624
|
+
from matplotlib.patches import Shadow
|
3625
|
+
shadow_patch = Shadow(patch, -0.02, -0.02, alpha=0.2)
|
3626
|
+
ax.add_patch(shadow_patch)
|
3627
|
+
# # usage:
|
3628
|
+
# venn(
|
3629
|
+
# [rf_features, svm_features, lasso_features],
|
3630
|
+
# ["Random Forest", "SVM-RFE", "a"],
|
3631
|
+
# ax=axs[0], # Specify the axes
|
3632
|
+
# colors=["#BDC8E0", "#E5C0C1", "#D0E9CB"],
|
3633
|
+
# edgecolor="r",
|
3634
|
+
# alpha=1,
|
3635
|
+
# linewidth=[1, 2, 18],# 分别设置字体大小
|
3636
|
+
# linestyle=["-", "--", ":"],
|
3637
|
+
# fontsize=20,
|
3638
|
+
# label_baseline="top",
|
3639
|
+
# subset_label_format="{:.2f}%",
|
3640
|
+
# subset_fontsize=18,
|
3641
|
+
# shadow=False,
|
3642
|
+
# # custom_texts=["a", "b", "c"],
|
3643
|
+
# )
|
@@ -1,4 +1,4 @@
|
|
1
|
-
py2ls/.DS_Store,sha256=
|
1
|
+
py2ls/.DS_Store,sha256=JdpMN4cmDCbGxELP0b4LUPASIOzoxopMYybGVl8zlZ0,6148
|
2
2
|
py2ls/.git/COMMIT_EDITMSG,sha256=AdtqRHle5Ej2EBNPJY79v-SB454v5UK4wuPCPFELiFQ,11
|
3
3
|
py2ls/.git/FETCH_HEAD,sha256=VM-2Jiw6iPaGu0ftg9xwq76OyNPWV0iT1nL0VWiL1zI,100
|
4
4
|
py2ls/.git/HEAD,sha256=KNJb-Cr0wOK3L1CVmyvrhZ4-YLljCl6MYD2tTdsrboA,21
|
@@ -17,7 +17,7 @@ py2ls/.git/hooks/pre-receive.sample,sha256=pMPSuce7P9jRRBwxvU7nGlldZrRPz0ndsxAlI
|
|
17
17
|
py2ls/.git/hooks/prepare-commit-msg.sample,sha256=6d3KpBif3dJe2X_Ix4nsp7bKFjkLI5KuMnbwyOGqRhk,1492
|
18
18
|
py2ls/.git/hooks/push-to-checkout.sample,sha256=pT0HQXmLKHxt16-mSu5HPzBeZdP0lGO7nXQI7DsSv18,2783
|
19
19
|
py2ls/.git/hooks/update.sample,sha256=jV8vqD4QPPCLV-qmdSHfkZT0XL28s32lKtWGCXoU0QY,3650
|
20
|
-
py2ls/.git/index,sha256=
|
20
|
+
py2ls/.git/index,sha256=O4t8fvweL1JsEypzrWigO2hAxCpfQwC4VOW3q8panRk,4232
|
21
21
|
py2ls/.git/info/exclude,sha256=ZnH-g7egfIky7okWTR8nk7IxgFjri5jcXAbuClo7DsE,240
|
22
22
|
py2ls/.git/logs/HEAD,sha256=8ID7WuAe_TlO9g-ARxhIJYdgdL3u3m7-1qrOanaIUlA,3535
|
23
23
|
py2ls/.git/logs/refs/heads/main,sha256=8ID7WuAe_TlO9g-ARxhIJYdgdL3u3m7-1qrOanaIUlA,3535
|
@@ -173,7 +173,7 @@ py2ls/LICENSE,sha256=UOZ1F5fFDe3XXvG4oNnkL1-Ecun7zpHzRxjp-XsMeAo,11324
|
|
173
173
|
py2ls/README.md,sha256=CwvJWAnSXnCnrVHlnEbrxxi6MbjbE_MT6DH2D53S818,11572
|
174
174
|
py2ls/__init__.py,sha256=Nn8jTIvySX7t7DMJ8VNRVctTStgXGjHldOIdZ35PdW8,165
|
175
175
|
py2ls/batman.py,sha256=E7gYofbDzN7S5oCmO_dd5Z1bxxhoYMJSD6s-VaF388E,11398
|
176
|
-
py2ls/bio.py,sha256=
|
176
|
+
py2ls/bio.py,sha256=J-zGAgHiSQwDyUvjMKDOsJZoeTkqGaXcHDYHtMd84SQ,53879
|
177
177
|
py2ls/brain_atlas.py,sha256=w1o5EelRjq89zuFJUNSz4Da8HnTCwAwDAZ4NU4a-bAY,5486
|
178
178
|
py2ls/chat.py,sha256=Yr22GoIvoWhpV3m4fdwV_I0Mn77La346_ymSinR-ORA,3793
|
179
179
|
py2ls/correlators.py,sha256=RbOaJIPLCHJtUm5SFi_4dCJ7VFUPWR0PErfK3K26ad4,18243
|
@@ -182,6 +182,7 @@ py2ls/data/db2ls_sql_chtsht.json,sha256=ls9d7Sm8TLeujanWHfHlWhU85Qz1KnAizO_9X3wU
|
|
182
182
|
py2ls/data/docs_links.json,sha256=kXgbbWo0b8bfV4n6iuuUNLnZipIyLzokUO6Lzmf7nO4,101829
|
183
183
|
py2ls/data/email/email_html_template.html,sha256=UIg3aixWfdNsvVx-j2dX1M5N3G-6DgrnV1Ya1cLjiUQ,2809
|
184
184
|
py2ls/data/lang_code_iso639.json,sha256=qZiU7H2RLJjDMXK22C-jhwzLJCI5vKmampjB1ys4ek4,2157
|
185
|
+
py2ls/data/mygenes_fields_241022.txt,sha256=-7htEdtmqbSRTUKHHVmjUFLBwZZg9u3LFpn9OZMb1qg,11348
|
185
186
|
py2ls/data/sns_info.json,sha256=pEzdg2bhMkwQHZpXx02_7zAP7NvRoCc0Le8PN6Uv0Vk,4074
|
186
187
|
py2ls/data/styles/example/style1.pdf,sha256=Pt_qQJ5kiCSIPiz3TWSwEffHUdj75kKXnZ4MPqpEx4I,29873
|
187
188
|
py2ls/data/styles/example/style2.pdf,sha256=0xduPLPulET38LEP2V2H_q70wqlrrBEo8ttqO-FMrfQ,25449
|
@@ -213,15 +214,16 @@ py2ls/export_requirements.py,sha256=x2WgUF0jYKz9GfA1MVKN-MdsM-oQ8yUeC6Ua8oCymio,
|
|
213
214
|
py2ls/fetch_update.py,sha256=9LXj661GpCEFII2wx_99aINYctDiHni6DOruDs_fdt8,4752
|
214
215
|
py2ls/freqanalysis.py,sha256=F4218VSPbgL5tnngh6xNCYuNnfR-F_QjECUUxrPYZss,32594
|
215
216
|
py2ls/ich2ls.py,sha256=3E9R8oVpyYZXH5PiIQgT3CN5NxLe4Dwtm2LwaeacE6I,21381
|
216
|
-
py2ls/ips.py,sha256=
|
217
|
-
py2ls/
|
217
|
+
py2ls/ips.py,sha256=USmQKEZuqnjJyP5dhXzFG8yMrhrH6L8yt9jFtttuqLI,227772
|
218
|
+
py2ls/ml2ls.py,sha256=XSe2-sLNzUVSvVRkeRGfhrB_q8C49SDK1sekYC1Bats,50277
|
219
|
+
py2ls/netfinder.py,sha256=RJFr80tGEJiuwEx99IBOhI5-ZuXnPdWnGUYpF7XCEwI,56426
|
218
220
|
py2ls/ocr.py,sha256=5lhUbJufIKRSOL6wAWVLEo8TqMYSjoI_Q-IO-_4u3DE,31419
|
219
|
-
py2ls/plot.py,sha256=
|
221
|
+
py2ls/plot.py,sha256=MepTGqtxqHnc_pTixvEXjQHGPTETcTeI1FGXMxBB8L8,144556
|
220
222
|
py2ls/setuptools-70.1.0-py3-none-any.whl,sha256=2bi3cUVal8ip86s0SOvgspteEF8SKLukECi-EWmFomc,882588
|
221
223
|
py2ls/sleep_events_detectors.py,sha256=bQA3HJqv5qnYKJJEIhCyhlDtkXQfIzqksnD0YRXso68,52145
|
222
224
|
py2ls/stats.py,sha256=DMoJd8Z5YV9T1wB-4P52F5K5scfVK55DT8UP4Twcebo,38627
|
223
225
|
py2ls/translator.py,sha256=zBeq4pYZeroqw3DT-5g7uHfVqKd-EQptT6LJ-Adi8JY,34244
|
224
226
|
py2ls/wb_detector.py,sha256=7y6TmBUj9exCZeIgBAJ_9hwuhkDh1x_-yg4dvNY1_GQ,6284
|
225
|
-
py2ls-0.2.4.
|
226
|
-
py2ls-0.2.4.
|
227
|
-
py2ls-0.2.4.
|
227
|
+
py2ls-0.2.4.4.dist-info/METADATA,sha256=OS59HPIjSXN6Zdy5X0AxSfyvQba6SuK66h74n7nVDno,20038
|
228
|
+
py2ls-0.2.4.4.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
229
|
+
py2ls-0.2.4.4.dist-info/RECORD,,
|
File without changes
|