scitex 2.0.0__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.
- scitex/__init__.py +73 -0
- scitex/__main__.py +89 -0
- scitex/__version__.py +14 -0
- scitex/_sh.py +59 -0
- scitex/ai/_LearningCurveLogger.py +583 -0
- scitex/ai/__Classifiers.py +101 -0
- scitex/ai/__init__.py +55 -0
- scitex/ai/_gen_ai/_Anthropic.py +173 -0
- scitex/ai/_gen_ai/_BaseGenAI.py +336 -0
- scitex/ai/_gen_ai/_DeepSeek.py +175 -0
- scitex/ai/_gen_ai/_Google.py +161 -0
- scitex/ai/_gen_ai/_Groq.py +97 -0
- scitex/ai/_gen_ai/_Llama.py +142 -0
- scitex/ai/_gen_ai/_OpenAI.py +230 -0
- scitex/ai/_gen_ai/_PARAMS.py +565 -0
- scitex/ai/_gen_ai/_Perplexity.py +191 -0
- scitex/ai/_gen_ai/__init__.py +32 -0
- scitex/ai/_gen_ai/_calc_cost.py +78 -0
- scitex/ai/_gen_ai/_format_output_func.py +183 -0
- scitex/ai/_gen_ai/_genai_factory.py +71 -0
- scitex/ai/act/__init__.py +8 -0
- scitex/ai/act/_define.py +11 -0
- scitex/ai/classification/__init__.py +7 -0
- scitex/ai/classification/classification_reporter.py +1137 -0
- scitex/ai/classification/classifier_server.py +131 -0
- scitex/ai/classification/classifiers.py +101 -0
- scitex/ai/classification_reporter.py +1161 -0
- scitex/ai/classifier_server.py +131 -0
- scitex/ai/clustering/__init__.py +11 -0
- scitex/ai/clustering/_pca.py +115 -0
- scitex/ai/clustering/_umap.py +376 -0
- scitex/ai/early_stopping.py +149 -0
- scitex/ai/feature_extraction/__init__.py +56 -0
- scitex/ai/feature_extraction/vit.py +148 -0
- scitex/ai/genai/__init__.py +277 -0
- scitex/ai/genai/anthropic.py +177 -0
- scitex/ai/genai/anthropic_provider.py +320 -0
- scitex/ai/genai/anthropic_refactored.py +109 -0
- scitex/ai/genai/auth_manager.py +200 -0
- scitex/ai/genai/base_genai.py +336 -0
- scitex/ai/genai/base_provider.py +291 -0
- scitex/ai/genai/calc_cost.py +78 -0
- scitex/ai/genai/chat_history.py +307 -0
- scitex/ai/genai/cost_tracker.py +276 -0
- scitex/ai/genai/deepseek.py +188 -0
- scitex/ai/genai/deepseek_provider.py +251 -0
- scitex/ai/genai/format_output_func.py +183 -0
- scitex/ai/genai/genai_factory.py +71 -0
- scitex/ai/genai/google.py +169 -0
- scitex/ai/genai/google_provider.py +228 -0
- scitex/ai/genai/groq.py +104 -0
- scitex/ai/genai/groq_provider.py +248 -0
- scitex/ai/genai/image_processor.py +250 -0
- scitex/ai/genai/llama.py +155 -0
- scitex/ai/genai/llama_provider.py +214 -0
- scitex/ai/genai/mock_provider.py +127 -0
- scitex/ai/genai/model_registry.py +304 -0
- scitex/ai/genai/openai.py +230 -0
- scitex/ai/genai/openai_provider.py +293 -0
- scitex/ai/genai/params.py +565 -0
- scitex/ai/genai/perplexity.py +202 -0
- scitex/ai/genai/perplexity_provider.py +205 -0
- scitex/ai/genai/provider_base.py +302 -0
- scitex/ai/genai/provider_factory.py +370 -0
- scitex/ai/genai/response_handler.py +235 -0
- scitex/ai/layer/_Pass.py +21 -0
- scitex/ai/layer/__init__.py +10 -0
- scitex/ai/layer/_switch.py +8 -0
- scitex/ai/loss/_L1L2Losses.py +34 -0
- scitex/ai/loss/__init__.py +12 -0
- scitex/ai/loss/multi_task_loss.py +47 -0
- scitex/ai/metrics/__init__.py +9 -0
- scitex/ai/metrics/_bACC.py +51 -0
- scitex/ai/metrics/silhoute_score_block.py +496 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/__init__.py +0 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/__init__.py +3 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger.py +207 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger2020.py +238 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger913A.py +215 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/rangerqh.py +184 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/setup.py +24 -0
- scitex/ai/optim/__init__.py +13 -0
- scitex/ai/optim/_get_set.py +31 -0
- scitex/ai/optim/_optimizers.py +71 -0
- scitex/ai/plt/__init__.py +21 -0
- scitex/ai/plt/_conf_mat.py +592 -0
- scitex/ai/plt/_learning_curve.py +194 -0
- scitex/ai/plt/_optuna_study.py +111 -0
- scitex/ai/plt/aucs/__init__.py +2 -0
- scitex/ai/plt/aucs/example.py +60 -0
- scitex/ai/plt/aucs/pre_rec_auc.py +223 -0
- scitex/ai/plt/aucs/roc_auc.py +246 -0
- scitex/ai/sampling/undersample.py +29 -0
- scitex/ai/sk/__init__.py +11 -0
- scitex/ai/sk/_clf.py +58 -0
- scitex/ai/sk/_to_sktime.py +100 -0
- scitex/ai/sklearn/__init__.py +26 -0
- scitex/ai/sklearn/clf.py +58 -0
- scitex/ai/sklearn/to_sktime.py +100 -0
- scitex/ai/training/__init__.py +7 -0
- scitex/ai/training/early_stopping.py +150 -0
- scitex/ai/training/learning_curve_logger.py +555 -0
- scitex/ai/utils/__init__.py +22 -0
- scitex/ai/utils/_check_params.py +50 -0
- scitex/ai/utils/_default_dataset.py +46 -0
- scitex/ai/utils/_format_samples_for_sktime.py +26 -0
- scitex/ai/utils/_label_encoder.py +134 -0
- scitex/ai/utils/_merge_labels.py +22 -0
- scitex/ai/utils/_sliding_window_data_augmentation.py +11 -0
- scitex/ai/utils/_under_sample.py +51 -0
- scitex/ai/utils/_verify_n_gpus.py +16 -0
- scitex/ai/utils/grid_search.py +148 -0
- scitex/context/__init__.py +9 -0
- scitex/context/_suppress_output.py +38 -0
- scitex/db/_BaseMixins/_BaseBackupMixin.py +30 -0
- scitex/db/_BaseMixins/_BaseBatchMixin.py +31 -0
- scitex/db/_BaseMixins/_BaseBlobMixin.py +81 -0
- scitex/db/_BaseMixins/_BaseConnectionMixin.py +43 -0
- scitex/db/_BaseMixins/_BaseImportExportMixin.py +39 -0
- scitex/db/_BaseMixins/_BaseIndexMixin.py +29 -0
- scitex/db/_BaseMixins/_BaseMaintenanceMixin.py +33 -0
- scitex/db/_BaseMixins/_BaseQueryMixin.py +52 -0
- scitex/db/_BaseMixins/_BaseRowMixin.py +32 -0
- scitex/db/_BaseMixins/_BaseSchemaMixin.py +44 -0
- scitex/db/_BaseMixins/_BaseTableMixin.py +66 -0
- scitex/db/_BaseMixins/_BaseTransactionMixin.py +52 -0
- scitex/db/_BaseMixins/__init__.py +30 -0
- scitex/db/_PostgreSQL.py +126 -0
- scitex/db/_PostgreSQLMixins/_BackupMixin.py +166 -0
- scitex/db/_PostgreSQLMixins/_BatchMixin.py +82 -0
- scitex/db/_PostgreSQLMixins/_BlobMixin.py +231 -0
- scitex/db/_PostgreSQLMixins/_ConnectionMixin.py +92 -0
- scitex/db/_PostgreSQLMixins/_ImportExportMixin.py +59 -0
- scitex/db/_PostgreSQLMixins/_IndexMixin.py +64 -0
- scitex/db/_PostgreSQLMixins/_MaintenanceMixin.py +175 -0
- scitex/db/_PostgreSQLMixins/_QueryMixin.py +108 -0
- scitex/db/_PostgreSQLMixins/_RowMixin.py +75 -0
- scitex/db/_PostgreSQLMixins/_SchemaMixin.py +126 -0
- scitex/db/_PostgreSQLMixins/_TableMixin.py +176 -0
- scitex/db/_PostgreSQLMixins/_TransactionMixin.py +57 -0
- scitex/db/_PostgreSQLMixins/__init__.py +34 -0
- scitex/db/_SQLite3.py +2136 -0
- scitex/db/_SQLite3Mixins/_BatchMixin.py +243 -0
- scitex/db/_SQLite3Mixins/_BlobMixin.py +229 -0
- scitex/db/_SQLite3Mixins/_ConnectionMixin.py +108 -0
- scitex/db/_SQLite3Mixins/_ImportExportMixin.py +80 -0
- scitex/db/_SQLite3Mixins/_IndexMixin.py +32 -0
- scitex/db/_SQLite3Mixins/_MaintenanceMixin.py +176 -0
- scitex/db/_SQLite3Mixins/_QueryMixin.py +83 -0
- scitex/db/_SQLite3Mixins/_RowMixin.py +75 -0
- scitex/db/_SQLite3Mixins/_TableMixin.py +183 -0
- scitex/db/_SQLite3Mixins/_TransactionMixin.py +71 -0
- scitex/db/_SQLite3Mixins/__init__.py +30 -0
- scitex/db/__init__.py +14 -0
- scitex/db/_delete_duplicates.py +397 -0
- scitex/db/_inspect.py +163 -0
- scitex/decorators/__init__.py +54 -0
- scitex/decorators/_auto_order.py +172 -0
- scitex/decorators/_batch_fn.py +127 -0
- scitex/decorators/_cache_disk.py +32 -0
- scitex/decorators/_cache_mem.py +12 -0
- scitex/decorators/_combined.py +98 -0
- scitex/decorators/_converters.py +282 -0
- scitex/decorators/_deprecated.py +26 -0
- scitex/decorators/_not_implemented.py +30 -0
- scitex/decorators/_numpy_fn.py +86 -0
- scitex/decorators/_pandas_fn.py +121 -0
- scitex/decorators/_preserve_doc.py +19 -0
- scitex/decorators/_signal_fn.py +95 -0
- scitex/decorators/_timeout.py +55 -0
- scitex/decorators/_torch_fn.py +136 -0
- scitex/decorators/_wrap.py +39 -0
- scitex/decorators/_xarray_fn.py +88 -0
- scitex/dev/__init__.py +15 -0
- scitex/dev/_analyze_code_flow.py +284 -0
- scitex/dev/_reload.py +59 -0
- scitex/dict/_DotDict.py +442 -0
- scitex/dict/__init__.py +18 -0
- scitex/dict/_listed_dict.py +42 -0
- scitex/dict/_pop_keys.py +36 -0
- scitex/dict/_replace.py +13 -0
- scitex/dict/_safe_merge.py +62 -0
- scitex/dict/_to_str.py +32 -0
- scitex/dsp/__init__.py +72 -0
- scitex/dsp/_crop.py +122 -0
- scitex/dsp/_demo_sig.py +331 -0
- scitex/dsp/_detect_ripples.py +212 -0
- scitex/dsp/_ensure_3d.py +18 -0
- scitex/dsp/_hilbert.py +78 -0
- scitex/dsp/_listen.py +702 -0
- scitex/dsp/_misc.py +30 -0
- scitex/dsp/_mne.py +32 -0
- scitex/dsp/_modulation_index.py +79 -0
- scitex/dsp/_pac.py +319 -0
- scitex/dsp/_psd.py +102 -0
- scitex/dsp/_resample.py +65 -0
- scitex/dsp/_time.py +36 -0
- scitex/dsp/_transform.py +68 -0
- scitex/dsp/_wavelet.py +212 -0
- scitex/dsp/add_noise.py +111 -0
- scitex/dsp/example.py +253 -0
- scitex/dsp/filt.py +155 -0
- scitex/dsp/norm.py +18 -0
- scitex/dsp/params.py +51 -0
- scitex/dsp/reference.py +43 -0
- scitex/dsp/template.py +25 -0
- scitex/dsp/utils/__init__.py +15 -0
- scitex/dsp/utils/_differential_bandpass_filters.py +120 -0
- scitex/dsp/utils/_ensure_3d.py +18 -0
- scitex/dsp/utils/_ensure_even_len.py +10 -0
- scitex/dsp/utils/_zero_pad.py +48 -0
- scitex/dsp/utils/filter.py +408 -0
- scitex/dsp/utils/pac.py +177 -0
- scitex/dt/__init__.py +8 -0
- scitex/dt/_linspace.py +130 -0
- scitex/etc/__init__.py +15 -0
- scitex/etc/wait_key.py +34 -0
- scitex/gen/_DimHandler.py +196 -0
- scitex/gen/_TimeStamper.py +244 -0
- scitex/gen/__init__.py +95 -0
- scitex/gen/_alternate_kwarg.py +13 -0
- scitex/gen/_cache.py +11 -0
- scitex/gen/_check_host.py +34 -0
- scitex/gen/_ci.py +12 -0
- scitex/gen/_close.py +222 -0
- scitex/gen/_embed.py +78 -0
- scitex/gen/_inspect_module.py +257 -0
- scitex/gen/_is_ipython.py +12 -0
- scitex/gen/_less.py +48 -0
- scitex/gen/_list_packages.py +139 -0
- scitex/gen/_mat2py.py +88 -0
- scitex/gen/_norm.py +170 -0
- scitex/gen/_paste.py +18 -0
- scitex/gen/_print_config.py +84 -0
- scitex/gen/_shell.py +48 -0
- scitex/gen/_src.py +111 -0
- scitex/gen/_start.py +451 -0
- scitex/gen/_symlink.py +55 -0
- scitex/gen/_symlog.py +27 -0
- scitex/gen/_tee.py +238 -0
- scitex/gen/_title2path.py +60 -0
- scitex/gen/_title_case.py +88 -0
- scitex/gen/_to_even.py +84 -0
- scitex/gen/_to_odd.py +34 -0
- scitex/gen/_to_rank.py +39 -0
- scitex/gen/_transpose.py +37 -0
- scitex/gen/_type.py +78 -0
- scitex/gen/_var_info.py +73 -0
- scitex/gen/_wrap.py +17 -0
- scitex/gen/_xml2dict.py +76 -0
- scitex/gen/misc.py +730 -0
- scitex/gen/path.py +0 -0
- scitex/general/__init__.py +5 -0
- scitex/gists/_SigMacro_processFigure_S.py +128 -0
- scitex/gists/_SigMacro_toBlue.py +172 -0
- scitex/gists/__init__.py +12 -0
- scitex/io/_H5Explorer.py +292 -0
- scitex/io/__init__.py +82 -0
- scitex/io/_cache.py +101 -0
- scitex/io/_flush.py +24 -0
- scitex/io/_glob.py +103 -0
- scitex/io/_json2md.py +113 -0
- scitex/io/_load.py +168 -0
- scitex/io/_load_configs.py +146 -0
- scitex/io/_load_modules/__init__.py +38 -0
- scitex/io/_load_modules/_catboost.py +66 -0
- scitex/io/_load_modules/_con.py +20 -0
- scitex/io/_load_modules/_db.py +24 -0
- scitex/io/_load_modules/_docx.py +42 -0
- scitex/io/_load_modules/_eeg.py +110 -0
- scitex/io/_load_modules/_hdf5.py +196 -0
- scitex/io/_load_modules/_image.py +19 -0
- scitex/io/_load_modules/_joblib.py +19 -0
- scitex/io/_load_modules/_json.py +18 -0
- scitex/io/_load_modules/_markdown.py +103 -0
- scitex/io/_load_modules/_matlab.py +37 -0
- scitex/io/_load_modules/_numpy.py +39 -0
- scitex/io/_load_modules/_optuna.py +155 -0
- scitex/io/_load_modules/_pandas.py +69 -0
- scitex/io/_load_modules/_pdf.py +31 -0
- scitex/io/_load_modules/_pickle.py +24 -0
- scitex/io/_load_modules/_torch.py +16 -0
- scitex/io/_load_modules/_txt.py +126 -0
- scitex/io/_load_modules/_xml.py +49 -0
- scitex/io/_load_modules/_yaml.py +23 -0
- scitex/io/_mv_to_tmp.py +19 -0
- scitex/io/_path.py +286 -0
- scitex/io/_reload.py +78 -0
- scitex/io/_save.py +539 -0
- scitex/io/_save_modules/__init__.py +66 -0
- scitex/io/_save_modules/_catboost.py +22 -0
- scitex/io/_save_modules/_csv.py +89 -0
- scitex/io/_save_modules/_excel.py +49 -0
- scitex/io/_save_modules/_hdf5.py +249 -0
- scitex/io/_save_modules/_html.py +48 -0
- scitex/io/_save_modules/_image.py +140 -0
- scitex/io/_save_modules/_joblib.py +25 -0
- scitex/io/_save_modules/_json.py +25 -0
- scitex/io/_save_modules/_listed_dfs_as_csv.py +57 -0
- scitex/io/_save_modules/_listed_scalars_as_csv.py +42 -0
- scitex/io/_save_modules/_matlab.py +24 -0
- scitex/io/_save_modules/_mp4.py +29 -0
- scitex/io/_save_modules/_numpy.py +57 -0
- scitex/io/_save_modules/_optuna_study_as_csv_and_pngs.py +38 -0
- scitex/io/_save_modules/_pickle.py +45 -0
- scitex/io/_save_modules/_plotly.py +27 -0
- scitex/io/_save_modules/_text.py +23 -0
- scitex/io/_save_modules/_torch.py +26 -0
- scitex/io/_save_modules/_yaml.py +29 -0
- scitex/life/__init__.py +10 -0
- scitex/life/_monitor_rain.py +49 -0
- scitex/linalg/__init__.py +17 -0
- scitex/linalg/_distance.py +63 -0
- scitex/linalg/_geometric_median.py +64 -0
- scitex/linalg/_misc.py +73 -0
- scitex/nn/_AxiswiseDropout.py +27 -0
- scitex/nn/_BNet.py +126 -0
- scitex/nn/_BNet_Res.py +164 -0
- scitex/nn/_ChannelGainChanger.py +44 -0
- scitex/nn/_DropoutChannels.py +50 -0
- scitex/nn/_Filters.py +489 -0
- scitex/nn/_FreqGainChanger.py +110 -0
- scitex/nn/_GaussianFilter.py +48 -0
- scitex/nn/_Hilbert.py +111 -0
- scitex/nn/_MNet_1000.py +157 -0
- scitex/nn/_ModulationIndex.py +221 -0
- scitex/nn/_PAC.py +414 -0
- scitex/nn/_PSD.py +40 -0
- scitex/nn/_ResNet1D.py +120 -0
- scitex/nn/_SpatialAttention.py +25 -0
- scitex/nn/_Spectrogram.py +161 -0
- scitex/nn/_SwapChannels.py +50 -0
- scitex/nn/_TransposeLayer.py +19 -0
- scitex/nn/_Wavelet.py +183 -0
- scitex/nn/__init__.py +63 -0
- scitex/os/__init__.py +8 -0
- scitex/os/_mv.py +50 -0
- scitex/parallel/__init__.py +8 -0
- scitex/parallel/_run.py +151 -0
- scitex/path/__init__.py +33 -0
- scitex/path/_clean.py +52 -0
- scitex/path/_find.py +108 -0
- scitex/path/_get_module_path.py +51 -0
- scitex/path/_get_spath.py +35 -0
- scitex/path/_getsize.py +18 -0
- scitex/path/_increment_version.py +87 -0
- scitex/path/_mk_spath.py +51 -0
- scitex/path/_path.py +19 -0
- scitex/path/_split.py +23 -0
- scitex/path/_this_path.py +19 -0
- scitex/path/_version.py +101 -0
- scitex/pd/__init__.py +41 -0
- scitex/pd/_find_indi.py +126 -0
- scitex/pd/_find_pval.py +113 -0
- scitex/pd/_force_df.py +154 -0
- scitex/pd/_from_xyz.py +71 -0
- scitex/pd/_ignore_SettingWithCopyWarning.py +34 -0
- scitex/pd/_melt_cols.py +81 -0
- scitex/pd/_merge_columns.py +221 -0
- scitex/pd/_mv.py +63 -0
- scitex/pd/_replace.py +62 -0
- scitex/pd/_round.py +93 -0
- scitex/pd/_slice.py +63 -0
- scitex/pd/_sort.py +91 -0
- scitex/pd/_to_numeric.py +53 -0
- scitex/pd/_to_xy.py +59 -0
- scitex/pd/_to_xyz.py +110 -0
- scitex/plt/__init__.py +36 -0
- scitex/plt/_subplots/_AxesWrapper.py +182 -0
- scitex/plt/_subplots/_AxisWrapper.py +249 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin.py +414 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py +896 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin.py +368 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_TrackingMixin.py +185 -0
- scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +16 -0
- scitex/plt/_subplots/_FigWrapper.py +226 -0
- scitex/plt/_subplots/_SubplotsWrapper.py +171 -0
- scitex/plt/_subplots/__init__.py +111 -0
- scitex/plt/_subplots/_export_as_csv.py +232 -0
- scitex/plt/_subplots/_export_as_csv_formatters/__init__.py +61 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_bar.py +90 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_barh.py +49 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_boxplot.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_contour.py +39 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_errorbar.py +125 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_eventplot.py +72 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_fill.py +34 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_fill_between.py +36 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_hist.py +79 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow.py +59 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow2d.py +32 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot.py +79 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_box.py +75 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_conf_mat.py +64 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_ecdf.py +44 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_fillv.py +70 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_heatmap.py +66 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_image.py +95 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_joyplot.py +67 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_kde.py +52 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_line.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_ci.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_std.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_median_iqr.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_raster.py +44 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_rectangle.py +103 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_scatter_hist.py +82 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_shaded_line.py +58 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_violin.py +117 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_scatter.py +30 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_barplot.py +51 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_boxplot.py +93 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_heatmap.py +94 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_histplot.py +92 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_jointplot.py +65 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_kdeplot.py +59 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_lineplot.py +58 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_pairplot.py +45 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_scatterplot.py +70 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_stripplot.py +75 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_swarmplot.py +75 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_violinplot.py +155 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_violin.py +64 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_violinplot.py +77 -0
- scitex/plt/_subplots/_export_as_csv_formatters/test_formatters.py +210 -0
- scitex/plt/_subplots/_export_as_csv_formatters/verify_formatters.py +342 -0
- scitex/plt/_subplots/_export_as_csv_formatters.py +115 -0
- scitex/plt/_tpl.py +28 -0
- scitex/plt/ax/__init__.py +114 -0
- scitex/plt/ax/_plot/__init__.py +53 -0
- scitex/plt/ax/_plot/_plot_circular_hist.py +124 -0
- scitex/plt/ax/_plot/_plot_conf_mat.py +136 -0
- scitex/plt/ax/_plot/_plot_cube.py +57 -0
- scitex/plt/ax/_plot/_plot_ecdf.py +84 -0
- scitex/plt/ax/_plot/_plot_fillv.py +55 -0
- scitex/plt/ax/_plot/_plot_heatmap.py +266 -0
- scitex/plt/ax/_plot/_plot_image.py +94 -0
- scitex/plt/ax/_plot/_plot_joyplot.py +76 -0
- scitex/plt/ax/_plot/_plot_raster.py +172 -0
- scitex/plt/ax/_plot/_plot_rectangle.py +69 -0
- scitex/plt/ax/_plot/_plot_scatter_hist.py +133 -0
- scitex/plt/ax/_plot/_plot_shaded_line.py +142 -0
- scitex/plt/ax/_plot/_plot_statistical_shaded_line.py +221 -0
- scitex/plt/ax/_plot/_plot_violin.py +343 -0
- scitex/plt/ax/_style/__init__.py +38 -0
- scitex/plt/ax/_style/_add_marginal_ax.py +44 -0
- scitex/plt/ax/_style/_add_panel.py +92 -0
- scitex/plt/ax/_style/_extend.py +64 -0
- scitex/plt/ax/_style/_force_aspect.py +37 -0
- scitex/plt/ax/_style/_format_label.py +23 -0
- scitex/plt/ax/_style/_hide_spines.py +84 -0
- scitex/plt/ax/_style/_map_ticks.py +182 -0
- scitex/plt/ax/_style/_rotate_labels.py +215 -0
- scitex/plt/ax/_style/_sci_note.py +279 -0
- scitex/plt/ax/_style/_set_log_scale.py +299 -0
- scitex/plt/ax/_style/_set_meta.py +261 -0
- scitex/plt/ax/_style/_set_n_ticks.py +37 -0
- scitex/plt/ax/_style/_set_size.py +16 -0
- scitex/plt/ax/_style/_set_supxyt.py +116 -0
- scitex/plt/ax/_style/_set_ticks.py +276 -0
- scitex/plt/ax/_style/_set_xyt.py +121 -0
- scitex/plt/ax/_style/_share_axes.py +264 -0
- scitex/plt/ax/_style/_shift.py +139 -0
- scitex/plt/ax/_style/_show_spines.py +333 -0
- scitex/plt/color/_PARAMS.py +70 -0
- scitex/plt/color/__init__.py +52 -0
- scitex/plt/color/_add_hue_col.py +41 -0
- scitex/plt/color/_colors.py +205 -0
- scitex/plt/color/_get_colors_from_cmap.py +134 -0
- scitex/plt/color/_interpolate.py +29 -0
- scitex/plt/color/_vizualize_colors.py +54 -0
- scitex/plt/utils/__init__.py +44 -0
- scitex/plt/utils/_calc_bacc_from_conf_mat.py +46 -0
- scitex/plt/utils/_calc_nice_ticks.py +101 -0
- scitex/plt/utils/_close.py +68 -0
- scitex/plt/utils/_colorbar.py +96 -0
- scitex/plt/utils/_configure_mpl.py +295 -0
- scitex/plt/utils/_histogram_utils.py +132 -0
- scitex/plt/utils/_im2grid.py +70 -0
- scitex/plt/utils/_is_valid_axis.py +78 -0
- scitex/plt/utils/_mk_colorbar.py +65 -0
- scitex/plt/utils/_mk_patches.py +26 -0
- scitex/plt/utils/_scientific_captions.py +638 -0
- scitex/plt/utils/_scitex_config.py +223 -0
- scitex/reproduce/__init__.py +14 -0
- scitex/reproduce/_fix_seeds.py +45 -0
- scitex/reproduce/_gen_ID.py +55 -0
- scitex/reproduce/_gen_timestamp.py +35 -0
- scitex/res/__init__.py +5 -0
- scitex/resource/__init__.py +13 -0
- scitex/resource/_get_processor_usages.py +281 -0
- scitex/resource/_get_specs.py +280 -0
- scitex/resource/_log_processor_usages.py +190 -0
- scitex/resource/_utils/__init__.py +31 -0
- scitex/resource/_utils/_get_env_info.py +481 -0
- scitex/resource/limit_ram.py +33 -0
- scitex/scholar/__init__.py +24 -0
- scitex/scholar/_local_search.py +454 -0
- scitex/scholar/_paper.py +244 -0
- scitex/scholar/_pdf_downloader.py +325 -0
- scitex/scholar/_search.py +393 -0
- scitex/scholar/_vector_search.py +370 -0
- scitex/scholar/_web_sources.py +457 -0
- scitex/stats/__init__.py +31 -0
- scitex/stats/_calc_partial_corr.py +17 -0
- scitex/stats/_corr_test_multi.py +94 -0
- scitex/stats/_corr_test_wrapper.py +115 -0
- scitex/stats/_describe_wrapper.py +90 -0
- scitex/stats/_multiple_corrections.py +63 -0
- scitex/stats/_nan_stats.py +93 -0
- scitex/stats/_p2stars.py +116 -0
- scitex/stats/_p2stars_wrapper.py +56 -0
- scitex/stats/_statistical_tests.py +73 -0
- scitex/stats/desc/__init__.py +40 -0
- scitex/stats/desc/_describe.py +189 -0
- scitex/stats/desc/_nan.py +289 -0
- scitex/stats/desc/_real.py +94 -0
- scitex/stats/multiple/__init__.py +14 -0
- scitex/stats/multiple/_bonferroni_correction.py +72 -0
- scitex/stats/multiple/_fdr_correction.py +400 -0
- scitex/stats/multiple/_multicompair.py +28 -0
- scitex/stats/tests/__corr_test.py +277 -0
- scitex/stats/tests/__corr_test_multi.py +343 -0
- scitex/stats/tests/__corr_test_single.py +277 -0
- scitex/stats/tests/__init__.py +22 -0
- scitex/stats/tests/_brunner_munzel_test.py +192 -0
- scitex/stats/tests/_nocorrelation_test.py +28 -0
- scitex/stats/tests/_smirnov_grubbs.py +98 -0
- scitex/str/__init__.py +113 -0
- scitex/str/_clean_path.py +75 -0
- scitex/str/_color_text.py +52 -0
- scitex/str/_decapitalize.py +58 -0
- scitex/str/_factor_out_digits.py +281 -0
- scitex/str/_format_plot_text.py +498 -0
- scitex/str/_grep.py +48 -0
- scitex/str/_latex.py +155 -0
- scitex/str/_latex_fallback.py +471 -0
- scitex/str/_mask_api.py +39 -0
- scitex/str/_mask_api_key.py +8 -0
- scitex/str/_parse.py +158 -0
- scitex/str/_print_block.py +47 -0
- scitex/str/_print_debug.py +68 -0
- scitex/str/_printc.py +62 -0
- scitex/str/_readable_bytes.py +38 -0
- scitex/str/_remove_ansi.py +23 -0
- scitex/str/_replace.py +134 -0
- scitex/str/_search.py +125 -0
- scitex/str/_squeeze_space.py +36 -0
- scitex/tex/__init__.py +10 -0
- scitex/tex/_preview.py +103 -0
- scitex/tex/_to_vec.py +116 -0
- scitex/torch/__init__.py +18 -0
- scitex/torch/_apply_to.py +34 -0
- scitex/torch/_nan_funcs.py +77 -0
- scitex/types/_ArrayLike.py +44 -0
- scitex/types/_ColorLike.py +21 -0
- scitex/types/__init__.py +14 -0
- scitex/types/_is_listed_X.py +70 -0
- scitex/utils/__init__.py +22 -0
- scitex/utils/_compress_hdf5.py +116 -0
- scitex/utils/_email.py +120 -0
- scitex/utils/_grid.py +148 -0
- scitex/utils/_notify.py +247 -0
- scitex/utils/_search.py +121 -0
- scitex/web/__init__.py +38 -0
- scitex/web/_search_pubmed.py +438 -0
- scitex/web/_summarize_url.py +158 -0
- scitex-2.0.0.dist-info/METADATA +307 -0
- scitex-2.0.0.dist-info/RECORD +572 -0
- scitex-2.0.0.dist-info/WHEEL +6 -0
- scitex-2.0.0.dist-info/licenses/LICENSE +7 -0
- scitex-2.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,896 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-18 17:51:44 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
from functools import wraps
|
|
13
|
+
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
14
|
+
|
|
15
|
+
import matplotlib
|
|
16
|
+
import numpy as np
|
|
17
|
+
import pandas as pd
|
|
18
|
+
from scipy.stats import gaussian_kde
|
|
19
|
+
|
|
20
|
+
from ....pd import to_xyz
|
|
21
|
+
from ....types import ArrayLike
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class MatplotlibPlotMixin:
|
|
25
|
+
"""Mixin class for basic plotting operations."""
|
|
26
|
+
|
|
27
|
+
def _get_ax_module(self):
|
|
28
|
+
"""Lazy import ax module to avoid circular imports."""
|
|
29
|
+
from ....plt import ax as ax_module
|
|
30
|
+
return ax_module
|
|
31
|
+
|
|
32
|
+
def plot_image(
|
|
33
|
+
self,
|
|
34
|
+
arr_2d: ArrayLike,
|
|
35
|
+
track: bool = True,
|
|
36
|
+
id: Optional[str] = None,
|
|
37
|
+
**kwargs,
|
|
38
|
+
) -> None:
|
|
39
|
+
# Method Name for downstream csv exporting
|
|
40
|
+
method_name = "plot_image"
|
|
41
|
+
|
|
42
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
43
|
+
with self._no_tracking():
|
|
44
|
+
self._axis_mpl = self._get_ax_module().plot_image(self._axis_mpl, arr_2d, **kwargs)
|
|
45
|
+
|
|
46
|
+
# Tracking
|
|
47
|
+
tracked_dict = {"image_df": pd.DataFrame(arr_2d)}
|
|
48
|
+
if kwargs.get("xyz", False):
|
|
49
|
+
tracked_dict["image_df"] = to_xyz(tracked_dict["image_df"])
|
|
50
|
+
self._track(
|
|
51
|
+
track,
|
|
52
|
+
id,
|
|
53
|
+
method_name,
|
|
54
|
+
tracked_dict,
|
|
55
|
+
None,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
return self._axis_mpl
|
|
59
|
+
|
|
60
|
+
def plot_kde(
|
|
61
|
+
self,
|
|
62
|
+
data: ArrayLike,
|
|
63
|
+
cumulative=False,
|
|
64
|
+
fill=False,
|
|
65
|
+
track: bool = True,
|
|
66
|
+
id: Optional[str] = None,
|
|
67
|
+
**kwargs,
|
|
68
|
+
) -> None:
|
|
69
|
+
# Method Name for downstream csv exporting
|
|
70
|
+
method_name = "plot_kde"
|
|
71
|
+
|
|
72
|
+
# Sample count as label
|
|
73
|
+
n_samples = (~np.isnan(data)).sum()
|
|
74
|
+
if kwargs.get("label"):
|
|
75
|
+
kwargs["label"] = f"{kwargs['label']} (n={n_samples})"
|
|
76
|
+
|
|
77
|
+
# Xlim (kwargs["xlim"] is not accepted in downstream plotters)
|
|
78
|
+
xlim = kwargs.get("xlim")
|
|
79
|
+
if not xlim:
|
|
80
|
+
xlim = (np.nanmin(data), np.nanmax(data))
|
|
81
|
+
|
|
82
|
+
# X
|
|
83
|
+
xx = np.linspace(xlim[0], xlim[1], int(1e3))
|
|
84
|
+
|
|
85
|
+
# Y
|
|
86
|
+
density = gaussian_kde(data)(xx)
|
|
87
|
+
density /= density.sum()
|
|
88
|
+
|
|
89
|
+
# Cumulative
|
|
90
|
+
if cumulative:
|
|
91
|
+
density = np.cumsum(density)
|
|
92
|
+
|
|
93
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
94
|
+
with self._no_tracking():
|
|
95
|
+
# Filled Line
|
|
96
|
+
if fill:
|
|
97
|
+
self._axis_mpl.fill_between(
|
|
98
|
+
xx,
|
|
99
|
+
density,
|
|
100
|
+
)
|
|
101
|
+
# Simple Line
|
|
102
|
+
else:
|
|
103
|
+
self._axis_mpl.plot(xx, density)
|
|
104
|
+
|
|
105
|
+
# Tracking
|
|
106
|
+
tracked_dict = {
|
|
107
|
+
"x": xx,
|
|
108
|
+
"kde": density,
|
|
109
|
+
"n": n_samples,
|
|
110
|
+
}
|
|
111
|
+
self._track(
|
|
112
|
+
track,
|
|
113
|
+
id,
|
|
114
|
+
method_name,
|
|
115
|
+
tracked_dict,
|
|
116
|
+
None,
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
return self._axis_mpl
|
|
120
|
+
|
|
121
|
+
def plot_conf_mat(
|
|
122
|
+
self,
|
|
123
|
+
data: ArrayLike,
|
|
124
|
+
x_labels: Optional[List[str]] = None,
|
|
125
|
+
y_labels: Optional[List[str]] = None,
|
|
126
|
+
title: str = "Confusion Matrix",
|
|
127
|
+
cmap: str = "Blues",
|
|
128
|
+
cbar: bool = True,
|
|
129
|
+
cbar_kw: Dict[str, Any] = {},
|
|
130
|
+
label_rotation_xy: Tuple[float, float] = (15, 15),
|
|
131
|
+
x_extend_ratio: float = 1.0,
|
|
132
|
+
y_extend_ratio: float = 1.0,
|
|
133
|
+
calc_bacc: bool = False,
|
|
134
|
+
track: bool = True,
|
|
135
|
+
id: Optional[str] = None,
|
|
136
|
+
**kwargs,
|
|
137
|
+
) -> None:
|
|
138
|
+
# Method Name for downstream csv exporting
|
|
139
|
+
method_name = "plot_conf_mat"
|
|
140
|
+
|
|
141
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
142
|
+
with self._no_tracking():
|
|
143
|
+
self._axis_mpl, bacc_val = self._get_ax_module().plot_conf_mat(
|
|
144
|
+
self._axis_mpl,
|
|
145
|
+
data,
|
|
146
|
+
x_labels=x_labels,
|
|
147
|
+
y_labels=y_labels,
|
|
148
|
+
title=title,
|
|
149
|
+
cmap=cmap,
|
|
150
|
+
cbar=cbar,
|
|
151
|
+
cbar_kw=cbar_kw,
|
|
152
|
+
label_rotation_xy=label_rotation_xy,
|
|
153
|
+
x_extend_ratio=x_extend_ratio,
|
|
154
|
+
y_extend_ratio=y_extend_ratio,
|
|
155
|
+
calc_bacc=calc_bacc,
|
|
156
|
+
**kwargs,
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
tracked_dict = {"balanced_accuracy": bacc_val}
|
|
160
|
+
# Tracking
|
|
161
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
162
|
+
|
|
163
|
+
return self._axis_mpl, bacc_val
|
|
164
|
+
|
|
165
|
+
# @wraps removed to avoid circular import
|
|
166
|
+
def plot_rectangle(
|
|
167
|
+
self,
|
|
168
|
+
xx: float,
|
|
169
|
+
yy: float,
|
|
170
|
+
width: float,
|
|
171
|
+
height: float,
|
|
172
|
+
track: bool = True,
|
|
173
|
+
id: Optional[str] = None,
|
|
174
|
+
**kwargs,
|
|
175
|
+
) -> None:
|
|
176
|
+
# Method Name for downstream csv exporting
|
|
177
|
+
method_name = "plot_rectangle"
|
|
178
|
+
|
|
179
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
180
|
+
with self._no_tracking():
|
|
181
|
+
self._axis_mpl = self._get_ax_module().plot_rectangle(
|
|
182
|
+
self._axis_mpl, xx, yy, width, height, **kwargs
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
# Tracking
|
|
186
|
+
tracked_dict = {"xx": xx, "yy": yy, "width": width, "height": height}
|
|
187
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
188
|
+
|
|
189
|
+
return self._axis_mpl
|
|
190
|
+
|
|
191
|
+
# @wraps removed to avoid circular import
|
|
192
|
+
def plot_fillv(
|
|
193
|
+
self,
|
|
194
|
+
starts: ArrayLike,
|
|
195
|
+
ends: ArrayLike,
|
|
196
|
+
color: str = "red",
|
|
197
|
+
alpha: float = 0.2,
|
|
198
|
+
track: bool = True,
|
|
199
|
+
id: Optional[str] = None,
|
|
200
|
+
**kwargs,
|
|
201
|
+
) -> None:
|
|
202
|
+
# Method Name for downstream csv exporting
|
|
203
|
+
method_name = "plot_fillv"
|
|
204
|
+
|
|
205
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
206
|
+
with self._no_tracking():
|
|
207
|
+
self._axis_mpl = self._get_ax_module().plot_fillv(
|
|
208
|
+
self._axis_mpl, starts, ends, color=color, alpha=alpha
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
# Tracking
|
|
212
|
+
tracked_dict = {"starts": starts, "ends": ends}
|
|
213
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
214
|
+
|
|
215
|
+
return self._axis_mpl
|
|
216
|
+
|
|
217
|
+
def plot_box(
|
|
218
|
+
self,
|
|
219
|
+
data: ArrayLike,
|
|
220
|
+
track: bool = True,
|
|
221
|
+
id: Optional[str] = None,
|
|
222
|
+
**kwargs,
|
|
223
|
+
) -> None:
|
|
224
|
+
# Method Name for downstream csv exporting
|
|
225
|
+
method_name = "plot_box"
|
|
226
|
+
|
|
227
|
+
# Copy data
|
|
228
|
+
_data = data.copy()
|
|
229
|
+
|
|
230
|
+
# Sample count as label
|
|
231
|
+
n = len(data)
|
|
232
|
+
if kwargs.get("label"):
|
|
233
|
+
kwargs["label"] = kwargs["label"] + f" (n={n})"
|
|
234
|
+
|
|
235
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
236
|
+
with self._no_tracking():
|
|
237
|
+
self._axis_mpl.boxplot(data, **kwargs)
|
|
238
|
+
|
|
239
|
+
# Tracking
|
|
240
|
+
tracked_dict = {
|
|
241
|
+
"data": _data,
|
|
242
|
+
"n": [n for ii in range(len(data))],
|
|
243
|
+
}
|
|
244
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
245
|
+
|
|
246
|
+
return self._axis_mpl
|
|
247
|
+
|
|
248
|
+
def hist(
|
|
249
|
+
self,
|
|
250
|
+
x: ArrayLike,
|
|
251
|
+
bins: Union[int, str, ArrayLike] = 10,
|
|
252
|
+
range: Optional[Tuple[float, float]] = None,
|
|
253
|
+
align_bins: bool = True,
|
|
254
|
+
track: bool = True,
|
|
255
|
+
id: Optional[str] = None,
|
|
256
|
+
**kwargs,
|
|
257
|
+
) -> None:
|
|
258
|
+
"""
|
|
259
|
+
Plot a histogram.
|
|
260
|
+
|
|
261
|
+
This is an override of the standard matplotlib hist function to ensure
|
|
262
|
+
that histogram bin data is properly tracked for CSV export and bins are
|
|
263
|
+
aligned for histograms on the same axis.
|
|
264
|
+
|
|
265
|
+
Args:
|
|
266
|
+
x: Input data
|
|
267
|
+
bins: Bin specification (count, edges, or algorithm)
|
|
268
|
+
range: Optional histogram range (min, max)
|
|
269
|
+
align_bins: Whether to align bins with other histograms on this axis
|
|
270
|
+
track: Whether to track this operation
|
|
271
|
+
id: Identifier for tracking
|
|
272
|
+
**kwargs: Additional keywords passed to matplotlib hist
|
|
273
|
+
|
|
274
|
+
Returns:
|
|
275
|
+
Histogram output
|
|
276
|
+
"""
|
|
277
|
+
# Method Name for downstream csv exporting
|
|
278
|
+
method_name = "hist"
|
|
279
|
+
|
|
280
|
+
# Get the axis ID for bin alignment
|
|
281
|
+
axis_id = str(hash(self._axis_mpl))
|
|
282
|
+
hist_id = id if id is not None else str(self.id)
|
|
283
|
+
|
|
284
|
+
# Align bins if requested and not the first histogram on this axis
|
|
285
|
+
if align_bins:
|
|
286
|
+
from ....plt.utils import histogram_bin_manager
|
|
287
|
+
bins, range = histogram_bin_manager.register_histogram(
|
|
288
|
+
axis_id, hist_id, x, bins, range
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
292
|
+
with self._no_tracking():
|
|
293
|
+
hist_data = self._axis_mpl.hist(x, bins=bins, range=range, **kwargs)
|
|
294
|
+
|
|
295
|
+
# Save histogram result for CSV export
|
|
296
|
+
# hist_data[0] = counts, hist_data[1] = bin_edges
|
|
297
|
+
tracked_dict = {
|
|
298
|
+
"args": (x,),
|
|
299
|
+
"hist_result": (hist_data[0], hist_data[1]),
|
|
300
|
+
"bins": bins,
|
|
301
|
+
"range": range,
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
self._track(track, id, method_name, tracked_dict, kwargs)
|
|
305
|
+
|
|
306
|
+
return hist_data
|
|
307
|
+
|
|
308
|
+
# @wraps removed to avoid circular import
|
|
309
|
+
def plot_raster(
|
|
310
|
+
self,
|
|
311
|
+
positions: List[ArrayLike],
|
|
312
|
+
time: Optional[ArrayLike] = None,
|
|
313
|
+
labels: Optional[List[str]] = None,
|
|
314
|
+
colors: Optional[List[str]] = None,
|
|
315
|
+
track: bool = True,
|
|
316
|
+
id: Optional[str] = None,
|
|
317
|
+
**kwargs,
|
|
318
|
+
) -> None:
|
|
319
|
+
# Method Name for downstream csv exporting
|
|
320
|
+
method_name = "plot_raster"
|
|
321
|
+
|
|
322
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
323
|
+
with self._no_tracking():
|
|
324
|
+
self._axis_mpl, raster_digit_df = self._get_ax_module().plot_raster(
|
|
325
|
+
self._axis_mpl, positions, time=time
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
# Tracking
|
|
329
|
+
tracked_dict = {"raster_digit_df": raster_digit_df}
|
|
330
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
331
|
+
|
|
332
|
+
return self._axis_mpl, raster_digit_df
|
|
333
|
+
|
|
334
|
+
# @wraps removed to avoid circular import
|
|
335
|
+
def plot_ecdf(
|
|
336
|
+
self,
|
|
337
|
+
data: ArrayLike,
|
|
338
|
+
track: bool = True,
|
|
339
|
+
id: Optional[str] = None,
|
|
340
|
+
**kwargs,
|
|
341
|
+
) -> None:
|
|
342
|
+
# Method Name for downstream csv exporting
|
|
343
|
+
method_name = "plot_ecdf"
|
|
344
|
+
|
|
345
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
346
|
+
with self._no_tracking():
|
|
347
|
+
self._axis_mpl, ecdf_df = self._get_ax_module().plot_ecdf(
|
|
348
|
+
self._axis_mpl, data, **kwargs
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
# Tracking
|
|
352
|
+
tracked_dict = {"ecdf_df": ecdf_df}
|
|
353
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
354
|
+
|
|
355
|
+
return self._axis_mpl, ecdf_df
|
|
356
|
+
|
|
357
|
+
# @wraps removed to avoid circular import
|
|
358
|
+
def plot_joyplot(
|
|
359
|
+
self,
|
|
360
|
+
data: ArrayLike,
|
|
361
|
+
orientation: str = "vertical",
|
|
362
|
+
track: bool = True,
|
|
363
|
+
id: Optional[str] = None,
|
|
364
|
+
**kwargs,
|
|
365
|
+
) -> None:
|
|
366
|
+
# Method Name for downstream csv exporting
|
|
367
|
+
method_name = "plot_joyplot"
|
|
368
|
+
|
|
369
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
370
|
+
with self._no_tracking():
|
|
371
|
+
self._axis_mpl = self._get_ax_module().plot_joyplot(
|
|
372
|
+
self._axis_mpl, data, orientation=orientation, **kwargs
|
|
373
|
+
)
|
|
374
|
+
|
|
375
|
+
# Tracking
|
|
376
|
+
tracked_dict = {"joyplot_data": data}
|
|
377
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
378
|
+
|
|
379
|
+
return self._axis_mpl
|
|
380
|
+
|
|
381
|
+
# @wraps removed to avoid circular import
|
|
382
|
+
def plot_joyplot(
|
|
383
|
+
self,
|
|
384
|
+
data: ArrayLike,
|
|
385
|
+
track: bool = True,
|
|
386
|
+
id: Optional[str] = None,
|
|
387
|
+
**kwargs,
|
|
388
|
+
) -> None:
|
|
389
|
+
# Method Name for downstream csv exporting
|
|
390
|
+
method_name = "plot_joyplot"
|
|
391
|
+
|
|
392
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
393
|
+
with self._no_tracking():
|
|
394
|
+
self._axis_mpl = self._get_ax_module().plot_joyplot(self._axis_mpl, data, **kwargs)
|
|
395
|
+
|
|
396
|
+
# Tracking
|
|
397
|
+
tracked_dict = {"joyplot_data": data}
|
|
398
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
399
|
+
|
|
400
|
+
return self._axis_mpl
|
|
401
|
+
|
|
402
|
+
# @wraps removed to avoid circular import
|
|
403
|
+
def plot_scatter_hist(
|
|
404
|
+
self,
|
|
405
|
+
x: ArrayLike,
|
|
406
|
+
y: ArrayLike,
|
|
407
|
+
hist_bins: int = 20,
|
|
408
|
+
scatter_alpha: float = 0.6,
|
|
409
|
+
scatter_size: float = 20,
|
|
410
|
+
scatter_color: str = "blue",
|
|
411
|
+
hist_color_x: str = "blue",
|
|
412
|
+
hist_color_y: str = "red",
|
|
413
|
+
hist_alpha: float = 0.5,
|
|
414
|
+
scatter_ratio: float = 0.8,
|
|
415
|
+
track: bool = True,
|
|
416
|
+
id: Optional[str] = None,
|
|
417
|
+
**kwargs,
|
|
418
|
+
) -> None:
|
|
419
|
+
"""Plot a scatter plot with marginal histograms."""
|
|
420
|
+
# Method Name for downstream csv exporting
|
|
421
|
+
method_name = "plot_scatter_hist"
|
|
422
|
+
|
|
423
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
424
|
+
with self._no_tracking():
|
|
425
|
+
self._axis_mpl, ax_histx, ax_histy, hist_data = self._get_ax_module().plot_scatter_hist(
|
|
426
|
+
self._axis_mpl,
|
|
427
|
+
x,
|
|
428
|
+
y,
|
|
429
|
+
hist_bins=hist_bins,
|
|
430
|
+
scatter_alpha=scatter_alpha,
|
|
431
|
+
scatter_size=scatter_size,
|
|
432
|
+
scatter_color=scatter_color,
|
|
433
|
+
hist_color_x=hist_color_x,
|
|
434
|
+
hist_color_y=hist_color_y,
|
|
435
|
+
hist_alpha=hist_alpha,
|
|
436
|
+
scatter_ratio=scatter_ratio,
|
|
437
|
+
**kwargs,
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
# Tracking
|
|
441
|
+
tracked_dict = {
|
|
442
|
+
"x": x,
|
|
443
|
+
"y": y,
|
|
444
|
+
"hist_x": hist_data["hist_x"],
|
|
445
|
+
"hist_y": hist_data["hist_y"],
|
|
446
|
+
"bin_edges_x": hist_data["bin_edges_x"],
|
|
447
|
+
"bin_edges_y": hist_data["bin_edges_y"],
|
|
448
|
+
}
|
|
449
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
450
|
+
|
|
451
|
+
return self._axis_mpl, ax_histx, ax_histy, hist_data
|
|
452
|
+
|
|
453
|
+
# @wraps removed to avoid circular import
|
|
454
|
+
def plot_heatmap(
|
|
455
|
+
self,
|
|
456
|
+
data: ArrayLike,
|
|
457
|
+
x_labels: Optional[List[str]] = None,
|
|
458
|
+
y_labels: Optional[List[str]] = None,
|
|
459
|
+
cmap: str = "viridis",
|
|
460
|
+
cbar_label: str = "ColorBar Label",
|
|
461
|
+
value_format: str = "{x:.1f}",
|
|
462
|
+
show_annot: bool = True,
|
|
463
|
+
annot_color_lighter: str = "white",
|
|
464
|
+
annot_color_darker: str = "black",
|
|
465
|
+
track: bool = True,
|
|
466
|
+
id: Optional[str] = None,
|
|
467
|
+
**kwargs,
|
|
468
|
+
) -> Tuple[matplotlib.image.AxesImage, matplotlib.colorbar.Colorbar]:
|
|
469
|
+
"""Plot a heatmap on the axes."""
|
|
470
|
+
# Method Name for downstream csv exporting
|
|
471
|
+
method_name = "plot_heatmap"
|
|
472
|
+
|
|
473
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
474
|
+
with self._no_tracking():
|
|
475
|
+
ax, im, cbar = self._get_ax_module().plot_heatmap(
|
|
476
|
+
self._axis_mpl,
|
|
477
|
+
data,
|
|
478
|
+
x_labels=x_labels,
|
|
479
|
+
y_labels=y_labels,
|
|
480
|
+
cmap=cmap,
|
|
481
|
+
cbar_label=cbar_label,
|
|
482
|
+
value_format=value_format,
|
|
483
|
+
show_annot=show_annot,
|
|
484
|
+
annot_color_lighter=annot_color_lighter,
|
|
485
|
+
annot_color_darker=annot_color_darker,
|
|
486
|
+
**kwargs,
|
|
487
|
+
)
|
|
488
|
+
|
|
489
|
+
# Tracking
|
|
490
|
+
tracked_dict = {
|
|
491
|
+
"data": data,
|
|
492
|
+
"x_labels": x_labels,
|
|
493
|
+
"y_labels": y_labels,
|
|
494
|
+
}
|
|
495
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
496
|
+
|
|
497
|
+
return ax, im, cbar
|
|
498
|
+
|
|
499
|
+
# @wraps removed to avoid circular import
|
|
500
|
+
def plot_violin(
|
|
501
|
+
self,
|
|
502
|
+
data: Union[pd.DataFrame, List, ArrayLike],
|
|
503
|
+
x=None,
|
|
504
|
+
y=None,
|
|
505
|
+
hue=None,
|
|
506
|
+
labels=None,
|
|
507
|
+
colors=None,
|
|
508
|
+
half=False,
|
|
509
|
+
track: bool = True,
|
|
510
|
+
id: Optional[str] = None,
|
|
511
|
+
**kwargs,
|
|
512
|
+
) -> None:
|
|
513
|
+
"""Plot a violin plot."""
|
|
514
|
+
# Method Name for downstream csv exporting
|
|
515
|
+
method_name = "plot_violin"
|
|
516
|
+
|
|
517
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
518
|
+
with self._no_tracking():
|
|
519
|
+
# Handle the list-style input case
|
|
520
|
+
if isinstance(data, list) and all(
|
|
521
|
+
isinstance(item, (list, np.ndarray)) for item in data
|
|
522
|
+
):
|
|
523
|
+
self._axis_mpl = self._get_ax_module().plot_violin(
|
|
524
|
+
self._axis_mpl,
|
|
525
|
+
data_list=data,
|
|
526
|
+
labels=labels,
|
|
527
|
+
colors=colors,
|
|
528
|
+
half=half,
|
|
529
|
+
**kwargs,
|
|
530
|
+
)
|
|
531
|
+
# Handle DataFrame or other inputs
|
|
532
|
+
else:
|
|
533
|
+
self._axis_mpl = self._get_ax_module().plot_violin(
|
|
534
|
+
self._axis_mpl,
|
|
535
|
+
data=data,
|
|
536
|
+
x=x,
|
|
537
|
+
y=y,
|
|
538
|
+
hue=hue,
|
|
539
|
+
half=half,
|
|
540
|
+
**kwargs,
|
|
541
|
+
)
|
|
542
|
+
|
|
543
|
+
# Tracking
|
|
544
|
+
tracked_dict = {
|
|
545
|
+
"data": data,
|
|
546
|
+
"x": x,
|
|
547
|
+
"y": y,
|
|
548
|
+
"hue": hue,
|
|
549
|
+
"half": half,
|
|
550
|
+
"labels": labels,
|
|
551
|
+
"colors": colors,
|
|
552
|
+
}
|
|
553
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
554
|
+
return self._axis_mpl
|
|
555
|
+
|
|
556
|
+
# def plot_area(
|
|
557
|
+
# self,
|
|
558
|
+
# x: ArrayLike,
|
|
559
|
+
# y: ArrayLike,
|
|
560
|
+
# stacked: bool = False,
|
|
561
|
+
# fill: bool = True,
|
|
562
|
+
# alpha: float = 0.5,
|
|
563
|
+
# track: bool = True,
|
|
564
|
+
# id: Optional[str] = None,
|
|
565
|
+
# **kwargs,
|
|
566
|
+
# ) -> None:
|
|
567
|
+
# """Plot an area plot."""
|
|
568
|
+
# # Method Name for downstream csv exporting
|
|
569
|
+
# method_name = "plot_area"
|
|
570
|
+
|
|
571
|
+
# # Plotting with pure matplotlib methods under non-tracking context
|
|
572
|
+
# with self._no_tracking():
|
|
573
|
+
# self._axis_mpl = self._get_ax_module().plot_area(
|
|
574
|
+
# self._axis_mpl,
|
|
575
|
+
# x,
|
|
576
|
+
# y,
|
|
577
|
+
# stacked=stacked,
|
|
578
|
+
# fill=fill,
|
|
579
|
+
# alpha=alpha,
|
|
580
|
+
# **kwargs,
|
|
581
|
+
# )
|
|
582
|
+
|
|
583
|
+
# # Tracking
|
|
584
|
+
# tracked_dict = {"x": x, "y": y}
|
|
585
|
+
# self._track(track, id, method_name, tracked_dict, None)
|
|
586
|
+
|
|
587
|
+
# return self._axis_mpl
|
|
588
|
+
|
|
589
|
+
# def plot_radar(
|
|
590
|
+
# self,
|
|
591
|
+
# data: ArrayLike,
|
|
592
|
+
# categories: List[str],
|
|
593
|
+
# groups: Optional[List[str]] = None,
|
|
594
|
+
# fill: bool = True,
|
|
595
|
+
# alpha: float = 0.2,
|
|
596
|
+
# grid_step: int = 5,
|
|
597
|
+
# track: bool = True,
|
|
598
|
+
# id: Optional[str] = None,
|
|
599
|
+
# **kwargs,
|
|
600
|
+
# ) -> None:
|
|
601
|
+
# """Plot a radar/spider chart."""
|
|
602
|
+
# # Method Name for downstream csv exporting
|
|
603
|
+
# method_name = "plot_radar"
|
|
604
|
+
|
|
605
|
+
# # Convert data to DataFrame if not already
|
|
606
|
+
# if not isinstance(data, pd.DataFrame):
|
|
607
|
+
# if groups is not None:
|
|
608
|
+
# data = pd.DataFrame(data, columns=categories, index=groups)
|
|
609
|
+
# else:
|
|
610
|
+
# data = pd.DataFrame(data, columns=categories)
|
|
611
|
+
|
|
612
|
+
# # Plotting with pure matplotlib methods under non-tracking context
|
|
613
|
+
# with self._no_tracking():
|
|
614
|
+
# self._axis_mpl = self._get_ax_module().plot_radar(
|
|
615
|
+
# self._axis_mpl,
|
|
616
|
+
# data,
|
|
617
|
+
# categories=categories,
|
|
618
|
+
# fill=fill,
|
|
619
|
+
# alpha=alpha,
|
|
620
|
+
# grid_step=grid_step,
|
|
621
|
+
# **kwargs,
|
|
622
|
+
# )
|
|
623
|
+
|
|
624
|
+
# # Tracking
|
|
625
|
+
# tracked_dict = {"radar_data": data}
|
|
626
|
+
# self._track(track, id, method_name, tracked_dict, None)
|
|
627
|
+
|
|
628
|
+
# return self._axis_mpl
|
|
629
|
+
|
|
630
|
+
# def plot_bubble(
|
|
631
|
+
# self,
|
|
632
|
+
# x: ArrayLike,
|
|
633
|
+
# y: ArrayLike,
|
|
634
|
+
# size: ArrayLike,
|
|
635
|
+
# color: Optional[ArrayLike] = None,
|
|
636
|
+
# size_scale: float = 1000.0,
|
|
637
|
+
# alpha: float = 0.6,
|
|
638
|
+
# colormap: str = "viridis",
|
|
639
|
+
# show_colorbar: bool = True,
|
|
640
|
+
# colorbar_label: str = "",
|
|
641
|
+
# track: bool = True,
|
|
642
|
+
# id: Optional[str] = None,
|
|
643
|
+
# **kwargs,
|
|
644
|
+
# ) -> None:
|
|
645
|
+
# """Plot a bubble chart."""
|
|
646
|
+
# # Method Name for downstream csv exporting
|
|
647
|
+
# method_name = "plot_bubble"
|
|
648
|
+
|
|
649
|
+
# # Plotting with pure matplotlib methods under non-tracking context
|
|
650
|
+
# with self._no_tracking():
|
|
651
|
+
# self._axis_mpl = self._get_ax_module().plot_bubble(
|
|
652
|
+
# self._axis_mpl,
|
|
653
|
+
# x,
|
|
654
|
+
# y,
|
|
655
|
+
# size,
|
|
656
|
+
# color=color,
|
|
657
|
+
# size_scale=size_scale,
|
|
658
|
+
# alpha=alpha,
|
|
659
|
+
# colormap=colormap,
|
|
660
|
+
# show_colorbar=show_colorbar,
|
|
661
|
+
# colorbar_label=colorbar_label,
|
|
662
|
+
# **kwargs,
|
|
663
|
+
# )
|
|
664
|
+
|
|
665
|
+
# # Tracking
|
|
666
|
+
# tracked_dict = {"x": x, "y": y, "size": size}
|
|
667
|
+
# if color is not None:
|
|
668
|
+
# tracked_dict["color"] = color
|
|
669
|
+
|
|
670
|
+
# self._track(track, id, method_name, tracked_dict, None)
|
|
671
|
+
|
|
672
|
+
# return self._axis_mpl
|
|
673
|
+
|
|
674
|
+
# def plot_ridgeline(
|
|
675
|
+
# self,
|
|
676
|
+
# data: ArrayLike,
|
|
677
|
+
# labels: Optional[List[str]] = None,
|
|
678
|
+
# overlap: float = 0.8,
|
|
679
|
+
# fill: bool = True,
|
|
680
|
+
# alpha: float = 0.6,
|
|
681
|
+
# colormap: str = "viridis",
|
|
682
|
+
# bandwidth: Optional[float] = None,
|
|
683
|
+
# track: bool = True,
|
|
684
|
+
# id: Optional[str] = None,
|
|
685
|
+
# **kwargs,
|
|
686
|
+
# ) -> None:
|
|
687
|
+
# """Plot a ridgeline plot (similar to joyplot but with KDE)."""
|
|
688
|
+
# # Method Name for downstream csv exporting
|
|
689
|
+
# method_name = "plot_ridgeline"
|
|
690
|
+
|
|
691
|
+
# # Ensure data is in correct format
|
|
692
|
+
# if isinstance(data, pd.DataFrame):
|
|
693
|
+
# _data = [data[col].dropna().values for col in data.columns]
|
|
694
|
+
# if labels is None:
|
|
695
|
+
# labels = list(data.columns)
|
|
696
|
+
# elif isinstance(data, list):
|
|
697
|
+
# _data = data
|
|
698
|
+
# else:
|
|
699
|
+
# _data = [data]
|
|
700
|
+
|
|
701
|
+
# # Plotting with pure matplotlib methods under non-tracking context
|
|
702
|
+
# with self._no_tracking():
|
|
703
|
+
# self._axis_mpl, ridge_data = self._get_ax_module().plot_ridgeline(
|
|
704
|
+
# self._axis_mpl,
|
|
705
|
+
# _data,
|
|
706
|
+
# labels=labels,
|
|
707
|
+
# overlap=overlap,
|
|
708
|
+
# fill=fill,
|
|
709
|
+
# alpha=alpha,
|
|
710
|
+
# colormap=colormap,
|
|
711
|
+
# bandwidth=bandwidth,
|
|
712
|
+
# **kwargs,
|
|
713
|
+
# )
|
|
714
|
+
|
|
715
|
+
# # Tracking
|
|
716
|
+
# tracked_dict = {
|
|
717
|
+
# "ridgeline_data": _data,
|
|
718
|
+
# "kde_x": ridge_data["kde_x"],
|
|
719
|
+
# "kde_y": ridge_data["kde_y"],
|
|
720
|
+
# }
|
|
721
|
+
# if labels is not None:
|
|
722
|
+
# tracked_dict["labels"] = labels
|
|
723
|
+
# self._track(track, id, method_name, tracked_dict, None)
|
|
724
|
+
|
|
725
|
+
# return self._axis_mpl, ridge_data
|
|
726
|
+
|
|
727
|
+
# def plot_parallel_coordinates(
|
|
728
|
+
# self,
|
|
729
|
+
# data: pd.DataFrame,
|
|
730
|
+
# class_column: Optional[str] = None,
|
|
731
|
+
# colormap: str = "viridis",
|
|
732
|
+
# alpha: float = 0.5,
|
|
733
|
+
# track: bool = True,
|
|
734
|
+
# id: Optional[str] = None,
|
|
735
|
+
# **kwargs,
|
|
736
|
+
# ) -> None:
|
|
737
|
+
# """Plot parallel coordinates."""
|
|
738
|
+
# # Method Name for downstream csv exporting
|
|
739
|
+
# method_name = "plot_parallel_coordinates"
|
|
740
|
+
|
|
741
|
+
# # Plotting with pure matplotlib methods under non-tracking context
|
|
742
|
+
# with self._no_tracking():
|
|
743
|
+
# self._axis_mpl = self._get_ax_module().plot_parallel_coordinates(
|
|
744
|
+
# self._axis_mpl,
|
|
745
|
+
# data,
|
|
746
|
+
# class_column=class_column,
|
|
747
|
+
# colormap=colormap,
|
|
748
|
+
# alpha=alpha,
|
|
749
|
+
# **kwargs,
|
|
750
|
+
# )
|
|
751
|
+
|
|
752
|
+
# # Tracking
|
|
753
|
+
# tracked_dict = {"parallel_data": data}
|
|
754
|
+
# self._track(track, id, method_name, tracked_dict, None)
|
|
755
|
+
|
|
756
|
+
# return self._axis_mpl
|
|
757
|
+
|
|
758
|
+
# @wraps removed to avoid circular import
|
|
759
|
+
def plot_line(
|
|
760
|
+
self,
|
|
761
|
+
data: ArrayLike,
|
|
762
|
+
xx: Optional[ArrayLike] = None,
|
|
763
|
+
track: bool = True,
|
|
764
|
+
id: Optional[str] = None,
|
|
765
|
+
**kwargs,
|
|
766
|
+
) -> None:
|
|
767
|
+
"""Plot a simple line."""
|
|
768
|
+
# Method Name for downstream csv exporting
|
|
769
|
+
method_name = "plot_line"
|
|
770
|
+
|
|
771
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
772
|
+
with self._no_tracking():
|
|
773
|
+
self._axis_mpl, plot_df = self._get_ax_module().plot_line(
|
|
774
|
+
self._axis_mpl, data, xx=xx, **kwargs
|
|
775
|
+
)
|
|
776
|
+
|
|
777
|
+
# Tracking
|
|
778
|
+
tracked_dict = {"plot_df": plot_df}
|
|
779
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
780
|
+
|
|
781
|
+
return self._axis_mpl, plot_df
|
|
782
|
+
|
|
783
|
+
# @wraps removed to avoid circular import
|
|
784
|
+
def plot_mean_std(
|
|
785
|
+
self,
|
|
786
|
+
data: ArrayLike,
|
|
787
|
+
xx: Optional[ArrayLike] = None,
|
|
788
|
+
sd: float = 1,
|
|
789
|
+
track: bool = True,
|
|
790
|
+
id: Optional[str] = None,
|
|
791
|
+
**kwargs,
|
|
792
|
+
) -> None:
|
|
793
|
+
"""Plot mean line with standard deviation shading."""
|
|
794
|
+
# Method Name for downstream csv exporting
|
|
795
|
+
method_name = "plot_mean_std"
|
|
796
|
+
|
|
797
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
798
|
+
with self._no_tracking():
|
|
799
|
+
self._axis_mpl, plot_df = self._get_ax_module().plot_mean_std(
|
|
800
|
+
self._axis_mpl, data, xx=xx, sd=sd, **kwargs
|
|
801
|
+
)
|
|
802
|
+
|
|
803
|
+
# Tracking
|
|
804
|
+
tracked_dict = {"plot_df": plot_df}
|
|
805
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
806
|
+
|
|
807
|
+
return self._axis_mpl, plot_df
|
|
808
|
+
|
|
809
|
+
# @wraps removed to avoid circular import
|
|
810
|
+
def plot_mean_ci(
|
|
811
|
+
self,
|
|
812
|
+
data: ArrayLike,
|
|
813
|
+
xx: Optional[ArrayLike] = None,
|
|
814
|
+
perc: float = 95,
|
|
815
|
+
track: bool = True,
|
|
816
|
+
id: Optional[str] = None,
|
|
817
|
+
**kwargs,
|
|
818
|
+
) -> None:
|
|
819
|
+
"""Plot mean line with confidence interval shading."""
|
|
820
|
+
# Method Name for downstream csv exporting
|
|
821
|
+
method_name = "plot_mean_ci"
|
|
822
|
+
|
|
823
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
824
|
+
with self._no_tracking():
|
|
825
|
+
self._axis_mpl, plot_df = self._get_ax_module().plot_mean_ci(
|
|
826
|
+
self._axis_mpl, data, xx=xx, perc=perc, **kwargs
|
|
827
|
+
)
|
|
828
|
+
|
|
829
|
+
# Tracking
|
|
830
|
+
tracked_dict = {"plot_df": plot_df}
|
|
831
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
832
|
+
|
|
833
|
+
return self._axis_mpl, plot_df
|
|
834
|
+
|
|
835
|
+
# @wraps removed to avoid circular import
|
|
836
|
+
def plot_median_iqr(
|
|
837
|
+
self,
|
|
838
|
+
data: ArrayLike,
|
|
839
|
+
xx: Optional[ArrayLike] = None,
|
|
840
|
+
track: bool = True,
|
|
841
|
+
id: Optional[str] = None,
|
|
842
|
+
**kwargs,
|
|
843
|
+
) -> None:
|
|
844
|
+
"""Plot median line with interquartile range shading."""
|
|
845
|
+
# Method Name for downstream csv exporting
|
|
846
|
+
method_name = "plot_median_iqr"
|
|
847
|
+
|
|
848
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
849
|
+
with self._no_tracking():
|
|
850
|
+
self._axis_mpl, plot_df = self._get_ax_module().plot_median_iqr(
|
|
851
|
+
self._axis_mpl, data, xx=xx, **kwargs
|
|
852
|
+
)
|
|
853
|
+
|
|
854
|
+
# Tracking
|
|
855
|
+
tracked_dict = {"plot_df": plot_df}
|
|
856
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
857
|
+
|
|
858
|
+
return self._axis_mpl, plot_df
|
|
859
|
+
|
|
860
|
+
# @wraps removed to avoid circular import
|
|
861
|
+
def plot_shaded_line(
|
|
862
|
+
self,
|
|
863
|
+
xs: ArrayLike,
|
|
864
|
+
ys_lower: ArrayLike,
|
|
865
|
+
ys_middle: ArrayLike,
|
|
866
|
+
ys_upper: ArrayLike,
|
|
867
|
+
color: str or Optional[Union[str, List[str]]] = None,
|
|
868
|
+
label: str or Optional[Union[str, List[str]]] = None,
|
|
869
|
+
track: bool = True,
|
|
870
|
+
id: Optional[str] = None,
|
|
871
|
+
**kwargs,
|
|
872
|
+
) -> None:
|
|
873
|
+
"""Plot a line with shaded area between lower and upper bounds."""
|
|
874
|
+
# Method Name for downstream csv exporting
|
|
875
|
+
method_name = "plot_shaded_line"
|
|
876
|
+
|
|
877
|
+
# Plotting with pure matplotlib methods under non-tracking context
|
|
878
|
+
with self._no_tracking():
|
|
879
|
+
self._axis_mpl, plot_df = self._get_ax_module().plot_shaded_line(
|
|
880
|
+
self._axis_mpl,
|
|
881
|
+
xs,
|
|
882
|
+
ys_lower,
|
|
883
|
+
ys_middle,
|
|
884
|
+
ys_upper,
|
|
885
|
+
color=color,
|
|
886
|
+
label=label,
|
|
887
|
+
**kwargs,
|
|
888
|
+
)
|
|
889
|
+
|
|
890
|
+
# Tracking
|
|
891
|
+
tracked_dict = {"plot_df": plot_df}
|
|
892
|
+
self._track(track, id, method_name, tracked_dict, None)
|
|
893
|
+
|
|
894
|
+
return self._axis_mpl, plot_df
|
|
895
|
+
|
|
896
|
+
# EOF
|