py2ls 0.1.6.1__tar.gz → 0.1.6.2__tar.gz
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-0.1.6.1 → py2ls-0.1.6.2}/PKG-INFO +1 -1
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/ips.py +17 -3
- py2ls-0.1.6.2/py2ls/plot/catplot.py +437 -0
- py2ls-0.1.6.1/py2ls/plot.py → py2ls-0.1.6.2/py2ls/plot/figsets.py +39 -319
- py2ls-0.1.6.2/py2ls/plot/get_color.py +68 -0
- py2ls-0.1.6.2/py2ls/plot/stdshade.py +227 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/pyproject.toml +1 -1
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/README.md +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.DS_Store +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/COMMIT_EDITMSG +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/FETCH_HEAD +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/HEAD +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/config +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/description +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/hooks/applypatch-msg.sample +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/hooks/commit-msg.sample +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/hooks/fsmonitor-watchman.sample +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/hooks/post-update.sample +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/hooks/pre-applypatch.sample +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/hooks/pre-commit.sample +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/hooks/pre-merge-commit.sample +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/hooks/pre-push.sample +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/hooks/pre-rebase.sample +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/hooks/pre-receive.sample +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/hooks/prepare-commit-msg.sample +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/hooks/push-to-checkout.sample +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/hooks/update.sample +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/index +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/info/exclude +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/logs/HEAD +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/logs/refs/heads/main +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/logs/refs/remotes/origin/HEAD +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/logs/refs/remotes/origin/main +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/01/d5bd8065e6860c0bd23ff9fa57161806a099e1 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/09/08da26de58c114225ad81f484b80bf5d351b34 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/0b/409e1bc918277010f5679b402d1d1dda53e15c +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/14/449a0e6ba4ea2f1a73acf63ef91c9c6193f9ed +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/15/a8e468aacfcb440e090020f36d0b985d45da23 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/1a/b4585881a6a42889f01aa0cfe25fd5acfaf46f +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/1c/3f92adda34344bcbbbf9d409c79855ae2aaea8 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/1d/fe9d9633b24ea560354f4f93d39c6e5f163ea0 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/20/72c28e83f4347959d29f7b3a6c1fc3e4ee6b59 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/24/6b368b986f758630c46dc02b7fa512b53422f7 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/25/b796accd261b9135fd32a2c00785f68edf6c46 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/30/a2f8da47ee947811dc8d993f5a06a45de374f4 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/32/fd627b62fad7cf3b2f9e34ab9777126a0987ad +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/36/b4a1b7403abc6c360f8fe2cb656ab945254971 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/36/e56a361f526eafa59c5235a5c990bf288b5f9c +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/36/ef43e50009e59db11812c258846d9e38718173 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/39/7ead045fbbcfb17c62019eb18fe21ed05dbee5 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/3b/bd972aa7ad680858f8dfbd0f7fcd97756f0d6f +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/3c/bbe5f4173d165127b9ad96119f1ec24c306ffc +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/3f/d6561300938afbb3d11976cf9c8f29549280d9 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/41/dcf4b3bf0460946b2da93776cf9e836d62178f +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/43/dbd49b2ee367c5434dd545e3b5795434f2ef0b +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/48/a88fc5806305d0bb0755ee6801161b79696972 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/4f/7afb40dff2153d857fc85748c2eecb85125042 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/50/08ddfcf53c02e82d7eee2e57c38e5672ef89f6 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/53/e0deb1cb4c2c606bced6e7f9a66b0fda60980d +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/56/e4e8b2d5545e0256090f45aa8fc42c5fe067d0 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/57/bd1c0199483ab316235b094543b85edec6c35e +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/58/20a729045d4dc7e37ccaf8aa8eec126850afe2 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/5a/192565abf89c9d765af846ce6d53a92b1ce7ad +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/60/f273eb1c412d916fa3f11318a7da7a9911b52a +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/61/570cec8c061abe74121f27f5face6c69b98f99 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/62/4488173ed2c8936fa5cea3cf5dd3f26a30b86e +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/62/7c81b23b4e56e87b042b650b0103653cc9e34a +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/62/d90ccf8cbefdc2e4fd475e7c6f4f76e9fdf801 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/63/100154b27846e8010e55b6bf4b3d7762c14c5f +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/64/27a4edff08f93d98f511418423f09f2ab90bcd +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/68/6df3072c8b025fb18106ed2df505994ad062a9 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/69/13c452ca319f7cbf6a0836dc10a5bb033c84e4 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/6a/52e747a2b349b128d1490d9e896d2323818eb7 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/6b/7fde264d93a7a0986d394c46c7650d0ce2ab92 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/6c/cebb29b7f3f5b0c889f6dadbf9ff066554587d +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/6d/ee29dbdcc84edeeacede105110446f3ccac963 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/71/36b2074a2754be8b58127d82250e5b37e3c373 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/78/3d4167bc95c9d2175e0df03ef1c1c880ba75ab +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/79/7ae089b2212a937840e215276005ce76881307 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/7e/5956c806b5edc344d46dab599dec337891ba1f +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/81/8f26b7bf042269729020cf944fc362d66ba27e +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/84/59071b722a255b774a80b27746033f8141ab39 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/87/ef1fc3f7f1ddc4d0ab9b3e65381ce9f3388621 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/8b/84f56978e1de8f2ae82abce5f8b3e182d365cd +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/8e/55a7d2b96184030211f20c9b9af201eefcac82 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/91/c69ad88fe0ba94aa7859fb5f7edac5e6f1a3f7 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/94/74152b4b463d70ae5ad07f0c658be3e296026b +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/97/1aef09ea939f46b60b9646f8d524c78a9220f4 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/9d/0df52899fe95279059286d9c0ec42287edc168 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/a1/5389729850729fc7bd78a54f26fce77f30be12 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/a4/63fdd23e5efd713db8a71f316f3a1c7bd60916 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/a5/ec8f74642fbba27f7ea78c53b372ae0c7dedce +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/a7/3e13eafee65c5b8d73ad2d3ea46d0eee82f0d3 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/b0/56be4be89ba6b76949dd641df45bb7036050c8 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/b0/9cd7856d58590578ee1a4f3ad45d1310a97f87 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/b2/18e6a0f0f1c4df8cdefa9852058348abc713b7 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/b5/61831c7dce8ea51e7ee6b6fa35745f14d8242d +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/b7/2c9e75ab7d0afe594664650aa8f6c772f5ac64 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/bb/81ccc0513f18fc160b54a82861e9a80d23f4f6 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/bb/934eb33bc1a8b85630bf680caffd99560c1b8f +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/bf/67907e337021ebff434e02b19b30a741c144af +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/c1/20fc812b9ad311c34a3608512d6a9d976bb48e +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/c4/cba65f1163661999ee4b8ed23342b63bc1300c +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/c6/7f17e5707313600efcb85e9a3fedea35dba591 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/c6/f32aced880bd165a251cb52b26b0c1107e2141 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/cd/822b3574a88ebdd1ed82fd6983f37e626d52b4 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/cf/0c0d9c6fb09473aaeb7f7e2edbd770c3f2ef3d +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/d6/9ab1c4aadf279936dd778e8346ba60f74705b6 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/d8/4688b54c0040a30976b3a6540bc47adf7ce680 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/d9/005f2cc7fc4e65f14ed5518276007c08cf2fd0 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/d9/c2403fd166ce791b4e9d0c6792ed8342c71fcd +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/d9/dfa5aee51e92a541b707e8e7baea6f06deff98 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/db/141dbaa93594df2a8156182f361ee4db829359 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/db/ffa8ea7bda721d0cee7b9e4ce5b2ef927733ff +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/dd/87fb5f606fe380d81e6fe3a2c98f9f99e3e09b +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/df/e0770424b2a19faf507a501ebfc23be8f54e7b +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/e3/1356f90ea6dd0577b5e0b40b206319adcbf085 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/e3/5a4dafc50850cacac7bf76c56db2715cbda2c4 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/e9/391ffe371f1cc43b42ef09b705d9c767c2e14f +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/f1/e50757fddc28b445545dc7e2759b54cdd0f42e +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/f4/b64d3107b39e3ad6f540c6607004ea34e6c024 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/f7/c98ba5c2f903e603b1f5e63d49fbc8a43815cc +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/f9/045a08e96eb76848fc4d68e3e3e687cca39a2d +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/fa/147e6bb78a2e8db241d231295fd7f1ed061af8 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/objects/fc/292e793ecfd42240ac43be407023bd731fa9e7 +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/refs/heads/main +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/refs/remotes/origin/HEAD +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.git/refs/remotes/origin/main +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.gitattributes +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/.gitignore +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/LICENSE +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/README.md +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/__init__.py +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/brain_atlas.py +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/chat.py +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/correlators.py +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/data/.DS_Store +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/data/db2ls_sql_chtsht.json +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/data/docs_links.json +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/data/lang_code_iso639.json +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/db2ls.py +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/doc.py +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/freqanalysis.py +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/netfinder.py +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/setuptools-70.1.0-py3-none-any.whl +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/sleep_events_detectors.py +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/stats.py +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/translator.py +0 -0
- {py2ls-0.1.6.1 → py2ls-0.1.6.2}/py2ls/wb_detector.py +0 -0
@@ -879,8 +879,9 @@ def fload(fpath, kind=None, **kwargs):
|
|
879
879
|
root = tree.getroot()
|
880
880
|
return etree.tostring(root, pretty_print=True).decode()
|
881
881
|
|
882
|
-
def load_csv(fpath,
|
883
|
-
|
882
|
+
def load_csv(fpath, engine='pyarrow',**kwargs):
|
883
|
+
print(f"engine={engine}")
|
884
|
+
df = pd.read_csv(fpath, engine=engine, **kwargs)
|
884
885
|
return df
|
885
886
|
|
886
887
|
def load_xlsx(fpath, **kwargs):
|
@@ -2169,9 +2170,22 @@ def figsets(*args,**kwargs):
|
|
2169
2170
|
# rotation
|
2170
2171
|
if "angle" in key.lower() or ("rot" in key.lower()):
|
2171
2172
|
if "x" in key.lower():
|
2172
|
-
|
2173
|
+
if value in [0,90,180,270]:
|
2174
|
+
ax.tick_params(axis="x", rotation=value)
|
2175
|
+
for tick in ax.get_xticklabels():
|
2176
|
+
tick.set_horizontalalignment('center')
|
2177
|
+
elif value >0:
|
2178
|
+
ax.tick_params(axis="x", rotation=value)
|
2179
|
+
for tick in ax.get_xticklabels():
|
2180
|
+
tick.set_horizontalalignment('right')
|
2181
|
+
elif value <0:
|
2182
|
+
ax.tick_params(axis='x', rotation=value)
|
2183
|
+
for tick in ax.get_xticklabels():
|
2184
|
+
tick.set_horizontalalignment('left')
|
2173
2185
|
if "y" in key.lower():
|
2174
2186
|
ax.tick_params(axis="y", rotation=value)
|
2187
|
+
for tick in ax.get_yticklabels():
|
2188
|
+
tick.set_horizontalalignment('right')
|
2175
2189
|
|
2176
2190
|
if "bo" in key in key: # box setting, and ("p" in key or "l" in key):
|
2177
2191
|
if isinstance(value, (str, list)):
|
@@ -0,0 +1,437 @@
|
|
1
|
+
import matplotlib.pyplot as plt
|
2
|
+
import numpy as np
|
3
|
+
from matplotlib.colors import to_rgba
|
4
|
+
from scipy.stats import gaussian_kde
|
5
|
+
|
6
|
+
def catplot(data, *args, **kwargs):
|
7
|
+
"""
|
8
|
+
catplot(data, opt=None, ax=None)
|
9
|
+
|
10
|
+
Args:
|
11
|
+
data (array): data matrix
|
12
|
+
"""
|
13
|
+
def plot_bars(data_m, opt_b, xloc, ax):
|
14
|
+
bar_positions = get_positions(xloc, opt_b['loc'], opt_b['x_width'], data.shape[0])
|
15
|
+
bar_positions=np.nanmean(bar_positions,axis=0)
|
16
|
+
for i, (x, y) in enumerate(zip(bar_positions, data_m)):
|
17
|
+
color = to_rgba(opt_b['FaceColor'][i % len(opt_b['FaceColor'])])
|
18
|
+
ax.bar(x, y,
|
19
|
+
width=opt_b['x_width'],
|
20
|
+
color=color,
|
21
|
+
edgecolor=opt_b['EdgeColor'],
|
22
|
+
alpha=opt_b['FaceAlpha'])
|
23
|
+
|
24
|
+
def plot_errors(data, data_m, opt_e, xloc, ax):
|
25
|
+
error_positions = get_positions(xloc, opt_e['loc'], opt_e['x_width'], data.shape[0])
|
26
|
+
error_positions=np.nanmean(error_positions,axis=0)
|
27
|
+
errors = np.nanstd(data, axis=0)
|
28
|
+
if opt_e['error'] == 'sem':
|
29
|
+
errors /= np.sqrt(np.sum(~np.isnan(data),axis=0))
|
30
|
+
|
31
|
+
if not isinstance(opt_e['FaceColor'],list):
|
32
|
+
opt_e['FaceColor']=[opt_e['FaceColor']]
|
33
|
+
if not isinstance(opt_e['MarkerEdgeColor'],list):
|
34
|
+
opt_e['MarkerEdgeColor']=[opt_e['MarkerEdgeColor']]
|
35
|
+
for i, (x, y, err) in enumerate(zip(error_positions, data_m, errors)):
|
36
|
+
ax.errorbar(x, y, yerr=err,
|
37
|
+
fmt=opt_e['Marker'],
|
38
|
+
ecolor=opt_e['LineColor'],
|
39
|
+
elinewidth=opt_e['LineWidth'],
|
40
|
+
lw=opt_e['LineWidth'],
|
41
|
+
ls=opt_e['LineStyle'],
|
42
|
+
capsize=opt_e['CapSize'],
|
43
|
+
capthick=opt_e['CapLineWidth'],
|
44
|
+
markersize=opt_e['MarkerSize'],
|
45
|
+
mec=opt_e['MarkerEdgeColor'][i % len(opt_e['MarkerEdgeColor'])],
|
46
|
+
mfc=opt_e['FaceColor'][i % len(opt_e['FaceColor'])],
|
47
|
+
visible=opt_e['Visible']
|
48
|
+
)
|
49
|
+
|
50
|
+
def plot_scatter(data, opt_s, xloc, ax):
|
51
|
+
scatter_positions = get_positions(xloc, opt_s['loc'], opt_s['x_width'], data.shape[0])
|
52
|
+
for i, (x, y) in enumerate(zip(scatter_positions.T, data.T)):
|
53
|
+
color = to_rgba(opt_s['FaceColor'][i % len(opt_s['FaceColor'])])
|
54
|
+
ax.scatter(x, y,
|
55
|
+
color=color,
|
56
|
+
alpha=opt_s['FaceAlpha'],
|
57
|
+
edgecolor=opt_s['MarkerEdgeColor'],
|
58
|
+
s=opt_s['MarkerSize'],
|
59
|
+
marker=opt_s['Marker']
|
60
|
+
)
|
61
|
+
|
62
|
+
def plot_boxplot(data, bx_opt, xloc,ax):
|
63
|
+
if 'l' in bx_opt['loc']:
|
64
|
+
X_bx = xloc - bx_opt['x_width']
|
65
|
+
elif 'r' in bx_opt['loc']:
|
66
|
+
X_bx = xloc + bx_opt['x_width']
|
67
|
+
elif 'i' in bx_opt['loc']:
|
68
|
+
X_bx = xloc
|
69
|
+
X_bx[:, 0] += bx_opt['x_width']
|
70
|
+
X_bx[:, -1] -= bx_opt['x_width']
|
71
|
+
elif 'o' in bx_opt['loc']:
|
72
|
+
X_bx = xloc
|
73
|
+
X_bx[:, 0] -= bx_opt['x_width']
|
74
|
+
X_bx[:, -1] += bx_opt['x_width']
|
75
|
+
elif 'c' in bx_opt['loc'] or 'm' in bx_opt['loc']:
|
76
|
+
X_bx = xloc
|
77
|
+
else:
|
78
|
+
X_bx = xloc
|
79
|
+
|
80
|
+
|
81
|
+
boxprops = dict(color=bx_opt['EdgeColor'],
|
82
|
+
linewidth=bx_opt['BoxLineWidth'])
|
83
|
+
flierprops = dict(marker=bx_opt['OutlierMarker'],
|
84
|
+
markerfacecolor=bx_opt['OutlierColor'],
|
85
|
+
markersize=bx_opt['OutlierSize'])
|
86
|
+
whiskerprops = dict(linestyle=bx_opt['WhiskerLineStyle'],
|
87
|
+
color=bx_opt['WhiskerLineColor'],
|
88
|
+
linewidth=bx_opt['WhiskerLineWidth'])
|
89
|
+
capprops = dict(color=bx_opt['CapLineColor'],
|
90
|
+
linewidth=bx_opt['CapLineWidth'],)
|
91
|
+
medianprops = dict(linestyle=bx_opt['MedianLineStyle'],
|
92
|
+
color=bx_opt['MedianLineColor'],
|
93
|
+
linewidth=bx_opt['MedianLineWidth'])
|
94
|
+
meanprops = dict(linestyle=bx_opt['MeanLineStyle'],
|
95
|
+
color=bx_opt['MeanLineColor'],
|
96
|
+
linewidth=bx_opt['MeanLineWidth'])
|
97
|
+
bxp = ax.boxplot(data,
|
98
|
+
positions=X_bx,
|
99
|
+
notch=bx_opt['Notch'],
|
100
|
+
patch_artist=True,
|
101
|
+
boxprops=boxprops,
|
102
|
+
flierprops=flierprops,
|
103
|
+
whiskerprops=whiskerprops,
|
104
|
+
capwidths=bx_opt['CapSize'],
|
105
|
+
showfliers = bx_opt['Outliers'],
|
106
|
+
showcaps = bx_opt['Caps'],
|
107
|
+
capprops=capprops,
|
108
|
+
medianprops=medianprops,
|
109
|
+
meanline=bx_opt['MeanLine'],
|
110
|
+
showmeans=bx_opt['MeanLine'],
|
111
|
+
meanprops =meanprops,
|
112
|
+
widths=bx_opt['x_width'])
|
113
|
+
|
114
|
+
if bx_opt['BoxLineWidth'] < 0.1:
|
115
|
+
bx_opt['EdgeColor'] = 'none'
|
116
|
+
else:
|
117
|
+
bx_opt['EdgeColor'] = bx_opt['EdgeColor']
|
118
|
+
|
119
|
+
for patch, color in zip(bxp['boxes'], bx_opt['FaceColor']):
|
120
|
+
patch.set_facecolor(to_rgba(color, bx_opt['FaceAlpha']))
|
121
|
+
|
122
|
+
if bx_opt['MedianLineTop']:
|
123
|
+
ax.set_children(ax.get_children()[::-1]) # move median line forward
|
124
|
+
|
125
|
+
def plot_violin(data, opt_v, xloc, ax):
|
126
|
+
violin_positions = get_positions(xloc, opt_v['loc'], opt_v['x_width'], data.shape[0])
|
127
|
+
violin_positions = np.nanmean(violin_positions, axis=0)
|
128
|
+
for i, (x, ys) in enumerate(zip(violin_positions, data.T)):
|
129
|
+
ys = ys[~np.isnan(ys)]
|
130
|
+
if len(ys) > 1:
|
131
|
+
kde = gaussian_kde(ys, bw_method=opt_v['BandWidth'])
|
132
|
+
min_val, max_val = ys.min(), ys.max()
|
133
|
+
y_vals = np.linspace(min_val, max_val, opt_v['NumPoints'])
|
134
|
+
kde_vals = kde(y_vals)
|
135
|
+
kde_vals = kde_vals / kde_vals.max() * opt_v['x_width']
|
136
|
+
if 'r' in opt_v['loc'].lower():
|
137
|
+
ax.fill_betweenx(y_vals, x, x + kde_vals,
|
138
|
+
color=opt_v['FaceColor'][i % len(opt_v['FaceColor'])],
|
139
|
+
alpha=opt_v['FaceAlpha'],
|
140
|
+
edgecolor=opt_v['EdgeColor'])
|
141
|
+
elif 'l' in opt_v['loc'].lower() and not 'f' in opt_v['loc'].lower() :
|
142
|
+
ax.fill_betweenx(y_vals, x - kde_vals, x,
|
143
|
+
color=opt_v['FaceColor'][i % len(opt_v['FaceColor'])],
|
144
|
+
alpha=opt_v['FaceAlpha'],
|
145
|
+
edgecolor=opt_v['EdgeColor'])
|
146
|
+
elif 'o' in opt_v['loc'].lower() or 'both' in opt_v['loc'].lower() :
|
147
|
+
ax.fill_betweenx(y_vals, x - kde_vals, x + kde_vals,
|
148
|
+
color=opt_v['FaceColor'][i % len(opt_v['FaceColor'])],
|
149
|
+
alpha=opt_v['FaceAlpha'],
|
150
|
+
edgecolor=opt_v['EdgeColor'])
|
151
|
+
elif 'i' in opt_v['loc'].lower():
|
152
|
+
if i % 2 == 1: # odd number
|
153
|
+
ax.fill_betweenx(y_vals, x -kde_vals, x,
|
154
|
+
color=opt_v['FaceColor'][i % len(opt_v['FaceColor'])],
|
155
|
+
alpha=opt_v['FaceAlpha'],
|
156
|
+
edgecolor=opt_v['EdgeColor'])
|
157
|
+
else:
|
158
|
+
ax.fill_betweenx(y_vals, x, x+kde_vals,
|
159
|
+
color=opt_v['FaceColor'][i % len(opt_v['FaceColor'])],
|
160
|
+
alpha=opt_v['FaceAlpha'],
|
161
|
+
edgecolor=opt_v['EdgeColor'])
|
162
|
+
elif 'f' in opt_v['loc'].lower():
|
163
|
+
ax.fill_betweenx(y_vals, x - kde_vals, x + kde_vals,
|
164
|
+
color=opt_v['FaceColor'][i % len(opt_v['FaceColor'])],
|
165
|
+
alpha=opt_v['FaceAlpha'],
|
166
|
+
edgecolor=opt_v['EdgeColor'])
|
167
|
+
|
168
|
+
def plot_lines(data, opt_l, opt_s, ax):
|
169
|
+
scatter_positions = get_positions(xloc, opt_s['loc'], opt_s['x_width'], data.shape[0])
|
170
|
+
for incol in range(data.shape[1]-1):
|
171
|
+
for irow in range(data.shape[0]):
|
172
|
+
if not np.isnan(data[irow, incol]):
|
173
|
+
if opt_l['LineStyle'] is not None and not opt_l['LineStyle'] =='none':
|
174
|
+
x_data = [scatter_positions[irow, incol], scatter_positions[irow, incol + 1]]
|
175
|
+
y_data = [data[irow, incol], data[irow, incol + 1]]
|
176
|
+
|
177
|
+
|
178
|
+
ax.plot(x_data, y_data,
|
179
|
+
color=opt_l['LineColor'],
|
180
|
+
linestyle=opt_l['LineStyle'],
|
181
|
+
linewidth=opt_l['LineWidth'],
|
182
|
+
alpha=opt_l['LineAlpha'])
|
183
|
+
|
184
|
+
def get_positions(xloc, loc_type, x_width, n_row=None):
|
185
|
+
if 'rand' in loc_type:
|
186
|
+
scatter_positions = np.zeros((n_row, len(xloc)))
|
187
|
+
np.random.seed(111)
|
188
|
+
for i, x in enumerate(xloc):
|
189
|
+
scatter_positions[:, i] = np.random.uniform(x - x_width, x + x_width, n_row)
|
190
|
+
return scatter_positions
|
191
|
+
elif 'l' in loc_type:
|
192
|
+
return np.tile(xloc - x_width,(n_row,1))
|
193
|
+
elif 'r' in loc_type and not 'd' in loc_type:
|
194
|
+
return np.tile(xloc + x_width,(n_row,1))
|
195
|
+
elif 'i' in loc_type:
|
196
|
+
return np.tile(np.concatenate([xloc[:1] + x_width, xloc[1:-1], xloc[-1:] - x_width]),(n_row,1))
|
197
|
+
elif 'o' in loc_type:
|
198
|
+
return np.tile(np.concatenate([xloc[:1] - x_width, xloc[1:-1], xloc[-1:] + x_width]),(n_row,1))
|
199
|
+
else:
|
200
|
+
return np.tile(xloc,(n_row,1))
|
201
|
+
|
202
|
+
opt = kwargs.get('opt',{})
|
203
|
+
ax = kwargs.get('ax',None)
|
204
|
+
if 'ax' not in locals() or ax is None:
|
205
|
+
ax=plt.gca()
|
206
|
+
|
207
|
+
default_colors = np.array([
|
208
|
+
[0, 0, 0],
|
209
|
+
[234, 37, 46],
|
210
|
+
[0, 154, 222],
|
211
|
+
[175, 89, 186],
|
212
|
+
[255, 198, 37],
|
213
|
+
[242, 133, 34]
|
214
|
+
]) / 255.0
|
215
|
+
|
216
|
+
opt.setdefault('c', default_colors)
|
217
|
+
if len(opt['c']) < data.shape[1]:
|
218
|
+
additional_colors = plt.cm.winter(np.linspace(0, 1, data.shape[1] - len(opt['c'])))
|
219
|
+
opt['c'] = np.vstack([opt['c'], additional_colors[:, :3]])
|
220
|
+
|
221
|
+
opt.setdefault('loc', {})
|
222
|
+
opt['loc'].setdefault('go', 0)
|
223
|
+
opt['loc'].setdefault('xloc', np.arange(1, data.shape[1] + 1))
|
224
|
+
|
225
|
+
# export setting
|
226
|
+
opt.setdefault('export', False)
|
227
|
+
opt['export'].setdefault('path', None)
|
228
|
+
print(opt['export'])
|
229
|
+
|
230
|
+
opt.setdefault('b', {})
|
231
|
+
opt['b'].setdefault('go', 0)
|
232
|
+
opt['b'].setdefault('EdgeColor', 'k')
|
233
|
+
opt['b'].setdefault('FaceAlpha', 1)
|
234
|
+
opt['b'].setdefault('EdgeAlpha', 1)
|
235
|
+
opt['b'].setdefault('LineStyle', '-')
|
236
|
+
opt['b'].setdefault('x_width', 0.5)
|
237
|
+
opt['b'].setdefault('ShowBaseLine', 'off')
|
238
|
+
opt['b'].setdefault('loc', 'c')
|
239
|
+
opt['b'].setdefault('FaceColor', opt['c'])
|
240
|
+
|
241
|
+
opt.setdefault('e', {})
|
242
|
+
opt['e'].setdefault('go', 1)
|
243
|
+
opt['e'].setdefault('LineWidth', 1)
|
244
|
+
opt['e'].setdefault('CapLineWidth', 1)
|
245
|
+
opt['e'].setdefault('CapSize', opt['b']['x_width'] * 100 * 0.1)
|
246
|
+
opt['e'].setdefault('Marker', 'none')
|
247
|
+
opt['e'].setdefault('LineStyle', 'none')
|
248
|
+
opt['e'].setdefault('LineColor', 'k')
|
249
|
+
opt['e'].setdefault('LineJoin', 'round')
|
250
|
+
opt['e'].setdefault('MarkerSize', 'auto')
|
251
|
+
opt['e'].setdefault('FaceColor', opt['c'])
|
252
|
+
opt['e'].setdefault('MarkerEdgeColor', 'none')
|
253
|
+
opt['e'].setdefault('Visible', True)
|
254
|
+
opt['e'].setdefault('Orientation', 'vertical')
|
255
|
+
opt['e'].setdefault('error', 'sem')
|
256
|
+
opt['e'].setdefault('loc', 'c')
|
257
|
+
opt['e'].setdefault('x_width', opt['b']['x_width'] / 5)
|
258
|
+
opt['e'].setdefault('cap_dir', 'b')
|
259
|
+
|
260
|
+
opt.setdefault('s', {})
|
261
|
+
opt['s'].setdefault('go', 1)
|
262
|
+
opt['s'].setdefault('x_width', opt['b']['x_width'] / 5)
|
263
|
+
opt['s'].setdefault('Marker', 'o')
|
264
|
+
opt['s'].setdefault('MarkerSize', 6) # Set default size for markers
|
265
|
+
opt['s'].setdefault('LineWidth', 1)
|
266
|
+
opt['s'].setdefault('FaceColor', opt['c'])
|
267
|
+
opt['s'].setdefault('FaceAlpha', 0.6)
|
268
|
+
opt['s'].setdefault('loc', 'random')
|
269
|
+
opt['s'].setdefault('MarkerEdgeColor', None)
|
270
|
+
|
271
|
+
opt.setdefault('bx', {})
|
272
|
+
opt['bx'].setdefault('go', 0)
|
273
|
+
opt['bx'].setdefault('EdgeColor', 'k')
|
274
|
+
opt['bx'].setdefault('FaceAlpha', 1)
|
275
|
+
opt['bx'].setdefault('EdgeAlpha', 1)
|
276
|
+
opt['bx'].setdefault('LineStyle', '-')
|
277
|
+
opt['bx'].setdefault('x_width', 0.5)
|
278
|
+
opt['bx'].setdefault('ShowBaseLine', 'off')
|
279
|
+
opt['bx'].setdefault('loc', 'c')
|
280
|
+
opt['bx'].setdefault('FaceColor', opt['c'])
|
281
|
+
opt['bx'].setdefault('Notch', False)
|
282
|
+
opt['bx'].setdefault('MedianStyle', 'line')
|
283
|
+
opt['bx'].setdefault('Outliers', 'on')
|
284
|
+
opt['bx'].setdefault('OutlierMarker', '+')
|
285
|
+
opt['bx'].setdefault('OutlierColor', 'r')
|
286
|
+
opt['bx'].setdefault('OutlierSize', 6)
|
287
|
+
opt['bx'].setdefault('PlotStyle', 'traditional')
|
288
|
+
opt['bx'].setdefault('FactorDirection', 'auto')
|
289
|
+
opt['bx'].setdefault('Whisker', 1.5)
|
290
|
+
opt['bx'].setdefault('Orientation', 'vertical')
|
291
|
+
opt['bx'].setdefault('BoxLineWidth', 1.5)
|
292
|
+
opt['bx'].setdefault('FaceColor', 'k')
|
293
|
+
opt['bx'].setdefault('WhiskerLineStyle', '-')
|
294
|
+
opt['bx'].setdefault('WhiskerLineColor', 'k')
|
295
|
+
opt['bx'].setdefault('WhiskerLineWidth', 1.5)
|
296
|
+
opt['bx'].setdefault('Caps', True)
|
297
|
+
opt['bx'].setdefault('CapLineColor', 'k')
|
298
|
+
opt['bx'].setdefault('CapLineWidth', 1.5)
|
299
|
+
opt['bx'].setdefault('CapSize', 0.35)
|
300
|
+
opt['bx'].setdefault('MedianLineStyle', '-')
|
301
|
+
opt['bx'].setdefault('MedianLineColor', 'k')
|
302
|
+
opt['bx'].setdefault('MedianLineWidth', 1.5)
|
303
|
+
opt['bx'].setdefault('MedianLineTop', False)
|
304
|
+
opt['bx'].setdefault('MeanLine', False)
|
305
|
+
opt['bx'].setdefault('showmeans', opt['bx']['MeanLine'])
|
306
|
+
opt['bx'].setdefault('MeanLineStyle', '-')
|
307
|
+
opt['bx'].setdefault('MeanLineColor', 'b')
|
308
|
+
opt['bx'].setdefault('MeanLineWidth', 1.5)
|
309
|
+
|
310
|
+
# Violin plot options
|
311
|
+
opt.setdefault('v', {})
|
312
|
+
opt['v'].setdefault('go', 1)
|
313
|
+
opt['v'].setdefault('x_width', 0.3)
|
314
|
+
opt['v'].setdefault('loc', 'r')
|
315
|
+
opt['v'].setdefault('EdgeColor', 'none')
|
316
|
+
opt['v'].setdefault('FaceColor', opt['c'])
|
317
|
+
opt['v'].setdefault('FaceAlpha', 0.3)
|
318
|
+
opt['v'].setdefault('BandWidth', 'scott')
|
319
|
+
opt['v'].setdefault('Function', 'pdf')
|
320
|
+
opt['v'].setdefault('Kernel', 'gau')
|
321
|
+
opt['v'].setdefault('NumPoints', 500)
|
322
|
+
opt['v'].setdefault('BoundaryCorrection', 'reflection')
|
323
|
+
|
324
|
+
# line plot options
|
325
|
+
opt.setdefault('l', {})
|
326
|
+
opt['l'].setdefault('go', 0)
|
327
|
+
opt['l'].setdefault('LineStyle', '-')
|
328
|
+
opt['l'].setdefault('LineColor', 'k')
|
329
|
+
opt['l'].setdefault('LineWidth', 0.5)
|
330
|
+
opt['l'].setdefault('LineAlpha', 0.5)
|
331
|
+
|
332
|
+
data_m = np.nanmean(data, axis=0)
|
333
|
+
nr, nc = data.shape
|
334
|
+
|
335
|
+
xloc = opt['loc']['xloc']
|
336
|
+
|
337
|
+
if opt['b']['go']:
|
338
|
+
plot_bars(data_m, opt['b'], xloc, ax)
|
339
|
+
|
340
|
+
if opt['e']['go']:
|
341
|
+
plot_errors(data, data_m, opt['e'], xloc, ax)
|
342
|
+
|
343
|
+
if opt['s']['go']:
|
344
|
+
plot_scatter(data, opt['s'], xloc, ax)
|
345
|
+
|
346
|
+
if opt['bx']['go']:
|
347
|
+
plot_boxplot(data, opt['bx'], xloc, ax)
|
348
|
+
if opt['v']['go']:
|
349
|
+
plot_violin(data, opt['v'], xloc, ax)
|
350
|
+
if opt['l']['go'] and opt['s']['go']:
|
351
|
+
plot_lines(data, opt['l'], opt['s'], ax)
|
352
|
+
|
353
|
+
return ax
|
354
|
+
|
355
|
+
# from py2ls.ips import get_color,figsets
|
356
|
+
# opt={}
|
357
|
+
# opt = {
|
358
|
+
# 'export':{'path':get_cwd()},
|
359
|
+
# 'c': get_color(5,cmap='jet',by='linspace'), # Custom colors for 3 categories
|
360
|
+
# 'b': {
|
361
|
+
# 'go': 0,
|
362
|
+
# 'x_width': 0.85,
|
363
|
+
# 'FaceAlpha': 0.7,
|
364
|
+
# 'EdgeColor':'none'
|
365
|
+
# },
|
366
|
+
# 'e': {
|
367
|
+
# 'loc':'r',
|
368
|
+
# 'go': 1,
|
369
|
+
# 'error': 'sem',
|
370
|
+
# 'Marker':'d',
|
371
|
+
# 'CapSize': 1,
|
372
|
+
# 'LineWidth':1,
|
373
|
+
# 'CapLineWidth':8,
|
374
|
+
# 'LineStyle':'--',
|
375
|
+
# 'MarkerSize':6,
|
376
|
+
# 'LineColor':'k',
|
377
|
+
# 'FaceColor':get_color(10),
|
378
|
+
# 'MarkerEdgeColor':'none',
|
379
|
+
# 'Visible':True
|
380
|
+
# },
|
381
|
+
# 's': {
|
382
|
+
# 'go': 1,
|
383
|
+
# 'x_width':0.2,
|
384
|
+
# 'loc':'random',
|
385
|
+
# 'Marker': 'o',
|
386
|
+
# # 'MarkerSize': 20,
|
387
|
+
# 'FaceAlpha': 1,
|
388
|
+
# 'FaceColor':'k',
|
389
|
+
# 'LineWidth':1
|
390
|
+
|
391
|
+
# },
|
392
|
+
# 'bx':{
|
393
|
+
# 'go':1,
|
394
|
+
# 'FaceAlpha':0.8,
|
395
|
+
# 'EdgeColor':'none',
|
396
|
+
# 'loc':'c',
|
397
|
+
# 'x_width':0.2,
|
398
|
+
# 'WhiskerLineWidth':1,
|
399
|
+
# 'MedianLineWidth':2,
|
400
|
+
# # 'MedianLineColor':'r',
|
401
|
+
# 'OutlierMarker':'+',
|
402
|
+
# 'OutlierColor':'r',
|
403
|
+
# 'CapSize':.2,
|
404
|
+
# # 'Caps':False,
|
405
|
+
# # 'CapLineColor':'r',
|
406
|
+
# # 'CapLineWidth':8,
|
407
|
+
# # 'MeanLine':True,
|
408
|
+
# # 'FaceColor':['r','g','b','m','c']
|
409
|
+
# },
|
410
|
+
# 'v':{
|
411
|
+
# 'go':0,
|
412
|
+
# 'loc':'r',
|
413
|
+
# 'x_width':0.2,
|
414
|
+
# 'FaceAlpha':0.51,
|
415
|
+
# },
|
416
|
+
# 'l':{
|
417
|
+
# 'go':1,
|
418
|
+
# 'LineColor':'k'
|
419
|
+
# }
|
420
|
+
# }
|
421
|
+
# data1 = np.random.rand(10, 5)
|
422
|
+
# data2 = np.random.rand(10, 5)
|
423
|
+
# fig, axs=plt.subplots(1,2,figsize=(6,2.5))
|
424
|
+
# catplot(data1, opt=opt,ax=axs[0])
|
425
|
+
# catplot(data2, opt=opt,ax=axs[1])
|
426
|
+
# figsets(sp=5,
|
427
|
+
# ax=axs[0],
|
428
|
+
# xticks=np.arange(1,6,1),
|
429
|
+
# xtickslabel=['glua1','glua2','a','b','c'],
|
430
|
+
# xlabel='proteins',
|
431
|
+
# xangle=90,
|
432
|
+
# yticks=np.arange(0,2,0.5),
|
433
|
+
# xlim=[0.75, 5.1],
|
434
|
+
# ticks=dict(pad=1,c='k'))
|
435
|
+
|
436
|
+
# figsave("/Users/macjianfeng/Dropbox/Downloads/",'test.pdf')
|
437
|
+
|