AeroViz 0.1.3__py3-none-any.whl → 0.1.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.
Potentially problematic release.
This version of AeroViz might be problematic. Click here for more details.
- AeroViz/__init__.py +7 -5
- AeroViz/{config → data}/DEFAULT_DATA.csv +1 -1
- AeroViz/dataProcess/Chemistry/__init__.py +40 -40
- AeroViz/dataProcess/Chemistry/_calculate.py +15 -15
- AeroViz/dataProcess/Chemistry/_isoropia.py +72 -68
- AeroViz/dataProcess/Chemistry/_mass_volume.py +158 -161
- AeroViz/dataProcess/Chemistry/_ocec.py +109 -109
- AeroViz/dataProcess/Chemistry/_partition.py +19 -18
- AeroViz/dataProcess/Chemistry/_teom.py +9 -11
- AeroViz/dataProcess/Chemistry/isrpia.cnf +21 -0
- AeroViz/dataProcess/Optical/Angstrom_exponent.py +20 -0
- AeroViz/dataProcess/Optical/_IMPROVE.py +40 -41
- AeroViz/dataProcess/Optical/__init__.py +29 -44
- AeroViz/dataProcess/Optical/_absorption.py +21 -47
- AeroViz/dataProcess/Optical/_extinction.py +31 -25
- AeroViz/dataProcess/Optical/_mie.py +5 -7
- AeroViz/dataProcess/Optical/_mie_sd.py +89 -90
- AeroViz/dataProcess/Optical/_scattering.py +19 -20
- AeroViz/dataProcess/SizeDistr/__init__.py +39 -39
- AeroViz/dataProcess/SizeDistr/__merge.py +159 -158
- AeroViz/dataProcess/SizeDistr/_merge.py +155 -154
- AeroViz/dataProcess/SizeDistr/_merge_v1.py +162 -161
- AeroViz/dataProcess/SizeDistr/_merge_v2.py +153 -152
- AeroViz/dataProcess/SizeDistr/_merge_v3.py +327 -327
- AeroViz/dataProcess/SizeDistr/_merge_v4.py +273 -275
- AeroViz/dataProcess/SizeDistr/_size_distr.py +51 -51
- AeroViz/dataProcess/VOC/__init__.py +9 -9
- AeroViz/dataProcess/VOC/_potential_par.py +53 -55
- AeroViz/dataProcess/__init__.py +28 -6
- AeroViz/dataProcess/core/__init__.py +59 -65
- AeroViz/plot/__init__.py +7 -2
- AeroViz/plot/bar.py +126 -0
- AeroViz/plot/box.py +69 -0
- AeroViz/plot/distribution/distribution.py +421 -427
- AeroViz/plot/meteorology/meteorology.py +240 -292
- AeroViz/plot/optical/__init__.py +0 -1
- AeroViz/plot/optical/optical.py +230 -230
- AeroViz/plot/pie.py +198 -0
- AeroViz/plot/regression.py +196 -0
- AeroViz/plot/scatter.py +165 -0
- AeroViz/plot/templates/__init__.py +2 -4
- AeroViz/plot/templates/ammonium_rich.py +34 -0
- AeroViz/plot/templates/contour.py +25 -25
- AeroViz/plot/templates/corr_matrix.py +86 -93
- AeroViz/plot/templates/diurnal_pattern.py +28 -26
- AeroViz/plot/templates/koschmieder.py +59 -123
- AeroViz/plot/templates/metal_heatmap.py +135 -37
- AeroViz/plot/timeseries/__init__.py +1 -0
- AeroViz/plot/timeseries/template.py +47 -0
- AeroViz/plot/timeseries/timeseries.py +324 -264
- AeroViz/plot/utils/__init__.py +2 -1
- AeroViz/plot/utils/_color.py +57 -57
- AeroViz/plot/utils/_unit.py +48 -48
- AeroViz/plot/utils/plt_utils.py +92 -0
- AeroViz/plot/utils/sklearn_utils.py +49 -0
- AeroViz/plot/utils/units.json +5 -0
- AeroViz/plot/violin.py +80 -0
- AeroViz/process/__init__.py +17 -17
- AeroViz/process/core/DataProc.py +9 -9
- AeroViz/process/core/SizeDist.py +81 -81
- AeroViz/process/method/PyMieScatt_update.py +488 -488
- AeroViz/process/method/mie_theory.py +231 -229
- AeroViz/process/method/prop.py +40 -40
- AeroViz/process/script/AbstractDistCalc.py +103 -103
- AeroViz/process/script/Chemical.py +168 -167
- AeroViz/process/script/IMPACT.py +40 -40
- AeroViz/process/script/IMPROVE.py +152 -152
- AeroViz/process/script/Others.py +45 -45
- AeroViz/process/script/PSD.py +26 -26
- AeroViz/process/script/PSD_dry.py +69 -70
- AeroViz/process/script/retrieve_RI.py +50 -51
- AeroViz/rawDataReader/__init__.py +53 -58
- AeroViz/rawDataReader/config/supported_instruments.py +155 -0
- AeroViz/rawDataReader/core/__init__.py +233 -356
- AeroViz/rawDataReader/script/AE33.py +17 -18
- AeroViz/rawDataReader/script/AE43.py +18 -21
- AeroViz/rawDataReader/script/APS_3321.py +30 -30
- AeroViz/rawDataReader/script/Aurora.py +23 -24
- AeroViz/rawDataReader/script/BC1054.py +36 -40
- AeroViz/rawDataReader/script/EPA_vertical.py +37 -9
- AeroViz/rawDataReader/script/GRIMM.py +16 -23
- AeroViz/rawDataReader/script/IGAC.py +90 -0
- AeroViz/rawDataReader/script/MA350.py +32 -39
- AeroViz/rawDataReader/script/Minion.py +103 -0
- AeroViz/rawDataReader/script/NEPH.py +69 -74
- AeroViz/rawDataReader/script/SMPS_TH.py +25 -25
- AeroViz/rawDataReader/script/SMPS_aim11.py +32 -32
- AeroViz/rawDataReader/script/SMPS_genr.py +31 -31
- AeroViz/rawDataReader/script/Sunset_OCEC.py +60 -0
- AeroViz/rawDataReader/script/TEOM.py +30 -28
- AeroViz/rawDataReader/script/Table.py +13 -14
- AeroViz/rawDataReader/script/VOC.py +26 -0
- AeroViz/rawDataReader/script/__init__.py +18 -20
- AeroViz/tools/database.py +64 -66
- AeroViz/tools/dataclassifier.py +106 -106
- AeroViz/tools/dataprinter.py +51 -51
- AeroViz/tools/datareader.py +38 -38
- {AeroViz-0.1.3.dist-info → AeroViz-0.1.4.dist-info}/METADATA +5 -4
- AeroViz-0.1.4.dist-info/RECORD +112 -0
- AeroViz/plot/improve/__init__.py +0 -1
- AeroViz/plot/improve/improve.py +0 -240
- AeroViz/plot/optical/aethalometer.py +0 -77
- AeroViz/plot/templates/event_evolution.py +0 -65
- AeroViz/plot/templates/regression.py +0 -256
- AeroViz/plot/templates/scatter.py +0 -130
- AeroViz/plot/templates/templates.py +0 -398
- AeroViz/plot/utils/_decorator.py +0 -74
- AeroViz/rawDataReader/script/IGAC_TH.py +0 -104
- AeroViz/rawDataReader/script/IGAC_ZM.py +0 -90
- AeroViz/rawDataReader/script/OCEC_LCRES.py +0 -34
- AeroViz/rawDataReader/script/OCEC_RES.py +0 -28
- AeroViz/rawDataReader/script/VOC_TH.py +0 -30
- AeroViz/rawDataReader/script/VOC_ZM.py +0 -37
- AeroViz/rawDataReader/utils/__init__.py +0 -0
- AeroViz/rawDataReader/utils/config.py +0 -169
- AeroViz-0.1.3.dist-info/RECORD +0 -111
- /AeroViz/{config → data}/DEFAULT_PNSD_DATA.csv +0 -0
- /AeroViz/{config → rawDataReader/config}/__init__.py +0 -0
- {AeroViz-0.1.3.dist-info → AeroViz-0.1.4.dist-info}/LICENSE +0 -0
- {AeroViz-0.1.3.dist-info → AeroViz-0.1.4.dist-info}/WHEEL +0 -0
- {AeroViz-0.1.3.dist-info → AeroViz-0.1.4.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
AeroViz/__init__.py,sha256=A5W6SR71uY_eW44Sh-Yk6blJQ_G1aHrkSzeP2YTPQc4,371
|
|
2
|
+
AeroViz/data/DEFAULT_DATA.csv,sha256=eeeyeh8vSLKkE5tAF0TYnUNOyQIH98VA41bJaAP204Y,2248526
|
|
3
|
+
AeroViz/data/DEFAULT_PNSD_DATA.csv,sha256=imLvLA80oYwo_jzXZtlQn5hZ76d47HUIlK2jp0tZPrg,2636511
|
|
4
|
+
AeroViz/dataProcess/__init__.py,sha256=D3rTVUiGfs_daGuaotVtbijOgLAp6HaRWchj-zoEnHw,828
|
|
5
|
+
AeroViz/dataProcess/Chemistry/__init__.py,sha256=vWlQVQqyX2R_qUQ8cLrIYWmdqLBaxbYwK3PaO7zRqIw,1986
|
|
6
|
+
AeroViz/dataProcess/Chemistry/_calculate.py,sha256=q7ojTFPok0vg8k_1PMECNdP5CPanR9NWQ4Rx5iTcHew,599
|
|
7
|
+
AeroViz/dataProcess/Chemistry/_isoropia.py,sha256=PJPdqErssUPnrksR6BocmgQch1DB7lULyge7diOq9uc,3304
|
|
8
|
+
AeroViz/dataProcess/Chemistry/_mass_volume.py,sha256=oqFjRDYZ1om0_kG4g8XNi2QpUPcHsukpnWKydQoNEVg,5394
|
|
9
|
+
AeroViz/dataProcess/Chemistry/_ocec.py,sha256=75r2EroxVrcp2tSHgNC9TAif_MeJeRlrFyo6DvCLemo,5957
|
|
10
|
+
AeroViz/dataProcess/Chemistry/_partition.py,sha256=tKhb6BJns46UiUlEq6Zq7ahYnvUJ_whY3tWE54C3bqU,1023
|
|
11
|
+
AeroViz/dataProcess/Chemistry/_teom.py,sha256=IiM-TrifWpQLTbKllG-4k4c3mvQulfcmjswWu6muCXA,486
|
|
12
|
+
AeroViz/dataProcess/Chemistry/isrpia.cnf,sha256=iWXTqsOZFmNrJxAI9nYuilZ9h6ru1icdPFVim7YKc_k,566
|
|
13
|
+
AeroViz/dataProcess/Optical/Angstrom_exponent.py,sha256=KSGM_hf2oUPsLoLuhYSRDK5zdekwce9KgqhzRnf2Y4g,706
|
|
14
|
+
AeroViz/dataProcess/Optical/_IMPROVE.py,sha256=_u0uyKC9ZQpB4uLMx3x8Dm5hSUMcdGUifBcC2bGaM9c,1675
|
|
15
|
+
AeroViz/dataProcess/Optical/__init__.py,sha256=h_IYhaum0DhK7Qw6lWFvjAEv7uAqLVVPEwU0V4hJnX4,1371
|
|
16
|
+
AeroViz/dataProcess/Optical/_absorption.py,sha256=pYHIoj_R23wKvxR4acUqqU9JXKY40wgsFvZH78rETrY,1234
|
|
17
|
+
AeroViz/dataProcess/Optical/_extinction.py,sha256=anUemSXmLvJi2CSxqTYgQCgUW4pSUqgZ0q0xZ4zs0zY,1189
|
|
18
|
+
AeroViz/dataProcess/Optical/_mie.py,sha256=K_I8NqRStCdExRVxq2rX5hQdvYmfKuu9JCkNtL1OzfE,352
|
|
19
|
+
AeroViz/dataProcess/Optical/_mie_sd.py,sha256=cbWSorfG-l92csaXsZJ7005f8ij2H_VZopIhNPCwx70,4812
|
|
20
|
+
AeroViz/dataProcess/Optical/_scattering.py,sha256=w5xXXOfafV9a_dXY60YqTyzFDZppjBJeLcKl5PeCQe4,961
|
|
21
|
+
AeroViz/dataProcess/SizeDistr/__init__.py,sha256=PJVAdb-v1q8h38JXIkpVcr6q4mg38V26sk4xD_2Mjlc,2186
|
|
22
|
+
AeroViz/dataProcess/SizeDistr/__merge.py,sha256=A-ZmduUA9a0nVM8szhG1AWhsfUPu2UhGIaqFLcmg7Lk,9422
|
|
23
|
+
AeroViz/dataProcess/SizeDistr/_merge.py,sha256=CyZwUc2M4lL-OE74e8mXq41nC6X0LJTAV8TwpO3fS2o,9176
|
|
24
|
+
AeroViz/dataProcess/SizeDistr/_merge_v1.py,sha256=6Anb8DszoatK66tc9ccA6ZApbqtL7pZRPR5TKHj-Tbs,9526
|
|
25
|
+
AeroViz/dataProcess/SizeDistr/_merge_v2.py,sha256=8OzUKw7hTg-yuQBipuFKgBS_7c7zbApN_BNr00G8q9c,9046
|
|
26
|
+
AeroViz/dataProcess/SizeDistr/_merge_v3.py,sha256=HN2ARFmeWOawOWRPPv_pHEGBBZNgXVbH4dDTxcN7rdY,18749
|
|
27
|
+
AeroViz/dataProcess/SizeDistr/_merge_v4.py,sha256=b8RVAievGIOLrmJHJXRsKXQ1tkMkm6rx43S7XAfeXE4,16228
|
|
28
|
+
AeroViz/dataProcess/SizeDistr/_size_distr.py,sha256=o5fTwLH7j9j5129e3uciSJrOR8AGCN3tkAyGffoPENg,3127
|
|
29
|
+
AeroViz/dataProcess/VOC/__init__.py,sha256=3W5G28UowKVfwsj-tFlxdsCEzXSMxrlrBjpiqUfneaA,290
|
|
30
|
+
AeroViz/dataProcess/VOC/_potential_par.py,sha256=H_9EoDpbz6dZ193FuJEsoaOQ7jCDz9LqPqhEce_nOFQ,3065
|
|
31
|
+
AeroViz/dataProcess/VOC/voc_par.json,sha256=cJF0ynKCMccIruHp7YJ19fZmXZV6ASlLszCJCqduDJQ,7077
|
|
32
|
+
AeroViz/dataProcess/core/__init__.py,sha256=FhGwqlP8ZwXZQS0LjH0YOz2g1Q2yJniUUhRZ_jDOQ6k,2707
|
|
33
|
+
AeroViz/plot/__init__.py,sha256=BxoarxAeDHNdMHizS1bCTwV8NEuUCgeDB75GbSEsNWs,394
|
|
34
|
+
AeroViz/plot/bar.py,sha256=cSPKJLWGifCzICCZVPcbZtrDrea_AStlwSli9-b-lsA,4246
|
|
35
|
+
AeroViz/plot/box.py,sha256=8zDd8jYndSv5f0P1lFeX0m7VWYh9okYgJTClh2Lj7Dg,2115
|
|
36
|
+
AeroViz/plot/pie.py,sha256=PVOqc_tAMlfjojTggP7HPL9Nk3ImigETo_EUFD6K2BY,7421
|
|
37
|
+
AeroViz/plot/regression.py,sha256=mTCNrCAYvH7QjIb_5WlltCR1Kqwer1anpGEsxmO2S3o,7292
|
|
38
|
+
AeroViz/plot/scatter.py,sha256=2Q_Um7Ai-pym2nUiMk6tY_zEXwbKE-BpkgrDkMyNbYA,6293
|
|
39
|
+
AeroViz/plot/violin.py,sha256=pU2Z2yTWocEtImmCAmbtn0WvXtUOrnCGOdDOrLxjooU,2689
|
|
40
|
+
AeroViz/plot/distribution/__init__.py,sha256=nhbIegWczkuEfWsE7-2jfF0dnpmPDzJJzjq8Fuh6q5k,28
|
|
41
|
+
AeroViz/plot/distribution/distribution.py,sha256=sAjqtqKavFwQqI8PGPFnpvZFSU-w2UKjcTTC5L91f4E,20595
|
|
42
|
+
AeroViz/plot/meteorology/__init__.py,sha256=hhGfQE3IUzS3Eaju_nO7LomPPHJnd-zAAZZweXOXs2M,27
|
|
43
|
+
AeroViz/plot/meteorology/meteorology.py,sha256=h5KiaReatt238FXZyGjP9CAMkzTF1aVjOaFAGq3CKRY,11197
|
|
44
|
+
AeroViz/plot/optical/__init__.py,sha256=5S2WPq8NouPYgc46c1XBveSL8Cxs3w8wNYN7vWIpB-s,23
|
|
45
|
+
AeroViz/plot/optical/optical.py,sha256=xtuJuaonyM4OUS_BlkxKudLZKEteCS1u_-Svj3lQPco,13728
|
|
46
|
+
AeroViz/plot/templates/__init__.py,sha256=VXp73SqrSF1WR9WYhHpHtbhvFcb1CR4JeV1tPQvCEEI,227
|
|
47
|
+
AeroViz/plot/templates/ammonium_rich.py,sha256=a46rfwhSZ3LIj71LxdOnklAFyy6Xe_VQ-kh1komnZ5g,1225
|
|
48
|
+
AeroViz/plot/templates/contour.py,sha256=fAM6Wn_EmENQM1IW6KJpwmLva6D9P2dEAaK6cNQBtdQ,1678
|
|
49
|
+
AeroViz/plot/templates/corr_matrix.py,sha256=VeiwBwmg_v6LYslJvhSqweiLBheR3vGfPYxrtHoqJRI,3507
|
|
50
|
+
AeroViz/plot/templates/diurnal_pattern.py,sha256=Vp8nDzSe95ppZBCDkFXnpUEh1cb-19yDS3H0qftoPaw,1434
|
|
51
|
+
AeroViz/plot/templates/koschmieder.py,sha256=XmsYn8x9lu2BgN1FXKHb0quZdRw7Etv1dT5LBjBB0ok,3199
|
|
52
|
+
AeroViz/plot/templates/metal_heatmap.py,sha256=ngqJFiOPCoExPKv-lHvgB1XCSr9fF_jSKmx4VwjUUXQ,4961
|
|
53
|
+
AeroViz/plot/timeseries/__init__.py,sha256=LQ_aE32pvp5ouC--BRa0NwSJ48DYO3rFaOt4AKGmn_s,50
|
|
54
|
+
AeroViz/plot/timeseries/template.py,sha256=E9dxaH_Y5QxnkIHK4VH59IVShnf4i1-TT_QE4NqVqrQ,1460
|
|
55
|
+
AeroViz/plot/timeseries/timeseries.py,sha256=EitNnjleHj3Qu1PBHClWNi9kCgJ8tULGZSicS3xhoZw,14626
|
|
56
|
+
AeroViz/plot/utils/__init__.py,sha256=sxp3nfUnyVIIXYd-F874gEHkhQiDnMPDE1nJ_Z98270,104
|
|
57
|
+
AeroViz/plot/utils/_color.py,sha256=Vhjo-v4UWFME1JbbBR_Ro8FRj6dHB2O5Sud_9lpdu_U,2797
|
|
58
|
+
AeroViz/plot/utils/_unit.py,sha256=Abum0WDnq08DzkSoxkKvBc0mYKo8izIDmgduPo9Q27A,1671
|
|
59
|
+
AeroViz/plot/utils/fRH.json,sha256=t-2ux4TLOYAB-4jJ72LSM4jv1jk9XkaxKYNMDepMHIg,6038
|
|
60
|
+
AeroViz/plot/utils/plt_utils.py,sha256=7Au3r2-7AZQmzrO2OfcyTFomJRLHgu1Npb7wxQqUvzY,3438
|
|
61
|
+
AeroViz/plot/utils/sklearn_utils.py,sha256=hKFfkVkYLRxkIDKvO9COHXwhjD_UWqQigdT3mDToni4,2098
|
|
62
|
+
AeroViz/plot/utils/units.json,sha256=JKcqvLA6dkc8REV_NhX85Jl9LA4iAZxzw9RJp6JTla0,2965
|
|
63
|
+
AeroViz/process/__init__.py,sha256=vqXO0vhowU9yNW5tnVYNg3ceBxLt96PgBNkZ2KUxKXw,1309
|
|
64
|
+
AeroViz/process/core/DataProc.py,sha256=6MBDcHyQmVU16Z0oDo0GItvhU5f7fWLXFMGqUyoW1eQ,419
|
|
65
|
+
AeroViz/process/core/SizeDist.py,sha256=V6CpxTRfWjsZ8GwIEOqyKJ8_qcz7dO0ZmfHQvR6SgW4,2097
|
|
66
|
+
AeroViz/process/core/__init__.py,sha256=WmVSFDx97urX0WPA8dtRVoQF04IDaU-IgxHK979-kM8,98
|
|
67
|
+
AeroViz/process/method/PyMieScatt_update.py,sha256=g3vlzATjzYSYZd3LwmwxEmdkpo4cHJ3KY4rePY4jwZk,21065
|
|
68
|
+
AeroViz/process/method/__init__.py,sha256=_yxoNAbbI82ORhrVsi-6x8vPnWQNHavjZUXy-ioZ2wg,123
|
|
69
|
+
AeroViz/process/method/mie_theory.py,sha256=EC3SsUaq5G3SdQyPMQxcosbEokqAgJw-4Gz6moJiOsk,8666
|
|
70
|
+
AeroViz/process/method/prop.py,sha256=7f18SOkkLgDiY_g1c1We8g-3WDJJIFcxkfR4F99jUgc,1845
|
|
71
|
+
AeroViz/process/script/AbstractDistCalc.py,sha256=wXF7OA634m_i-Y79lU4THj0c0yZx5NUtLNvORH1FWZg,5351
|
|
72
|
+
AeroViz/process/script/Chemical.py,sha256=jjBIdILe0fO5Rqidb4pg3CP6qmMLqFvst-ZSz8mbb7Q,6413
|
|
73
|
+
AeroViz/process/script/IMPACT.py,sha256=Zz1GRQLJopNQGw5qUTdWl7Zxy_CBnFBsL1B-CCemaDQ,1520
|
|
74
|
+
AeroViz/process/script/IMPROVE.py,sha256=5FNl33S_785J7CsSue_CvZP58TWevpwGr2ePQM6qScw,5709
|
|
75
|
+
AeroViz/process/script/Others.py,sha256=TOtSKVZ9Z-zX1LFfE4p36H0hMjfmyyQw_Xaeq8HgMBk,2325
|
|
76
|
+
AeroViz/process/script/PSD.py,sha256=unSvyHp1RqgQecY-Lab-wRFGP2u45blSO4NCNTaxcRQ,3721
|
|
77
|
+
AeroViz/process/script/PSD_dry.py,sha256=P9rSQVA78jHXrY2bDiC1iQvG0w9Js8QiBNfooPOXzfY,3269
|
|
78
|
+
AeroViz/process/script/__init__.py,sha256=QExUHHK79oiwZXvk8u00P8rLwWhGOc1fpZY2Fx8Vkxg,188
|
|
79
|
+
AeroViz/process/script/retrieve_RI.py,sha256=9OQJU1w6VzVqKz00e9GdWswRAnaETe_1meAHp5N_s54,2711
|
|
80
|
+
AeroViz/rawDataReader/__init__.py,sha256=ytqVoXXYk1xeuyqdo2VJkC3JbIA5RmBz20uzgBnMKW0,1881
|
|
81
|
+
AeroViz/rawDataReader/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
82
|
+
AeroViz/rawDataReader/config/supported_instruments.py,sha256=3h25eUGysciCzvDeqReDr7YtYLC8fKAcU903FGiGs9g,4728
|
|
83
|
+
AeroViz/rawDataReader/core/__init__.py,sha256=Ne2_eAzasAcwrWmG-NU35cJy1QMkLU1-iWEPLGZdcqU,10304
|
|
84
|
+
AeroViz/rawDataReader/script/AE33.py,sha256=uwadLYg3RsxW1Yhdtb83qy5lWTTBpliYgfYv4GXV-Js,1110
|
|
85
|
+
AeroViz/rawDataReader/script/AE43.py,sha256=-gdpPJg6EHnU7mKNNCsDe-aytbDlR_qyRWo_kgg0Ss8,1058
|
|
86
|
+
AeroViz/rawDataReader/script/APS_3321.py,sha256=6fYwMPLG0w2RduNqIelwQ3Q2rsiJUZKQUetkyaDg0BU,1696
|
|
87
|
+
AeroViz/rawDataReader/script/Aurora.py,sha256=I2xGA-HwE-mlSqZZQ_GHRM3OxE27L3uvbEXfK0p58ig,1238
|
|
88
|
+
AeroViz/rawDataReader/script/BC1054.py,sha256=XD3CZjg9rd4JzQEF4MCNqyRP1931JhMi-pGkgE7B-Ig,1488
|
|
89
|
+
AeroViz/rawDataReader/script/EPA_vertical.py,sha256=AUXbRlnO2T-CCcBdvyMS4TxYGSp3RI679aZH90thh6k,1671
|
|
90
|
+
AeroViz/rawDataReader/script/GRIMM.py,sha256=wvWDksAewCqYNNMR3IuxilGrzooQWzzWFK2b1CbxWjo,950
|
|
91
|
+
AeroViz/rawDataReader/script/IGAC.py,sha256=3F0gLz0-z5_Sj6JQmO4wklrjfRHkX-EnHfBiioBpcvI,2950
|
|
92
|
+
AeroViz/rawDataReader/script/MA350.py,sha256=yjg4WYGpPiZbtlF1gKfrWF1WS-nbGPTpbKZ3ItixOPs,1289
|
|
93
|
+
AeroViz/rawDataReader/script/Minion.py,sha256=x29UQvjHZbWQigSJuNuGGOyQQxP9O4kPSJ2S1ixR5XM,3942
|
|
94
|
+
AeroViz/rawDataReader/script/NEPH.py,sha256=hTWzZmoBeTm7qKkVFYuyC07iDYOmAexamcA7gfdd2Ak,2806
|
|
95
|
+
AeroViz/rawDataReader/script/SMPS_TH.py,sha256=-ME3MxXv2jWBSwsO3uDcBe28sWcrJ9eJpqcS5VMva2A,1470
|
|
96
|
+
AeroViz/rawDataReader/script/SMPS_aim11.py,sha256=zYE482FQICuFVDo0KtpKL6lBOfdXaxObL7ep2I_ufeE,1634
|
|
97
|
+
AeroViz/rawDataReader/script/SMPS_genr.py,sha256=vFNJXsXpUmZhfuobaFsfypVU98iA4bWE3Tk32LTIh1Q,1611
|
|
98
|
+
AeroViz/rawDataReader/script/Sunset_OCEC.py,sha256=O-o8It8XtVDc50zVT043OqdG_eHkPS229-zEt5WR9cs,1953
|
|
99
|
+
AeroViz/rawDataReader/script/TEOM.py,sha256=pFxks2To9y7n_OlpbrGPcRJEmzK-Y_oVoccHvQqQMg8,1798
|
|
100
|
+
AeroViz/rawDataReader/script/Table.py,sha256=piLBiBhLeqR5Wmd9LLma6ubEbGa--3rdrvRCrQa8NPM,854
|
|
101
|
+
AeroViz/rawDataReader/script/VOC.py,sha256=tl6rzqfVU5ofa2R3Ax-_1i37Lno9rUuMhlylPObYFFY,716
|
|
102
|
+
AeroViz/rawDataReader/script/__init__.py,sha256=UndjtWjvJHMma7WtArL5sF9UHiQsanx5sT2otQDqzng,270
|
|
103
|
+
AeroViz/tools/__init__.py,sha256=tPUmCI9Fi1LgE-QSVnzan5jRdYQBIENH9PRDXB_DhTw,109
|
|
104
|
+
AeroViz/tools/database.py,sha256=05VzjJyhlRrhsZdhfFQ__7CxGm4MdFekLjz3_Is5h9U,3430
|
|
105
|
+
AeroViz/tools/dataclassifier.py,sha256=_wpv0PlZ5EGkcNqHxfFtdEsYvHP5FVE8sMZXikhm_YE,4492
|
|
106
|
+
AeroViz/tools/dataprinter.py,sha256=Jq2Yztpa9YCOeLDVTrRs7PhSdNIPhEAexVj1YSuJ7hY,2249
|
|
107
|
+
AeroViz/tools/datareader.py,sha256=iTQ0U8hdNMjCdbiH7EiKW10UEoxzxXRHc4s5_1IikJo,1933
|
|
108
|
+
AeroViz-0.1.4.dist-info/LICENSE,sha256=E-679GpGGkp3irmtuJXiT7R4cNUA4cmsH6Q7QUgPf5U,1069
|
|
109
|
+
AeroViz-0.1.4.dist-info/METADATA,sha256=RQchK9CdQftok3LH-Cc3gfbzC5g-R-7UWzVQl7VagMA,5323
|
|
110
|
+
AeroViz-0.1.4.dist-info/WHEEL,sha256=HiCZjzuy6Dw0hdX5R3LCFPDmFS4BWl8H-8W39XfmgX4,91
|
|
111
|
+
AeroViz-0.1.4.dist-info/top_level.txt,sha256=BYsmTst_o4FZOKRP1XIvIMlN6mMTTXNfnSToL2_nVbQ,8
|
|
112
|
+
AeroViz-0.1.4.dist-info/RECORD,,
|
AeroViz/plot/improve/__init__.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
from .improve import *
|
AeroViz/plot/improve/improve.py
DELETED
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import matplotlib.pyplot as plt
|
|
2
|
-
import numpy as np
|
|
3
|
-
import pandas as pd
|
|
4
|
-
from matplotlib.pyplot import Figure, Axes
|
|
5
|
-
from pandas import DataFrame, read_json
|
|
6
|
-
from scipy.optimize import curve_fit
|
|
7
|
-
from pathlib import Path
|
|
8
|
-
|
|
9
|
-
from AeroViz import plot
|
|
10
|
-
from AeroViz.plot.utils import *
|
|
11
|
-
from AeroViz.tools import DataBase, DataReader, DataClassifier
|
|
12
|
-
|
|
13
|
-
# TODO: this file has to be reorganized
|
|
14
|
-
|
|
15
|
-
__all__ = ['chemical_enhancement',
|
|
16
|
-
'ammonium_rich',
|
|
17
|
-
'pie_IMPROVE',
|
|
18
|
-
'MLR_IMPROVE',
|
|
19
|
-
'fRH_plot',
|
|
20
|
-
]
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
@set_figure
|
|
24
|
-
def chemical_enhancement(data_set: DataFrame = None,
|
|
25
|
-
data_std: DataFrame = None,
|
|
26
|
-
ax: Axes | None = None,
|
|
27
|
-
**kwargs
|
|
28
|
-
) -> tuple[Figure, Axes]:
|
|
29
|
-
fig, ax = plt.subplots() if ax is None else (ax.get_figure(), ax)
|
|
30
|
-
|
|
31
|
-
ser_grp_sta, ser_grp_sta_std = DataClassifier(DataBase('/Users/chanchihyu/NTU/2020能見度計畫/data/All_data.csv'),
|
|
32
|
-
by='State')
|
|
33
|
-
species = ['AS', 'AN', 'POC', 'SOC', 'Soil', 'SS', 'EC', 'ALWC']
|
|
34
|
-
data_set, data_std = ser_grp_sta.loc[:, species], ser_grp_sta_std.loc[:, species]
|
|
35
|
-
|
|
36
|
-
width = 0.20
|
|
37
|
-
block = width / 4
|
|
38
|
-
|
|
39
|
-
x = np.array([1, 2, 3, 4, 5, 6, 7])
|
|
40
|
-
for i, state in enumerate(['Clean', 'Transition', 'Event']):
|
|
41
|
-
val = np.array(data_set.iloc[i, :-1])
|
|
42
|
-
std = (0,) * 7, np.array(data_std.iloc[i, :-1])
|
|
43
|
-
|
|
44
|
-
plt.bar(x + (i + 1) * (width + block), val, yerr=std, width=width, color=Color.colors3[:-1],
|
|
45
|
-
alpha=0.6 + (0.2 * i),
|
|
46
|
-
edgecolor=None, capsize=None, label=state)
|
|
47
|
-
|
|
48
|
-
ax.set(xlabel=r'$\bf Chemical\ species$',
|
|
49
|
-
ylabel=r'$\bf Mass\ concentration\ ({\mu}g/m^3)$',
|
|
50
|
-
xticks=x + 2 * (width + block),
|
|
51
|
-
xticklabels=species,
|
|
52
|
-
ylim=(0, 25),
|
|
53
|
-
title=r'$\bf Chemical\ enhancement$')
|
|
54
|
-
|
|
55
|
-
ax.vlines(8, 0, 25, linestyles='--', colors='k')
|
|
56
|
-
|
|
57
|
-
ax2 = ax.twinx()
|
|
58
|
-
for i, state in enumerate(['Clean', 'Transition', 'Event']):
|
|
59
|
-
val = np.array(data_set.iloc[i, -1])
|
|
60
|
-
std = np.array([[0], [data_std.iloc[i, -1]]])
|
|
61
|
-
plt.bar(8 + (i + 1) * (width + block), val, yerr=std, width=width, color='#96c8e6',
|
|
62
|
-
alpha=0.6 + (0.2 * i), edgecolor=None, capsize=None, label=state)
|
|
63
|
-
|
|
64
|
-
ax2.set(ylabel=r'$\bf Mass\ concentration\ ({\mu}g/m^3)$',
|
|
65
|
-
ylim=(0, 100),
|
|
66
|
-
xticks=x + 2 * (width + block),
|
|
67
|
-
xticklabels=species
|
|
68
|
-
)
|
|
69
|
-
|
|
70
|
-
a = (np.array(data_set.loc['Event']) + np.array(data_set.loc['Transition'])) / 2
|
|
71
|
-
b = (np.array(data_set.loc['Transition']) + np.array(data_set.loc['Clean'])) / 2
|
|
72
|
-
c = np.array(data_set.loc['Event']) / np.array(data_set.loc['Transition'])
|
|
73
|
-
d = np.array(data_set.loc['Transition']) / np.array(data_set.loc['Clean'])
|
|
74
|
-
|
|
75
|
-
for i, (posa, posb, vala, valb) in enumerate(zip(a, b, c, d)):
|
|
76
|
-
if i < 7:
|
|
77
|
-
ax.text(i + 1.5, posa, '{:.2f}'.format(vala), fontsize=6, weight='bold', zorder=1)
|
|
78
|
-
ax.text(i + 1.25, posb, '{:.2f}'.format(valb), fontsize=6, weight='bold', zorder=1)
|
|
79
|
-
else:
|
|
80
|
-
ax2.text(i + 1.5, posa, '{:.2f}'.format(vala), fontsize=6, weight='bold', zorder=1)
|
|
81
|
-
ax2.text(i + 1.25, posb, '{:.2f}'.format(valb), fontsize=6, weight='bold', zorder=1)
|
|
82
|
-
|
|
83
|
-
plt.show()
|
|
84
|
-
|
|
85
|
-
return fig, ax
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
@set_figure
|
|
89
|
-
def ammonium_rich(df: DataFrame,
|
|
90
|
-
**kwargs
|
|
91
|
-
) -> tuple[Figure, Axes]:
|
|
92
|
-
df = df[['NH4+', 'SO42-', 'NO3-', 'PM25']].dropna().copy().div([18, 96, 62, 1])
|
|
93
|
-
df['required_ammonium'] = df['NO3-'] + 2 * df['SO42-']
|
|
94
|
-
|
|
95
|
-
fig, ax = plt.subplots()
|
|
96
|
-
|
|
97
|
-
scatter = ax.scatter(df['required_ammonium'].to_numpy(), df['NH4+'].to_numpy(), c=df['PM25'].to_numpy(),
|
|
98
|
-
vmin=0, vmax=70, cmap='jet', marker='o', s=10, alpha=1)
|
|
99
|
-
|
|
100
|
-
ax.axline((0, 0), slope=1., color='k', lw=2, ls='--', alpha=0.5, label='1:1')
|
|
101
|
-
plt.text(0.97, 0.97, r'$\bf 1:1\ Line$', color='k', ha='right', va='top', transform=ax.transAxes)
|
|
102
|
-
|
|
103
|
-
ax.set(xlim=(0, 1.2),
|
|
104
|
-
ylim=(0, 1.2),
|
|
105
|
-
xlabel=r'$\bf NO_{3}^{-}\ +\ 2\ \times\ SO_{4}^{2-}\ (mole\ m^{-3})$',
|
|
106
|
-
ylabel=r'$\bf NH_{4}^{+}\ (mole\ m^{-3})$',
|
|
107
|
-
title=kwargs.get('title', ''))
|
|
108
|
-
|
|
109
|
-
color_bar = plt.colorbar(scatter, label=Unit('PM25'), extend='both')
|
|
110
|
-
|
|
111
|
-
# fig.savefig(f'Ammonium_rich_{title}')
|
|
112
|
-
plt.show()
|
|
113
|
-
|
|
114
|
-
return fig, ax
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
def pie_IMPROVE():
|
|
118
|
-
Species1 = ['AS_ext_dry', 'AN_ext_dry', 'OM_ext_dry', 'Soil_ext_dry', 'SS_ext_dry', 'EC_ext_dry']
|
|
119
|
-
Species2 = ['AS_ext_dry', 'AN_ext_dry', 'OM_ext_dry', 'Soil_ext_dry', 'SS_ext_dry', 'EC_ext_dry', 'ALWC_ext']
|
|
120
|
-
Species3 = ['AS_ext', 'AN_ext', 'OM_ext', 'Soil_ext', 'SS_ext', 'EC_ext']
|
|
121
|
-
|
|
122
|
-
ser_grp_sta, _ = DataClassifier(DataBase(), by='State')
|
|
123
|
-
|
|
124
|
-
ext_dry_dict = ser_grp_sta.loc[:, Species1]
|
|
125
|
-
ext_amb_dict = ser_grp_sta.loc[:, Species2]
|
|
126
|
-
ext_mix_dict = ser_grp_sta.loc[:, Species3]
|
|
127
|
-
|
|
128
|
-
plot.donuts(data_set=ext_dry_dict, labels=['AS', 'AN', 'OM', 'Soil', 'SS', 'BC'], unit='Extinction')
|
|
129
|
-
plot.donuts(data_set=ext_mix_dict, labels=['AS', 'AN', 'OM', 'Soil', 'SS', 'BC'], unit='Extinction')
|
|
130
|
-
plot.donuts(data_set=ext_amb_dict, labels=['AS', 'AN', 'OM', 'Soil', 'SS', 'BC', 'ALWC'],
|
|
131
|
-
unit='Extinction', colors=Color.colors2)
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
def MLR_IMPROVE(**kwargs):
|
|
135
|
-
"""
|
|
136
|
-
Perform multiple linear regression analysis and generate plots based on IMPROVE dataset.
|
|
137
|
-
|
|
138
|
-
Parameters
|
|
139
|
-
----------
|
|
140
|
-
**kwargs : dict
|
|
141
|
-
Additional keyword arguments for customization.
|
|
142
|
-
|
|
143
|
-
Returns
|
|
144
|
-
-------
|
|
145
|
-
None
|
|
146
|
-
|
|
147
|
-
Examples
|
|
148
|
-
--------
|
|
149
|
-
Example usage of MLR_IMPROVE function:
|
|
150
|
-
|
|
151
|
-
>>> MLR_IMPROVE()
|
|
152
|
-
|
|
153
|
-
Notes
|
|
154
|
-
-----
|
|
155
|
-
This function performs multiple linear regression analysis on the IMPROVE dataset and generates plots for analysis.
|
|
156
|
-
|
|
157
|
-
- The function first selects specific species from the dataset and drops NaN values.
|
|
158
|
-
- It calculates a 'Localized' value based on a multiplier and the sum of selected species.
|
|
159
|
-
- Data from 'modified_IMPROVE.csv' and 'revised_IMPROVE.csv' are read and concatenated with the dataset.
|
|
160
|
-
- Statistical analysis is performed using DataClassifier to calculate mean and standard deviation.
|
|
161
|
-
- Plots are generated using linear_regression for Extinction vs. Revised/Modified/Localized and Pie.donuts for a
|
|
162
|
-
pie chart showing the distribution of species based on Extinction.
|
|
163
|
-
|
|
164
|
-
"""
|
|
165
|
-
species = ['Extinction', 'Scattering', 'Absorption',
|
|
166
|
-
'total_ext_dry', 'AS_ext_dry', 'AN_ext_dry', 'OM_ext_dry', 'Soil_ext_dry', 'SS_ext_dry', 'EC_ext_dry',
|
|
167
|
-
'AS', 'AN', 'POC', 'SOC', 'Soil', 'SS', 'EC', 'OM']
|
|
168
|
-
|
|
169
|
-
df = DataBase('/Users/chanchihyu/NTU/2020能見度計畫/data/All_data.csv')[species].dropna().copy()
|
|
170
|
-
|
|
171
|
-
# multiple_linear_regression(df, x=['AS', 'AN', 'POC', 'SOC', 'Soil', 'SS'], y='Scattering', add_constant=True)
|
|
172
|
-
# multiple_linear_regression(df, x=['POC', 'SOC', 'EC'], y='Absorption', add_constant=True)
|
|
173
|
-
# multiple_linear_regression(df, x=['AS', 'AN', 'POC', 'SOC', 'Soil', 'SS', 'EC'], y='Extinction', add_constant=False)
|
|
174
|
-
|
|
175
|
-
multiplier = [2.675, 4.707, 11.6, 7.272, 0, 0.131, 10.638]
|
|
176
|
-
df['Localized'] = df[['AS', 'AN', 'POC', 'SOC', 'Soil', 'SS', 'EC']].mul(multiplier).sum(axis=1)
|
|
177
|
-
# TODO: remove name
|
|
178
|
-
modify_IMPROVE = DataReader('modified_IMPROVE.csv')['total_ext_dry'].rename('Modified')
|
|
179
|
-
revised_IMPROVE = DataReader('revised_IMPROVE.csv')['total_ext_dry'].rename('Revised')
|
|
180
|
-
|
|
181
|
-
df = pd.concat([df, revised_IMPROVE, modify_IMPROVE], axis=1)
|
|
182
|
-
|
|
183
|
-
n_df = df[['AS', 'AN', 'POC', 'SOC', 'Soil', 'SS', 'EC']].mul(multiplier)
|
|
184
|
-
mean, std = DataClassifier(n_df, 'State')
|
|
185
|
-
|
|
186
|
-
ser_grp_sta, _ = DataClassifier(DataBase(), by='State')
|
|
187
|
-
mass_comp = ser_grp_sta.loc[:, ['AS', 'AN', 'POC', 'SOC', 'Soil', 'SS', 'EC']]
|
|
188
|
-
|
|
189
|
-
# plot
|
|
190
|
-
plot.linear_regression(df, x='Extinction', y=['Revised', 'Modified', 'Localized'], xlim=[0, 400], ylim=[0, 400],
|
|
191
|
-
regression=True, diagonal=True)
|
|
192
|
-
plot.donuts(data_set=mass_comp, labels=['AS', 'AN', 'POC', 'SOC', 'Soil', 'SS', 'EC'],
|
|
193
|
-
unit='PM25', colors=Color.colors3)
|
|
194
|
-
plot.donuts(mean, labels=['AS', 'AN', 'POC', 'SOC', 'Soil', 'SS', 'EC'], unit='Extinction', colors=Color.colors3)
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
@set_figure
|
|
198
|
-
def fRH_plot(**kwargs) -> tuple[Figure, Axes]:
|
|
199
|
-
frh = read_json(Path(__file__).parent.parent / 'utils' / 'fRH.json')
|
|
200
|
-
|
|
201
|
-
def fitting_func(RH, a, b, c):
|
|
202
|
-
f = a + b * (RH / 100) ** c
|
|
203
|
-
return f
|
|
204
|
-
|
|
205
|
-
x = frh.index.to_numpy()
|
|
206
|
-
y = frh['fRHs'].to_numpy()
|
|
207
|
-
|
|
208
|
-
result = curve_fit(fitting_func, x, y)
|
|
209
|
-
params = result[0].tolist()
|
|
210
|
-
val_fit = fitting_func(x, *params)
|
|
211
|
-
|
|
212
|
-
fig, ax = plt.subplots(figsize=(3, 3))
|
|
213
|
-
|
|
214
|
-
ax.plot(frh.index, frh['fRH'], 'k-o', ms=2, label='$f(RH)_{original}$')
|
|
215
|
-
ax.plot(frh.index, frh['fRHs'], 'g-o', ms=2, label='$f(RH)_{small\\ mode}$')
|
|
216
|
-
ax.plot(frh.index, frh['fRHl'], 'r-o', ms=2, label='$f(RH)_{large\\ mode}$')
|
|
217
|
-
ax.plot(frh.index, frh['fRHSS'], 'b-o', ms=2, label='$f(RH)_{sea\\ salt}$')
|
|
218
|
-
|
|
219
|
-
ax.set(xlim=(0, 100),
|
|
220
|
-
ylim=(1, None),
|
|
221
|
-
xlabel='$RH (\\%)$',
|
|
222
|
-
ylabel='$f(RH)$',
|
|
223
|
-
title=f'$Hygroscopic\\ growth\\ factor$'
|
|
224
|
-
)
|
|
225
|
-
|
|
226
|
-
ax.grid(axis='y', color='gray', linestyle='dashed', linewidth=0.4, alpha=0.4)
|
|
227
|
-
|
|
228
|
-
ax.legend()
|
|
229
|
-
|
|
230
|
-
plt.show()
|
|
231
|
-
# fig.savefig('fRH_plot')
|
|
232
|
-
|
|
233
|
-
return fig, ax
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
if __name__ == '__main__':
|
|
237
|
-
# chemical_enhancement()
|
|
238
|
-
# MLR_IMPROVE()
|
|
239
|
-
# ammonium_rich()
|
|
240
|
-
fRH_plot()
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import matplotlib.pyplot as plt
|
|
2
|
-
import numpy as np
|
|
3
|
-
from pandas import date_range
|
|
4
|
-
|
|
5
|
-
from AeroViz.plot.utils import *
|
|
6
|
-
|
|
7
|
-
__all__ = ['plot_MA350',
|
|
8
|
-
'plot_MA3502',
|
|
9
|
-
'plot_day_night']
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
@set_figure(figsize=(15, 5))
|
|
13
|
-
def plot_MA350(df, **kwargs):
|
|
14
|
-
fig, ax = plt.subplots()
|
|
15
|
-
|
|
16
|
-
# ax.scatter(df.index, df['UV BCc'], marker='o', c='purple', alpha=0.5, label='UV BCc')
|
|
17
|
-
# ax.scatter(df.index, df['Blue BCc'], c='b', alpha=0.5, label='Blue BCc')
|
|
18
|
-
# ax.scatter(df.index, df['Green BCc'], c='g', alpha=0.5, label='Green BCc')
|
|
19
|
-
# ax.scatter(df.index, df['Red BCc'], c='r', alpha=0.5, label='Red BCc')
|
|
20
|
-
mean, std = round(df.mean(), 2), round(df.std(), 2)
|
|
21
|
-
|
|
22
|
-
label1 = rf'$MA350-0171\ :\;{mean["MA350_0171 IR BCc"]}\;\pm\;{std["MA350_0171 IR BCc"]}\;(ng/m^3)$'
|
|
23
|
-
label2 = rf'$MA350-0176\ :\;{mean["MA350_0176 IR BCc"]}\;\pm\;{std["MA350_0176 IR BCc"]}\;(ng/m^3)$'
|
|
24
|
-
label3 = rf'$BC-1054\ :\;{mean["BC1054 IR BCc"]}\;\pm\;{std["BC1054 IR BCc"]}\;(ng/m^3)$'
|
|
25
|
-
ax.scatter(df.index, df['MA350_0171 IR BCc'], s=10, ls='-', marker='o', c='#a3b18a', alpha=0.5, label=label1)
|
|
26
|
-
ax.scatter(df.index, df['MA350_0176 IR BCc'], s=10, ls='-', marker='o', c='#3a5a40', alpha=0.5, label=label2)
|
|
27
|
-
ax.scatter(df.index, df['BC1054 IR BCc'], s=10, ls='-', marker='o', c='g', alpha=0.5, label=label3)
|
|
28
|
-
ax.legend(prop={'weight': 'bold'}, loc='upper left')
|
|
29
|
-
|
|
30
|
-
st_tm, fn_tm = df.index[0], df.index[-1]
|
|
31
|
-
tick_time = date_range(st_tm, fn_tm, freq=kwargs.get('freq', '10d'))
|
|
32
|
-
|
|
33
|
-
ax.set(xlabel=kwargs.get('xlabel', ''),
|
|
34
|
-
ylabel=kwargs.get('ylabel', r'$BC\ (ng/m^3)$'),
|
|
35
|
-
xticks=kwargs.get('xticks', tick_time),
|
|
36
|
-
xticklabels=kwargs.get('xticklabels', [_tm.strftime("%F") for _tm in tick_time]),
|
|
37
|
-
xlim=kwargs.get('xlim', (st_tm, fn_tm)),
|
|
38
|
-
ylim=kwargs.get('ylim', (0, None)),
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
@set_figure
|
|
43
|
-
def plot_MA3502(df):
|
|
44
|
-
fig, ax = plt.subplots()
|
|
45
|
-
|
|
46
|
-
bins = np.array([375, 470, 528, 625, 880])
|
|
47
|
-
vals = df.dropna().iloc[:, -5:].values
|
|
48
|
-
|
|
49
|
-
ax.boxplot(vals, positions=bins, widths=20,
|
|
50
|
-
showfliers=False, showmeans=True, meanline=True, patch_artist=True,
|
|
51
|
-
boxprops=dict(facecolor='#f2c872', alpha=.7),
|
|
52
|
-
meanprops=dict(color='#000000', ls='none'),
|
|
53
|
-
medianprops=dict(ls='-', color='#000000'))
|
|
54
|
-
|
|
55
|
-
ax.set(xlim=(355, 900),
|
|
56
|
-
ylim=(0, None),
|
|
57
|
-
xlabel=r'$\lambda\ (nm)$',
|
|
58
|
-
ylabel=r'$Absorption\ (1/Mm)$', )
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
@set_figure(figsize=(6, 5))
|
|
62
|
-
def plot_day_night(df):
|
|
63
|
-
# Group by hour of day and calculate mean
|
|
64
|
-
df_grouped = df.groupby(df.index.hour).mean()
|
|
65
|
-
|
|
66
|
-
# Create figure and plot
|
|
67
|
-
fig, ax = plt.subplots()
|
|
68
|
-
ax.plot(df_grouped.index, df_grouped['MA350_0171 IR BCc'], marker='o', c='k', alpha=0.5, label='MA350-0171')
|
|
69
|
-
ax.plot(df_grouped.index, df_grouped['MA350_0176 IR BCc'], marker='o', c='r', alpha=0.5, label='MA350-0176')
|
|
70
|
-
ax.plot(df_grouped.index, df_grouped['BC1054 IR BCc'], marker='o', c='b', alpha=0.5, label='BC-1054')
|
|
71
|
-
|
|
72
|
-
ax.set(xlim=(0, 23),
|
|
73
|
-
xlabel='Hour of Day',
|
|
74
|
-
ylabel=r'$BC\ (ng/m^3)$',
|
|
75
|
-
title=f'Diurnal pattern', )
|
|
76
|
-
|
|
77
|
-
ax.legend()
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
from os.path import join as pth
|
|
2
|
-
|
|
3
|
-
import matplotlib.pyplot as plt
|
|
4
|
-
import numpy as np
|
|
5
|
-
from pandas import date_range, read_csv
|
|
6
|
-
|
|
7
|
-
from AeroViz.plot.utils import *
|
|
8
|
-
|
|
9
|
-
# TODO:
|
|
10
|
-
|
|
11
|
-
# read csv file
|
|
12
|
-
blh = read_csv(pth('事件分析.csv'), parse_dates=['Time'], index_col='Time')
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
@set_figure(figsize=(12, 5))
|
|
16
|
-
def event_evolution(_df, **kwargs):
|
|
17
|
-
print(f'Plot : {_df.month[0]}')
|
|
18
|
-
|
|
19
|
-
st_tm, fn_tm = _df.index[0], _df.index[-1]
|
|
20
|
-
tick_time = date_range(st_tm, fn_tm, freq='1d') # set tick
|
|
21
|
-
|
|
22
|
-
# seperate day and night
|
|
23
|
-
_df_day = _df.between_time('6:00', '17:00').reindex(date_range(st_tm, fn_tm, freq='1h'))
|
|
24
|
-
_df_night = _df.between_time('18:00', '5:00').reindex(date_range(st_tm, fn_tm, freq='1h'))
|
|
25
|
-
|
|
26
|
-
## plot
|
|
27
|
-
fig, ax = plt.subplots()
|
|
28
|
-
|
|
29
|
-
## plot background
|
|
30
|
-
shade_value, _ = np.meshgrid(_df['PM2.5'], np.arange((1., 2500), 100))
|
|
31
|
-
ax.pcolormesh(_df.index, np.arange((1., 2500), 100), shade_value, cmap='binary', vmin=0, vmax=300,
|
|
32
|
-
shading='auto')
|
|
33
|
-
|
|
34
|
-
## plot day and night
|
|
35
|
-
ld = ax.scatter(_df.index[0:], _df_day['Ext'], s=50, c='#73b9ff', label='Day Ext', marker='o', alpha=.7)
|
|
36
|
-
ln = ax.scatter(_df.index[0:], _df_night['Ext'], s=50, c='#00238c', label='Night Ext', marker='o', alpha=.7)
|
|
37
|
-
|
|
38
|
-
ax2 = ax.twinx()
|
|
39
|
-
# ld, = ax2.plot(_df_day['VC'],c='#FF9797',label='day 06:00~18:00')
|
|
40
|
-
# ln, = ax2.plot(_df_night['VC'],c='#FF0000',label='night 18:00~06:00')
|
|
41
|
-
ld2 = ax2.scatter(_df.index, _df_day['VC'], s=50, c='#FF9797', label='Day VC', marker='o', alpha=.5)
|
|
42
|
-
ln2 = ax2.scatter(_df.index, _df_night['VC'], s=50, c='#FF0000', label='Night VC', marker='o', alpha=.5)
|
|
43
|
-
|
|
44
|
-
# add legend on the first axes
|
|
45
|
-
ax.legend(handles=[ld, ln, ld2, ln2], framealpha=0, prop={'weight': 'bold'}, loc='upper left')
|
|
46
|
-
|
|
47
|
-
# add xlabel, ylabel, suptitle
|
|
48
|
-
ax.set(xlabel='Date',
|
|
49
|
-
ylabel='Ext (1/Mm)',
|
|
50
|
-
xlim=(st_tm, fn_tm),
|
|
51
|
-
ylim=(1., 600),
|
|
52
|
-
xticks=tick_time,
|
|
53
|
-
xticklabels=[_tm.strftime("%F %H:00") for _tm in tick_time])
|
|
54
|
-
|
|
55
|
-
ax2.set(ylabel=r'$VC (m^{2}/s)$',
|
|
56
|
-
ylim=(1., 2500))
|
|
57
|
-
|
|
58
|
-
fig.suptitle(f'Event evolution ({st_tm.strftime("%F")}_{fn_tm.strftime("%F")})')
|
|
59
|
-
|
|
60
|
-
# save figure
|
|
61
|
-
fig.savefig(pth(f"event_evolution_{st_tm.strftime("%F")}_{fn_tm.strftime("%F")}"))
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
if __name__ == '__main__':
|
|
65
|
-
event_evolution(blh)
|