ultraplot 0.99.3__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.
Files changed (416) hide show
  1. ultraplot/__init__.py +115 -0
  2. ultraplot/__init__.py.rej +58 -0
  3. ultraplot/axes/__init__.py +42 -0
  4. ultraplot/axes/base.py +3240 -0
  5. ultraplot/axes/cartesian.py +1425 -0
  6. ultraplot/axes/geo.py +1675 -0
  7. ultraplot/axes/plot.py +4569 -0
  8. ultraplot/axes/polar.py +381 -0
  9. ultraplot/axes/shared.py +186 -0
  10. ultraplot/axes/three.py +34 -0
  11. ultraplot/cmaps/Algae.rgb +256 -0
  12. ultraplot/cmaps/Amp.rgb +256 -0
  13. ultraplot/cmaps/BR.rgb +256 -0
  14. ultraplot/cmaps/Balance.rgb +256 -0
  15. ultraplot/cmaps/Blues1_r.xml +17 -0
  16. ultraplot/cmaps/Blues2.xml +16 -0
  17. ultraplot/cmaps/Blues3.xml +25 -0
  18. ultraplot/cmaps/Blues4_r.xml +17 -0
  19. ultraplot/cmaps/Blues5.xml +16 -0
  20. ultraplot/cmaps/Blues6.xml +25 -0
  21. ultraplot/cmaps/Blues7.xml +16 -0
  22. ultraplot/cmaps/Blues8.xml +17 -0
  23. ultraplot/cmaps/Blues9.xml +1 -0
  24. ultraplot/cmaps/Boreal.json +53 -0
  25. ultraplot/cmaps/Browns1.xml +16 -0
  26. ultraplot/cmaps/Browns2.xml +26 -0
  27. ultraplot/cmaps/Browns3.xml +17 -0
  28. ultraplot/cmaps/Browns4.xml +17 -0
  29. ultraplot/cmaps/Browns5.xml +26 -0
  30. ultraplot/cmaps/Browns6.xml +17 -0
  31. ultraplot/cmaps/Browns7.xml +19 -0
  32. ultraplot/cmaps/Browns8.xml +11 -0
  33. ultraplot/cmaps/Browns9.xml +1 -0
  34. ultraplot/cmaps/ColdHot.rgb +229 -0
  35. ultraplot/cmaps/Crest.rgb +256 -0
  36. ultraplot/cmaps/Curl.rgb +512 -0
  37. ultraplot/cmaps/Deep.rgb +256 -0
  38. ultraplot/cmaps/Delta.rgb +512 -0
  39. ultraplot/cmaps/Dense.rgb +256 -0
  40. ultraplot/cmaps/Div.json +71 -0
  41. ultraplot/cmaps/DryWet.json +73 -0
  42. ultraplot/cmaps/Dusk.json +53 -0
  43. ultraplot/cmaps/Fire.json +53 -0
  44. ultraplot/cmaps/Flare.rgb +256 -0
  45. ultraplot/cmaps/Glacial.json +53 -0
  46. ultraplot/cmaps/Greens1_r.xml +26 -0
  47. ultraplot/cmaps/Greens2.xml +28 -0
  48. ultraplot/cmaps/Greens3_r.xml +28 -0
  49. ultraplot/cmaps/Greens4.xml +17 -0
  50. ultraplot/cmaps/Greens5.xml +16 -0
  51. ultraplot/cmaps/Greens6_r.xml +16 -0
  52. ultraplot/cmaps/Greens7.xml +16 -0
  53. ultraplot/cmaps/Greens8.xml +26 -0
  54. ultraplot/cmaps/Haline.rgb +256 -0
  55. ultraplot/cmaps/Ice.rgb +256 -0
  56. ultraplot/cmaps/IceFire.rgb +256 -0
  57. ultraplot/cmaps/Mako.rgb +256 -0
  58. ultraplot/cmaps/Marine.json +53 -0
  59. ultraplot/cmaps/Matter.rgb +256 -0
  60. ultraplot/cmaps/Mono.txt +256 -0
  61. ultraplot/cmaps/MonoCycle.txt +256 -0
  62. ultraplot/cmaps/NegPos.json +71 -0
  63. ultraplot/cmaps/Oranges1.xml +27 -0
  64. ultraplot/cmaps/Oranges2.xml +26 -0
  65. ultraplot/cmaps/Oranges3.xml +15 -0
  66. ultraplot/cmaps/Oranges4.xml +23 -0
  67. ultraplot/cmaps/Oxy.rgb +256 -0
  68. ultraplot/cmaps/Phase.rgb +256 -0
  69. ultraplot/cmaps/Purples1_r.xml +16 -0
  70. ultraplot/cmaps/Purples2.xml +17 -0
  71. ultraplot/cmaps/Purples3.xml +18 -0
  72. ultraplot/cmaps/Reds1.xml +26 -0
  73. ultraplot/cmaps/Reds2.xml +22 -0
  74. ultraplot/cmaps/Reds3.xml +23 -0
  75. ultraplot/cmaps/Reds4.xml +26 -0
  76. ultraplot/cmaps/Reds5.xml +17 -0
  77. ultraplot/cmaps/Rocket.rgb +256 -0
  78. ultraplot/cmaps/Solar.rgb +256 -0
  79. ultraplot/cmaps/Speed.rgb +256 -0
  80. ultraplot/cmaps/Stellar.json +53 -0
  81. ultraplot/cmaps/Sunrise.json +53 -0
  82. ultraplot/cmaps/Sunset.json +53 -0
  83. ultraplot/cmaps/Tempo.rgb +256 -0
  84. ultraplot/cmaps/Thermal.rgb +256 -0
  85. ultraplot/cmaps/Turbid.rgb +256 -0
  86. ultraplot/cmaps/Vivid.xml +11 -0
  87. ultraplot/cmaps/Vlag.rgb +256 -0
  88. ultraplot/cmaps/Yellows1.xml +17 -0
  89. ultraplot/cmaps/Yellows2.xml +17 -0
  90. ultraplot/cmaps/Yellows3.xml +17 -0
  91. ultraplot/cmaps/Yellows4.xml +17 -0
  92. ultraplot/cmaps/acton.txt +256 -0
  93. ultraplot/cmaps/bam.txt +256 -0
  94. ultraplot/cmaps/bamO.txt +256 -0
  95. ultraplot/cmaps/bamako.txt +256 -0
  96. ultraplot/cmaps/batlow.txt +256 -0
  97. ultraplot/cmaps/batlowK.txt +256 -0
  98. ultraplot/cmaps/batlowW.txt +256 -0
  99. ultraplot/cmaps/berlin.txt +256 -0
  100. ultraplot/cmaps/bilbao.txt +256 -0
  101. ultraplot/cmaps/broc.txt +256 -0
  102. ultraplot/cmaps/brocO.txt +256 -0
  103. ultraplot/cmaps/buda.txt +256 -0
  104. ultraplot/cmaps/bukavu.txt +256 -0
  105. ultraplot/cmaps/cork.txt +256 -0
  106. ultraplot/cmaps/corkO.txt +256 -0
  107. ultraplot/cmaps/davos.txt +256 -0
  108. ultraplot/cmaps/devon.txt +256 -0
  109. ultraplot/cmaps/fes.txt +256 -0
  110. ultraplot/cmaps/hawaii.txt +256 -0
  111. ultraplot/cmaps/imola.txt +256 -0
  112. ultraplot/cmaps/lajolla.txt +256 -0
  113. ultraplot/cmaps/lapaz.txt +256 -0
  114. ultraplot/cmaps/lisbon.txt +256 -0
  115. ultraplot/cmaps/nuuk.txt +256 -0
  116. ultraplot/cmaps/oleron.txt +256 -0
  117. ultraplot/cmaps/oslo.txt +256 -0
  118. ultraplot/cmaps/roma.txt +256 -0
  119. ultraplot/cmaps/romaO.txt +256 -0
  120. ultraplot/cmaps/tofino.txt +256 -0
  121. ultraplot/cmaps/tokyo.txt +256 -0
  122. ultraplot/cmaps/turku.txt +256 -0
  123. ultraplot/cmaps/vanimo.txt +256 -0
  124. ultraplot/cmaps/vik.txt +256 -0
  125. ultraplot/cmaps/vikO.txt +256 -0
  126. ultraplot/colors/opencolor.txt +132 -0
  127. ultraplot/colors/xkcd.txt +951 -0
  128. ultraplot/colors.py +3241 -0
  129. ultraplot/colors.py.rej +243 -0
  130. ultraplot/config.py +1809 -0
  131. ultraplot/constructor.py +1633 -0
  132. ultraplot/cycles/538.hex +2 -0
  133. ultraplot/cycles/FlatUI.hex +1 -0
  134. ultraplot/cycles/Qual1.rgb +7 -0
  135. ultraplot/cycles/Qual2.rgb +13 -0
  136. ultraplot/cycles/bmh.hex +2 -0
  137. ultraplot/cycles/classic.hex +2 -0
  138. ultraplot/cycles/colorblind.hex +2 -0
  139. ultraplot/cycles/colorblind10.hex +2 -0
  140. ultraplot/cycles/default.hex +2 -0
  141. ultraplot/cycles/ggplot.hex +1 -0
  142. ultraplot/cycles/seaborn.hex +2 -0
  143. ultraplot/cycles/tableau.hex +2 -0
  144. ultraplot/demos.py +1201 -0
  145. ultraplot/externals/__init__.py +5 -0
  146. ultraplot/externals/hsluv.py +330 -0
  147. ultraplot/figure.py +2102 -0
  148. ultraplot/fonts/FiraMath-Bold.ttf +0 -0
  149. ultraplot/fonts/FiraMath-ExtraLight.ttf +0 -0
  150. ultraplot/fonts/FiraMath-Heavy.ttf +0 -0
  151. ultraplot/fonts/FiraMath-Light.ttf +0 -0
  152. ultraplot/fonts/FiraMath-Medium.ttf +0 -0
  153. ultraplot/fonts/FiraMath-Regular.ttf +0 -0
  154. ultraplot/fonts/FiraMath-SemiBold.ttf +0 -0
  155. ultraplot/fonts/FiraMath-UltraLight.ttf +0 -0
  156. ultraplot/fonts/FiraSans-Black.ttf +0 -0
  157. ultraplot/fonts/FiraSans-BlackItalic.ttf +0 -0
  158. ultraplot/fonts/FiraSans-Bold.ttf +0 -0
  159. ultraplot/fonts/FiraSans-BoldItalic.ttf +0 -0
  160. ultraplot/fonts/FiraSans-ExtraBold.ttf +0 -0
  161. ultraplot/fonts/FiraSans-ExtraBoldItalic.ttf +0 -0
  162. ultraplot/fonts/FiraSans-ExtraLight.ttf +0 -0
  163. ultraplot/fonts/FiraSans-ExtraLightItalic.ttf +0 -0
  164. ultraplot/fonts/FiraSans-Italic.ttf +0 -0
  165. ultraplot/fonts/FiraSans-Light.ttf +0 -0
  166. ultraplot/fonts/FiraSans-LightItalic.ttf +0 -0
  167. ultraplot/fonts/FiraSans-Medium.ttf +0 -0
  168. ultraplot/fonts/FiraSans-MediumItalic.ttf +0 -0
  169. ultraplot/fonts/FiraSans-Regular.ttf +0 -0
  170. ultraplot/fonts/FiraSans-SemiBold.ttf +0 -0
  171. ultraplot/fonts/FiraSans-SemiBoldItalic.ttf +0 -0
  172. ultraplot/fonts/LICENSE_FIRAMATH.txt +92 -0
  173. ultraplot/fonts/LICENSE_FIRASANS.txt +97 -0
  174. ultraplot/fonts/LICENSE_NOTOSANS.txt +202 -0
  175. ultraplot/fonts/LICENSE_NOTOSERIF.txt +93 -0
  176. ultraplot/fonts/LICENSE_OPENSANS.txt +202 -0
  177. ultraplot/fonts/LICENSE_ROBOTO.txt +202 -0
  178. ultraplot/fonts/LICENSE_SOURCESANS.txt +93 -0
  179. ultraplot/fonts/LICENSE_SOURCESERIF.txt +93 -0
  180. ultraplot/fonts/LICENSE_TEXGYRE.txt +29 -0
  181. ultraplot/fonts/LICENSE_UBUNTU.txt +96 -0
  182. ultraplot/fonts/NotoSans-Bold.ttf +0 -0
  183. ultraplot/fonts/NotoSans-BoldItalic.ttf +0 -0
  184. ultraplot/fonts/NotoSans-Italic.ttf +0 -0
  185. ultraplot/fonts/NotoSans-Regular.ttf +0 -0
  186. ultraplot/fonts/NotoSerif-Bold.ttf +0 -0
  187. ultraplot/fonts/NotoSerif-BoldItalic.ttf +0 -0
  188. ultraplot/fonts/NotoSerif-Italic.ttf +0 -0
  189. ultraplot/fonts/NotoSerif-Regular.ttf +0 -0
  190. ultraplot/fonts/OpenSans-Bold.ttf +0 -0
  191. ultraplot/fonts/OpenSans-BoldItalic.ttf +0 -0
  192. ultraplot/fonts/OpenSans-Italic.ttf +0 -0
  193. ultraplot/fonts/OpenSans-Regular.ttf +0 -0
  194. ultraplot/fonts/OpenSans-Semibold.ttf +0 -0
  195. ultraplot/fonts/OpenSans-SemiboldItalic.ttf +0 -0
  196. ultraplot/fonts/Roboto-Black.ttf +0 -0
  197. ultraplot/fonts/Roboto-BlackItalic.ttf +0 -0
  198. ultraplot/fonts/Roboto-Bold.ttf +0 -0
  199. ultraplot/fonts/Roboto-BoldItalic.ttf +0 -0
  200. ultraplot/fonts/Roboto-Italic.ttf +0 -0
  201. ultraplot/fonts/Roboto-Light.ttf +0 -0
  202. ultraplot/fonts/Roboto-LightItalic.ttf +0 -0
  203. ultraplot/fonts/Roboto-Medium.ttf +0 -0
  204. ultraplot/fonts/Roboto-MediumItalic.ttf +0 -0
  205. ultraplot/fonts/Roboto-Regular.ttf +0 -0
  206. ultraplot/fonts/SourceSansPro-Black.ttf +0 -0
  207. ultraplot/fonts/SourceSansPro-BlackItalic.ttf +0 -0
  208. ultraplot/fonts/SourceSansPro-Bold.ttf +0 -0
  209. ultraplot/fonts/SourceSansPro-BoldItalic.ttf +0 -0
  210. ultraplot/fonts/SourceSansPro-ExtraLight.ttf +0 -0
  211. ultraplot/fonts/SourceSansPro-ExtraLightItalic.ttf +0 -0
  212. ultraplot/fonts/SourceSansPro-Italic.ttf +0 -0
  213. ultraplot/fonts/SourceSansPro-Light.ttf +0 -0
  214. ultraplot/fonts/SourceSansPro-LightItalic.ttf +0 -0
  215. ultraplot/fonts/SourceSansPro-Regular.ttf +0 -0
  216. ultraplot/fonts/SourceSansPro-SemiBold.ttf +0 -0
  217. ultraplot/fonts/SourceSansPro-SemiBoldItalic.ttf +0 -0
  218. ultraplot/fonts/SourceSerifPro-Black.ttf +0 -0
  219. ultraplot/fonts/SourceSerifPro-BlackItalic.ttf +0 -0
  220. ultraplot/fonts/SourceSerifPro-Bold.ttf +0 -0
  221. ultraplot/fonts/SourceSerifPro-BoldItalic.ttf +0 -0
  222. ultraplot/fonts/SourceSerifPro-ExtraLight.ttf +0 -0
  223. ultraplot/fonts/SourceSerifPro-ExtraLightItalic.ttf +0 -0
  224. ultraplot/fonts/SourceSerifPro-Italic.ttf +0 -0
  225. ultraplot/fonts/SourceSerifPro-Light.ttf +0 -0
  226. ultraplot/fonts/SourceSerifPro-LightItalic.ttf +0 -0
  227. ultraplot/fonts/SourceSerifPro-Regular.ttf +0 -0
  228. ultraplot/fonts/SourceSerifPro-SemiBold.ttf +0 -0
  229. ultraplot/fonts/SourceSerifPro-SemiBoldItalic.ttf +0 -0
  230. ultraplot/fonts/Ubuntu-Bold.ttf +0 -0
  231. ultraplot/fonts/Ubuntu-BoldItalic.ttf +0 -0
  232. ultraplot/fonts/Ubuntu-Italic.ttf +0 -0
  233. ultraplot/fonts/Ubuntu-Light.ttf +0 -0
  234. ultraplot/fonts/Ubuntu-LightItalic.ttf +0 -0
  235. ultraplot/fonts/Ubuntu-Medium.ttf +0 -0
  236. ultraplot/fonts/Ubuntu-MediumItalic.ttf +0 -0
  237. ultraplot/fonts/Ubuntu-Regular.ttf +0 -0
  238. ultraplot/fonts/texgyreadventor-bold.ttf +0 -0
  239. ultraplot/fonts/texgyreadventor-bolditalic.ttf +0 -0
  240. ultraplot/fonts/texgyreadventor-italic.ttf +0 -0
  241. ultraplot/fonts/texgyreadventor-regular.ttf +0 -0
  242. ultraplot/fonts/texgyrebonum-bold.ttf +0 -0
  243. ultraplot/fonts/texgyrebonum-bolditalic.ttf +0 -0
  244. ultraplot/fonts/texgyrebonum-italic.ttf +0 -0
  245. ultraplot/fonts/texgyrebonum-regular.ttf +0 -0
  246. ultraplot/fonts/texgyrechorus-mediumitalic.ttf +0 -0
  247. ultraplot/fonts/texgyrecursor-bold.ttf +0 -0
  248. ultraplot/fonts/texgyrecursor-bolditalic.ttf +0 -0
  249. ultraplot/fonts/texgyrecursor-italic.ttf +0 -0
  250. ultraplot/fonts/texgyrecursor-regular.ttf +0 -0
  251. ultraplot/fonts/texgyreheros-bold.ttf +0 -0
  252. ultraplot/fonts/texgyreheros-bolditalic.ttf +0 -0
  253. ultraplot/fonts/texgyreheros-italic.ttf +0 -0
  254. ultraplot/fonts/texgyreheros-regular.ttf +0 -0
  255. ultraplot/fonts/texgyrepagella-bold.ttf +0 -0
  256. ultraplot/fonts/texgyrepagella-bolditalic.ttf +0 -0
  257. ultraplot/fonts/texgyrepagella-italic.ttf +0 -0
  258. ultraplot/fonts/texgyrepagella-regular.ttf +0 -0
  259. ultraplot/fonts/texgyreschola-bold.ttf +0 -0
  260. ultraplot/fonts/texgyreschola-bolditalic.ttf +0 -0
  261. ultraplot/fonts/texgyreschola-italic.ttf +0 -0
  262. ultraplot/fonts/texgyreschola-regular.ttf +0 -0
  263. ultraplot/fonts/texgyretermes-bold.ttf +0 -0
  264. ultraplot/fonts/texgyretermes-bolditalic.ttf +0 -0
  265. ultraplot/fonts/texgyretermes-italic.ttf +0 -0
  266. ultraplot/fonts/texgyretermes-regular.ttf +0 -0
  267. ultraplot/gridspec.py +1698 -0
  268. ultraplot/internals/__init__.py +529 -0
  269. ultraplot/internals/benchmarks.py +26 -0
  270. ultraplot/internals/context.py +44 -0
  271. ultraplot/internals/docstring.py +139 -0
  272. ultraplot/internals/fonts.py +75 -0
  273. ultraplot/internals/guides.py +167 -0
  274. ultraplot/internals/inputs.py +862 -0
  275. ultraplot/internals/labels.py +85 -0
  276. ultraplot/internals/rcsetup.py +1933 -0
  277. ultraplot/internals/versions.py +61 -0
  278. ultraplot/internals/warnings.py +122 -0
  279. ultraplot/proj.py +325 -0
  280. ultraplot/scale.py +966 -0
  281. ultraplot/tests/__init__.py +28 -0
  282. ultraplot/tests/baseline/test_align_labels.png +0 -0
  283. ultraplot/tests/baseline/test_aligned_outer_guides.png +0 -0
  284. ultraplot/tests/baseline/test_aspect_ratios.png +0 -0
  285. ultraplot/tests/baseline/test_auto_diverging1.png +0 -0
  286. ultraplot/tests/baseline/test_auto_legend.png +0 -0
  287. ultraplot/tests/baseline/test_auto_reverse.png +0 -0
  288. ultraplot/tests/baseline/test_autodiverging3.png +0 -0
  289. ultraplot/tests/baseline/test_autodiverging4.png +0 -0
  290. ultraplot/tests/baseline/test_autodiverging5.png +0 -0
  291. ultraplot/tests/baseline/test_axes_colors.png +0 -0
  292. ultraplot/tests/baseline/test_bar_vectors.png +0 -0
  293. ultraplot/tests/baseline/test_bar_width.png +0 -0
  294. ultraplot/tests/baseline/test_both_ticklabels.png +0 -0
  295. ultraplot/tests/baseline/test_bounds_ticks.png +0 -0
  296. ultraplot/tests/baseline/test_boxplot_colors.png +0 -0
  297. ultraplot/tests/baseline/test_boxplot_vectors.png +0 -0
  298. ultraplot/tests/baseline/test_cartopy_contours.png +0 -0
  299. ultraplot/tests/baseline/test_cartopy_labels.png +0 -0
  300. ultraplot/tests/baseline/test_cartopy_manual.png +0 -0
  301. ultraplot/tests/baseline/test_centered_legends.png +0 -0
  302. ultraplot/tests/baseline/test_cmap_cycles.png +0 -0
  303. ultraplot/tests/baseline/test_colorbar.png +0 -0
  304. ultraplot/tests/baseline/test_colorbar_ticks.png +0 -0
  305. ultraplot/tests/baseline/test_colormap_mode.png +0 -0
  306. ultraplot/tests/baseline/test_column_iteration.png +0 -0
  307. ultraplot/tests/baseline/test_complex_ticks.png +0 -0
  308. ultraplot/tests/baseline/test_contour_labels.png +0 -0
  309. ultraplot/tests/baseline/test_contour_legend_with_label.png +0 -0
  310. ultraplot/tests/baseline/test_contour_legend_without_label.png +0 -0
  311. ultraplot/tests/baseline/test_contour_negative.png +0 -0
  312. ultraplot/tests/baseline/test_contour_single.png +0 -0
  313. ultraplot/tests/baseline/test_cutoff_ticks.png +0 -0
  314. ultraplot/tests/baseline/test_data_keyword.png +0 -0
  315. ultraplot/tests/baseline/test_discrete_ticks.png +0 -0
  316. ultraplot/tests/baseline/test_discrete_vs_fixed.png +0 -0
  317. ultraplot/tests/baseline/test_drawing_in_projection_with_globe.png +0 -0
  318. ultraplot/tests/baseline/test_drawing_in_projection_without_globe.png +0 -0
  319. ultraplot/tests/baseline/test_edge_fix.png +0 -0
  320. ultraplot/tests/baseline/test_flow_functions.png +0 -0
  321. ultraplot/tests/baseline/test_font_adjustments.png +0 -0
  322. ultraplot/tests/baseline/test_geographic_multiple_projections.png +0 -0
  323. ultraplot/tests/baseline/test_geographic_single_projection.png +0 -0
  324. ultraplot/tests/baseline/test_gray_adjustment.png +0 -0
  325. ultraplot/tests/baseline/test_histogram_legend.png +0 -0
  326. ultraplot/tests/baseline/test_histogram_types.png +0 -0
  327. ultraplot/tests/baseline/test_ignore_message.png +0 -0
  328. ultraplot/tests/baseline/test_inbounds_data.png +0 -0
  329. ultraplot/tests/baseline/test_init_format.png +0 -0
  330. ultraplot/tests/baseline/test_inner_title_zorder.png +0 -0
  331. ultraplot/tests/baseline/test_inset_basic.png +0 -0
  332. ultraplot/tests/baseline/test_inset_colorbars.png +0 -0
  333. ultraplot/tests/baseline/test_inset_colors_1.png +0 -0
  334. ultraplot/tests/baseline/test_inset_colors_2.png +0 -0
  335. ultraplot/tests/baseline/test_inset_zoom_update.png +0 -0
  336. ultraplot/tests/baseline/test_invalid_dist.png +0 -0
  337. ultraplot/tests/baseline/test_invalid_plot.png +0 -0
  338. ultraplot/tests/baseline/test_keep_guide_labels.png +0 -0
  339. ultraplot/tests/baseline/test_label_settings.png +0 -0
  340. ultraplot/tests/baseline/test_level_restriction.png +0 -0
  341. ultraplot/tests/baseline/test_levels_with_vmin_vmax.png +0 -0
  342. ultraplot/tests/baseline/test_locale_formatting.png +0 -0
  343. ultraplot/tests/baseline/test_locale_formatting_en_US.UTF-8.png +0 -0
  344. ultraplot/tests/baseline/test_manual_labels.png +0 -0
  345. ultraplot/tests/baseline/test_multi_formatting.png +0 -0
  346. ultraplot/tests/baseline/test_multiple_calls.png +0 -0
  347. ultraplot/tests/baseline/test_on_the_fly_mappable.png +0 -0
  348. ultraplot/tests/baseline/test_outer_align.png +0 -0
  349. ultraplot/tests/baseline/test_panel_dist.png +0 -0
  350. ultraplot/tests/baseline/test_panels_suplabels_three_hor_panels.png +0 -0
  351. ultraplot/tests/baseline/test_panels_with_sharing.png +0 -0
  352. ultraplot/tests/baseline/test_panels_without_sharing_1.png +0 -0
  353. ultraplot/tests/baseline/test_panels_without_sharing_2.png +0 -0
  354. ultraplot/tests/baseline/test_parametric_colors.png +0 -0
  355. ultraplot/tests/baseline/test_parametric_labels.png +0 -0
  356. ultraplot/tests/baseline/test_patch_format.png +0 -0
  357. ultraplot/tests/baseline/test_pie_charts.png +0 -0
  358. ultraplot/tests/baseline/test_pint_quantities.png +0 -0
  359. ultraplot/tests/baseline/test_polar_projections.png +0 -0
  360. ultraplot/tests/baseline/test_projection_dicts.png +0 -0
  361. ultraplot/tests/baseline/test_qualitative_colormaps_1.png +0 -0
  362. ultraplot/tests/baseline/test_qualitative_colormaps_2.png +0 -0
  363. ultraplot/tests/baseline/test_reversed_levels.png +0 -0
  364. ultraplot/tests/baseline/test_scatter_alpha.png +0 -0
  365. ultraplot/tests/baseline/test_scatter_args.png +0 -0
  366. ultraplot/tests/baseline/test_scatter_cycle.png +0 -0
  367. ultraplot/tests/baseline/test_scatter_inbounds.png +0 -0
  368. ultraplot/tests/baseline/test_scatter_sizes.png +0 -0
  369. ultraplot/tests/baseline/test_seaborn_heatmap.png +0 -0
  370. ultraplot/tests/baseline/test_seaborn_hist.png +0 -0
  371. ultraplot/tests/baseline/test_seaborn_relational.png +0 -0
  372. ultraplot/tests/baseline/test_seaborn_swarmplot.png +0 -0
  373. ultraplot/tests/baseline/test_segmented_norm.png +0 -0
  374. ultraplot/tests/baseline/test_segmented_norm_ticks.png +0 -0
  375. ultraplot/tests/baseline/test_share_all_basic.png +0 -0
  376. ultraplot/tests/baseline/test_singleton_legend.png +0 -0
  377. ultraplot/tests/baseline/test_span_labels.png +0 -0
  378. ultraplot/tests/baseline/test_spine_offset.png +0 -0
  379. ultraplot/tests/baseline/test_spine_side.png +0 -0
  380. ultraplot/tests/baseline/test_standardized_input.png +0 -0
  381. ultraplot/tests/baseline/test_statistical_boxplot.png +0 -0
  382. ultraplot/tests/baseline/test_three_axes.png +0 -0
  383. ultraplot/tests/baseline/test_tick_direction.png +0 -0
  384. ultraplot/tests/baseline/test_tick_labels.png +0 -0
  385. ultraplot/tests/baseline/test_tick_length.png +0 -0
  386. ultraplot/tests/baseline/test_tick_width.png +0 -0
  387. ultraplot/tests/baseline/test_title_deflection.png +0 -0
  388. ultraplot/tests/baseline/test_triangular_functions.png +0 -0
  389. ultraplot/tests/baseline/test_tuple_handles.png +0 -0
  390. ultraplot/tests/baseline/test_twin_axes_1.png +0 -0
  391. ultraplot/tests/baseline/test_twin_axes_2.png +0 -0
  392. ultraplot/tests/baseline/test_twin_axes_3.png +0 -0
  393. ultraplot/tests/baseline/test_uneven_levels.png +0 -0
  394. ultraplot/tests/test_1dplots.py +373 -0
  395. ultraplot/tests/test_2dplots.py +354 -0
  396. ultraplot/tests/test_axes.py +179 -0
  397. ultraplot/tests/test_colorbar.py +253 -0
  398. ultraplot/tests/test_docs.py +78 -0
  399. ultraplot/tests/test_format.py +340 -0
  400. ultraplot/tests/test_geographic.py +116 -0
  401. ultraplot/tests/test_imshow.py +110 -0
  402. ultraplot/tests/test_inset.py +28 -0
  403. ultraplot/tests/test_integration.py +149 -0
  404. ultraplot/tests/test_legend.py +181 -0
  405. ultraplot/tests/test_projections.py +138 -0
  406. ultraplot/tests/test_statistical_plotting.py +77 -0
  407. ultraplot/tests/test_subplots.py +174 -0
  408. ultraplot/ticker.py +879 -0
  409. ultraplot/ui.py +233 -0
  410. ultraplot/utils.py +912 -0
  411. ultraplot-0.99.3.dist-info/LICENSE.txt +427 -0
  412. ultraplot-0.99.3.dist-info/METADATA +88 -0
  413. ultraplot-0.99.3.dist-info/RECORD +416 -0
  414. ultraplot-0.99.3.dist-info/WHEEL +5 -0
  415. ultraplot-0.99.3.dist-info/entry_points.txt +2 -0
  416. ultraplot-0.99.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Test projection features.
4
+ """
5
+ import cartopy.crs as ccrs
6
+ import matplotlib.pyplot as plt
7
+ import numpy as np
8
+ import ultraplot as pplt
9
+ import pytest
10
+
11
+ state = np.random.RandomState(51423)
12
+
13
+
14
+ @pytest.mark.mpl_image_compare
15
+ def test_aspect_ratios():
16
+ """
17
+ Test aspect ratio adjustments.
18
+ """
19
+ fig, axs = pplt.subplots(ncols=2)
20
+ axs[0].format(aspect=1.5)
21
+ fig, axs = pplt.subplots(ncols=2, proj=("cart", "cyl"), aspect=2)
22
+ axs[0].set_aspect(1)
23
+ return fig
24
+
25
+
26
+ if pplt.internals._version_mpl <= "3.2":
27
+
28
+ @pytest.mark.mpl_image_compare
29
+ def test_basemap_labels():
30
+ """
31
+ Add basemap labels.
32
+ """
33
+ fig, axs = pplt.subplots(ncols=2, proj="robin", refwidth=3, basemap=True)
34
+ axs.format(coast=True, labels="rt")
35
+ return fig
36
+
37
+
38
+ @pytest.mark.mpl_image_compare
39
+ def test_cartopy_labels():
40
+ """
41
+ Add cartopy labels.
42
+ """
43
+ fig, axs = pplt.subplots(ncols=2, proj="robin", refwidth=3)
44
+ axs.format(coast=True, labels=True)
45
+ axs[0].format(inlinelabels=True)
46
+ axs[1].format(rotatelabels=True)
47
+ return fig
48
+
49
+
50
+ @pytest.mark.mpl_image_compare
51
+ def test_cartopy_contours():
52
+ """
53
+ Test bug with cartopy contours. Sometimes results in global coverage
54
+ with single color sometimes not.
55
+ """
56
+ N = 10
57
+ fig = plt.figure(figsize=(5, 2.5))
58
+ ax = fig.add_subplot(projection=ccrs.Mollweide())
59
+ ax.coastlines()
60
+ x = np.linspace(-180, 180, N)
61
+ y = np.linspace(-90, 90, N)
62
+ z = state.rand(N, N) * 10 - 5
63
+ m = ax.contourf(
64
+ x,
65
+ y,
66
+ z,
67
+ transform=ccrs.PlateCarree(),
68
+ cmap="RdBu_r",
69
+ vmin=-5,
70
+ vmax=5,
71
+ )
72
+ fig.colorbar(m, ax=ax)
73
+ fig = pplt.figure()
74
+ ax = fig.add_subplot(projection=pplt.Mollweide(), extent="auto")
75
+ ax.coastlines()
76
+ N = 10
77
+ m = ax.contourf(
78
+ np.linspace(0, 180, N),
79
+ np.linspace(0, 90, N)[1::2],
80
+ state.rand(N // 2, N) * 10 + 5,
81
+ cmap="BuRd",
82
+ transform=pplt.PlateCarree(),
83
+ edgefix=False,
84
+ )
85
+ fig.colorbar(m, ax=ax)
86
+ return fig
87
+
88
+
89
+ @pytest.mark.mpl_image_compare
90
+ def test_cartopy_manual():
91
+ """
92
+ Test alternative workflow without classes.
93
+ """
94
+ fig = pplt.figure()
95
+ proj = pplt.Proj("npstere")
96
+ # fig.add_axes([0.1, 0.1, 0.9, 0.9], proj='geo', map_projection=proj)
97
+ fig.add_subplot(111, proj="geo", land=True, map_projection=proj)
98
+ return fig
99
+
100
+
101
+ @pytest.mark.mpl_image_compare
102
+ def test_three_axes():
103
+ """
104
+ Test basic 3D axes here.
105
+ """
106
+ pplt.rc["tick.minor"] = False
107
+ fig, ax = pplt.subplots(proj="3d", outerpad=3)
108
+ return fig
109
+
110
+
111
+ @pytest.mark.mpl_image_compare
112
+ def test_projection_dicts():
113
+ """
114
+ Test projection dictionaries.
115
+ """
116
+ fig = pplt.figure(refnum=1)
117
+ a = [[1, 0], [1, 4], [2, 4], [2, 4], [3, 4], [3, 0]]
118
+ fig.subplots(a, proj={1: "cyl", 2: "cart", 3: "cart", 4: "cart"})
119
+ return fig
120
+
121
+
122
+ @pytest.mark.mpl_image_compare
123
+ def test_polar_projections():
124
+ """
125
+ Rigorously test polar features here.
126
+ """
127
+ fig, ax = pplt.subplots(proj="polar")
128
+ ax.format(
129
+ rlabelpos=45,
130
+ thetadir=-1,
131
+ thetalines=90,
132
+ thetalim=(0, 270),
133
+ theta0="N",
134
+ r0=0,
135
+ rlim=(0.5, 1),
136
+ rlines=0.25,
137
+ )
138
+ return fig
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env python3
2
+ # import ultraplot as pplt
3
+ import numpy as np, pandas as pd, ultraplot as pplt
4
+ import pytest
5
+
6
+
7
+ @pytest.mark.mpl_image_compare
8
+ def test_statistical_boxplot():
9
+ # Sample data
10
+ N = 500
11
+ state = np.random.RandomState(51423)
12
+ data1 = state.normal(size=(N, 5)) + 2 * (state.rand(N, 5) - 0.5) * np.arange(5)
13
+ data1 = pd.DataFrame(data1, columns=pd.Index(list("abcde"), name="label"))
14
+ data2 = state.rand(100, 7)
15
+ data2 = pd.DataFrame(data2, columns=pd.Index(list("abcdefg"), name="label"))
16
+
17
+ # Figure
18
+ fig, axs = pplt.subplots([[1, 1, 2, 2], [0, 3, 3, 0]], span=False)
19
+ axs.format(abc="A.", titleloc="l", grid=False, suptitle="Boxes and violins demo")
20
+
21
+ # Box plots
22
+ ax = axs[0]
23
+ obj1 = ax.box(data1, means=True, marker="x", meancolor="r", fillcolor="gray4")
24
+ ax.format(title="Box plots")
25
+
26
+ # Violin plots
27
+ ax = axs[1]
28
+ obj2 = ax.violin(data1, fillcolor="gray6", means=True, points=100)
29
+ ax.format(title="Violin plots")
30
+
31
+ # Boxes with different colors
32
+ ax = axs[2]
33
+ ax.boxh(data2, cycle="pastel2")
34
+ ax.format(title="Multiple colors", ymargin=0.15)
35
+ return fig
36
+
37
+
38
+ @pytest.mark.mpl_image_compare
39
+ def test_panel_dist():
40
+ # Sample data
41
+ N = 500
42
+ state = np.random.RandomState(51423)
43
+ x = state.normal(size=(N,))
44
+ y = state.normal(size=(N,))
45
+ bins = pplt.arange(-3, 3, 0.25)
46
+
47
+ # Histogram with marginal distributions
48
+ fig, axs = pplt.subplots(ncols=2, refwidth=2.3)
49
+ axs.format(
50
+ abc="A.",
51
+ abcloc="l",
52
+ titleabove=True,
53
+ ylabel="y axis",
54
+ suptitle="Histograms with marginal distributions",
55
+ )
56
+ colors = ("indigo9", "red9")
57
+ titles = ("Group 1", "Group 2")
58
+ for ax, which, color, title in zip(axs, "lr", colors, titles):
59
+ ax.hist2d(
60
+ x,
61
+ y,
62
+ bins,
63
+ vmin=0,
64
+ vmax=10,
65
+ levels=50,
66
+ cmap=color,
67
+ colorbar="b",
68
+ colorbar_kw={"label": "count"},
69
+ )
70
+ color = pplt.scale_luminance(color, 1.5) # histogram colors
71
+ px = ax.panel(which, space=0)
72
+ px.histh(y, bins, color=color, fill=True, ec="k")
73
+ px.format(grid=False, xlocator=[], xreverse=(which == "l"))
74
+ px = ax.panel("t", space=0)
75
+ px.hist(x, bins, color=color, fill=True, ec="k")
76
+ px.format(grid=False, ylocator=[], title=title, titleloc="l")
77
+ return fig
@@ -0,0 +1,174 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Test subplot layout.
4
+ """
5
+ import numpy as np, ultraplot as pplt, pytest
6
+
7
+
8
+ @pytest.mark.mpl_image_compare
9
+ def test_align_labels():
10
+ """
11
+ Test spanning and aligned labels.
12
+ """
13
+ fig, axs = pplt.subplots(
14
+ [[2, 1, 4], [2, 3, 5]], refnum=2, refwidth=1.5, align=1, span=0
15
+ )
16
+ fig.format(xlabel="xlabel", ylabel="ylabel", abc="A.", abcloc="ul")
17
+ axs[0].format(ylim=(10000, 20000))
18
+ axs[-1].panel_axes("bottom", share=False)
19
+ return fig
20
+
21
+
22
+ @pytest.mark.mpl_image_compare
23
+ def test_share_all_basic():
24
+ """
25
+ Test sharing level all.
26
+ """
27
+ # Simple example
28
+ N = 10
29
+ fig, axs = pplt.subplots(nrows=1, ncols=2, refwidth=1.5, share="all")
30
+ axs[0].plot(np.arange(N) * 1e2, np.arange(N) * 1e4)
31
+ # Complex example
32
+ fig, axs = pplt.subplots(nrows=2, ncols=2, refwidth=1.5, share="all")
33
+ axs[0].panel("b")
34
+ pax = axs[0].panel("r")
35
+ pax.format(ylabel="label")
36
+ axs[0].plot(np.arange(N) * 1e2, np.arange(N) * 1e4)
37
+ return fig
38
+
39
+
40
+ @pytest.mark.mpl_image_compare
41
+ def test_span_labels():
42
+ """
43
+ Rigorous tests of spanning and aligned labels feature.
44
+ """
45
+ fig, axs = pplt.subplots([[1, 2, 4], [1, 3, 5]], refwidth=1.5, share=0, span=1)
46
+ fig.format(xlabel="xlabel", ylabel="ylabel", abc="A.", abcloc="ul")
47
+ axs[1].format() # xlabel='xlabel')
48
+ axs[2].format()
49
+ return fig
50
+
51
+
52
+ @pytest.mark.mpl_image_compare
53
+ def test_title_deflection():
54
+ """
55
+ Test the deflection of titles above and below panels.
56
+ """
57
+ fig, ax = pplt.subplots()
58
+ # ax.format(abc='A.', title='Title', titleloc='left', titlepad=30)
59
+ tax = ax.panel_axes("top")
60
+ ax.format(titleabove=False) # redirects to bottom
61
+ ax.format(abc="A.", title="Title", titleloc="left", titlepad=50)
62
+ ax.format(xlabel="xlabel", ylabel="ylabel", ylabelpad=50)
63
+ tax.format(title="Fear Me", title_kw={"size": "x-large"})
64
+ tax.format(ultitle="Inner", titlebbox=True, title_kw={"size": "med-large"})
65
+ return fig
66
+
67
+
68
+ @pytest.mark.mpl_image_compare
69
+ def test_complex_ticks():
70
+ """
71
+ Normally title offset with these different tick arrangements is tricky
72
+ but `_update_title_position` accounts for edge cases.
73
+ """
74
+ fig, axs = pplt.subplots(ncols=2)
75
+ axs[0].format(
76
+ xtickloc="both",
77
+ xticklabelloc="top",
78
+ xlabelloc="top",
79
+ title="title",
80
+ xlabel="xlabel",
81
+ suptitle="Test",
82
+ )
83
+ axs[1].format(
84
+ xtickloc="both",
85
+ xticklabelloc="top",
86
+ # xlabelloc='top',
87
+ xlabel="xlabel",
88
+ title="title",
89
+ suptitle="Test",
90
+ )
91
+ return fig
92
+
93
+
94
+ @pytest.mark.mpl_image_compare
95
+ def test_both_ticklabels():
96
+ """
97
+ Test both tick labels.
98
+ """
99
+ fig, ax = pplt.subplots() # when both, have weird bug
100
+ ax.format(xticklabelloc="both", title="title", suptitle="Test")
101
+ fig, ax = pplt.subplots() # when *just top*, bug disappears
102
+ ax.format(xtickloc="top", xticklabelloc="top", title="title", suptitle="Test")
103
+ fig, ax = pplt.subplots() # not sure here
104
+ ax.format(xtickloc="both", xticklabelloc="neither", suptitle="Test")
105
+ fig, ax = pplt.subplots() # doesn't seem to change the title offset though
106
+ ax.format(xtickloc="top", xticklabelloc="neither", suptitle="Test")
107
+ return fig
108
+
109
+
110
+ def test_gridspec_copies():
111
+ """
112
+ Test whether gridspec copies work.
113
+ """
114
+ fig1, ax = pplt.subplots(ncols=2)
115
+ gs = fig1.gridspec.copy(left=5, wspace=0, right=5)
116
+ return fig1
117
+ fig2 = pplt.figure()
118
+ fig2.add_subplots(gs)
119
+ fig = pplt.figure()
120
+ with pytest.raises(ValueError):
121
+ fig.add_subplots(gs) # should raise error
122
+
123
+
124
+ @pytest.mark.mpl_image_compare
125
+ def test_aligned_outer_guides():
126
+ """
127
+ Test alignment adjustment.
128
+ """
129
+ fig, ax = pplt.subplot()
130
+ h1 = ax.plot(np.arange(5), label="foo")
131
+ h2 = ax.plot(np.arange(5) + 1, label="bar")
132
+ h3 = ax.plot(np.arange(5) + 2, label="baz")
133
+ ax.legend(h1, loc="bottom", align="left")
134
+ ax.legend(h2, loc="bottom", align="right")
135
+ ax.legend(h3, loc="b", align="c")
136
+ ax.colorbar("magma", loc="right", align="top", shrink=0.4) # same as length
137
+ ax.colorbar("magma", loc="right", align="bottom", shrink=0.4)
138
+ ax.colorbar("magma", loc="left", align="top", length=0.6) # should offset
139
+ ax.colorbar("magma", loc="left", align="bottom", length=0.6)
140
+ ax.legend(h1, loc="top", align="right", pad="4pt", frame=False)
141
+ ax.format(title="Very long title", titlepad=6, titleloc="left")
142
+ return fig
143
+
144
+
145
+ def test_reference_aspect():
146
+ """
147
+ Rigorous test of reference aspect ratio accuracy.
148
+ """
149
+ # A simple test
150
+ refwidth = 1.5
151
+ fig, axs = pplt.subplots(ncols=2, refwidth=refwidth)
152
+ fig.auto_layout()
153
+
154
+ assert np.isclose(refwidth, axs[fig._refnum - 1]._get_size_inches()[0])
155
+
156
+ # A test with funky layout
157
+ refwidth = 1.5
158
+ fig, axs = pplt.subplots([[1, 1, 2, 2], [0, 3, 3, 0]], ref=3, refwidth=refwidth)
159
+ axs[1].panel_axes("left")
160
+ axs.format(xlocator=0.2, ylocator=0.2)
161
+ fig.auto_layout()
162
+ assert np.isclose(refwidth, axs[fig._refnum - 1]._get_size_inches()[0])
163
+
164
+ # A test with panels
165
+ refwidth = 2.0
166
+ fig, axs = pplt.subplots(
167
+ [[1, 1, 2], [3, 4, 5], [3, 4, 6]], hratios=(2, 1, 1), refwidth=refwidth
168
+ )
169
+ axs[2].panel_axes("right", width=0.5)
170
+ axs[0].panel_axes("bottom", width=0.5)
171
+ axs[3].panel_axes("left", width=0.5)
172
+ fig.auto_layout()
173
+ assert np.isclose(refwidth, axs[fig._refnum - 1]._get_size_inches()[0])
174
+ return fig