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,373 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Test 1D plotting overrides.
4
+ """
5
+ import numpy as np
6
+ import numpy.ma as ma
7
+ import pandas as pd
8
+
9
+ import ultraplot as pplt
10
+ import pytest
11
+
12
+ state = np.random.RandomState(51423)
13
+
14
+
15
+ @pytest.mark.mpl_image_compare
16
+ def test_auto_reverse():
17
+ """
18
+ Test enabled and disabled auto reverse.
19
+ """
20
+ x = np.arange(10)[::-1]
21
+ y = np.arange(10)
22
+ z = state.rand(10, 10)
23
+ fig, axs = pplt.subplots(ncols=2, nrows=3, share=0)
24
+ # axs[0].format(xreverse=False) # should fail
25
+ axs[0].plot(x, y)
26
+ axs[1].format(xlim=(0, 9)) # manual override
27
+ axs[1].plot(x, y)
28
+ axs[2].plotx(x, y)
29
+ axs[3].format(ylim=(0, 9)) # manual override
30
+ axs[3].plotx(x, y)
31
+ axs[4].pcolor(x, y[::-1], z)
32
+ axs[5].format(xlim=(0, 9), ylim=(0, 9)) # manual override!
33
+ axs[5].pcolor(x, y[::-1], z)
34
+ fig.format(suptitle="Auto-reverse test", collabels=["reverse", "fixed"])
35
+ return fig
36
+
37
+
38
+ @pytest.mark.mpl_image_compare
39
+ def test_cmap_cycles():
40
+ """
41
+ Test sampling of multiple continuous colormaps.
42
+ """
43
+ cycle = pplt.Cycle(
44
+ "Boreal",
45
+ "Grays",
46
+ "Fire",
47
+ "Glacial",
48
+ "yellow",
49
+ left=[0.4] * 5,
50
+ right=[0.6] * 5,
51
+ samples=[3, 4, 5, 2, 1],
52
+ )
53
+ fig, ax = pplt.subplots()
54
+ data = state.rand(10, len(cycle)).cumsum(axis=1)
55
+ data = pd.DataFrame(data, columns=list("abcdefghijklmno"))
56
+ ax.plot(data, cycle=cycle, linewidth=2, legend="b")
57
+ return fig
58
+
59
+
60
+ @pytest.mark.mpl_image_compare
61
+ def test_column_iteration():
62
+ """
63
+ Test scatter column iteration.
64
+ """
65
+ fig, axs = pplt.subplots(ncols=2)
66
+ axs[0].plot(state.rand(5, 5), state.rand(5, 5), lw=5)
67
+ axs[1].scatter(
68
+ state.rand(5, 5), state.rand(5, 5), state.rand(5, 5), state.rand(5, 5)
69
+ )
70
+ return fig
71
+
72
+
73
+ @pytest.mark.skip("TODO")
74
+ @pytest.mark.mpl_image_compare
75
+ def test_bar_stack():
76
+ """
77
+ Test bar and area stacking.
78
+ """
79
+ # TODO: Add test here
80
+
81
+
82
+ @pytest.mark.mpl_image_compare
83
+ def test_bar_width():
84
+ """
85
+ Test relative and absolute widths.
86
+ """
87
+ fig, axs = pplt.subplots(ncols=3)
88
+ x = np.arange(10)
89
+ y = state.rand(10, 2)
90
+ for i, ax in enumerate(axs):
91
+ ax.bar(x * (2 * i + 1), y, width=0.8, absolute_width=i == 1)
92
+ return fig
93
+
94
+
95
+ @pytest.mark.mpl_image_compare
96
+ def test_bar_vectors():
97
+ """
98
+ Test vector arguments to bar plots.
99
+ """
100
+ facecolors = np.repeat(0.1, 3) * np.arange(1, 11)[:, None]
101
+ fig, ax = pplt.subplots()
102
+ ax.bar(
103
+ np.arange(10),
104
+ np.arange(1, 11),
105
+ linewidth=3,
106
+ edgecolor=[f"gray{i}" for i in range(9, -1, -1)],
107
+ alpha=np.linspace(0.1, 1, 10),
108
+ hatch=[None, "//"] * 5,
109
+ )
110
+ return fig
111
+
112
+
113
+ @pytest.mark.mpl_image_compare
114
+ def test_boxplot_colors():
115
+ """
116
+ Test box colors and cycle colors.
117
+ """
118
+ fig = pplt.figure(share=False)
119
+ ax = fig.subplot(221)
120
+ box_data = state.uniform(-3, 3, size=(1000, 5))
121
+ violin_data = state.normal(0, 1, size=(1000, 5))
122
+ ax.box(box_data, fillcolor=["red", "blue", "green", "orange", "yellow"])
123
+ ax = fig.subplot(222)
124
+ ax.violin(
125
+ violin_data,
126
+ fillcolor=["gray1", "gray7"],
127
+ hatches=[None, "//", None, None, "//"],
128
+ means=True,
129
+ barstds=2,
130
+ ) # noqa: E501
131
+ ax = fig.subplot(223)
132
+ ax.boxh(box_data, cycle="pastel2")
133
+ ax = fig.subplot(224)
134
+ ax.violinh(violin_data, cycle="pastel1")
135
+ return fig
136
+
137
+
138
+ @pytest.mark.mpl_image_compare
139
+ def test_boxplot_vectors():
140
+ """
141
+ Test vector property arguments.
142
+ """
143
+ coords = (0.5, 1, 2)
144
+ counts = (10, 20, 100)
145
+ labels = ["foo", "bar", "baz"]
146
+ datas = []
147
+ for count in counts:
148
+ data = state.rand(count)
149
+ datas.append(data)
150
+ datas = np.array(datas, dtype=object)
151
+ assert len(datas) == len(coords)
152
+ fig, ax = pplt.subplot(refwidth=3)
153
+ ax.boxplot(
154
+ coords,
155
+ datas,
156
+ lw=2,
157
+ notch=False,
158
+ whis=(10, 90),
159
+ cycle="538",
160
+ fillalpha=[0.5, 0.5, 1],
161
+ hatch=[None, "//", "**"],
162
+ boxlw=[2, 1, 1],
163
+ )
164
+ ax.format(xticklabels=labels)
165
+ return fig
166
+
167
+
168
+ @pytest.mark.mpl_image_compare
169
+ def test_histogram_types():
170
+ """
171
+ Test the different histogram types using basic keywords.
172
+ """
173
+ fig, axs = pplt.subplots(ncols=2, nrows=2, share=False)
174
+ data = state.normal(size=(100, 5))
175
+ data += np.arange(5)
176
+ kws = ({"stack": 0}, {"stack": 1}, {"fill": 0}, {"fill": 1, "alpha": 0.5})
177
+ for ax, kw in zip(axs, kws):
178
+ ax.hist(data, ec="k", **kw)
179
+ return fig
180
+
181
+
182
+ @pytest.mark.mpl_image_compare
183
+ def test_invalid_plot():
184
+ """
185
+ Test lines with missing or invalid values.
186
+ """
187
+ fig, axs = pplt.subplots(ncols=2)
188
+ data = state.normal(size=(100, 5))
189
+ for j in range(5):
190
+ data[:, j] = np.sort(data[:, j])
191
+ data[: 19 * (j + 1), j] = np.nan
192
+ # data[:20, :] = np.nan
193
+ data_masked = ma.masked_invalid(data) # should be same result
194
+ for ax, dat in zip(axs, (data, data_masked)):
195
+ ax.plot(dat, means=True, shade=True)
196
+ return fig
197
+
198
+
199
+ @pytest.mark.mpl_image_compare
200
+ def test_invalid_dist():
201
+ """
202
+ Test distributions with missing or invalid data.
203
+ """
204
+ fig, axs = pplt.subplots(ncols=2, nrows=2)
205
+ data = state.normal(size=(100, 5))
206
+ for i in range(5): # test uneven numbers of invalid values
207
+ data[: 10 * (i + 1), :] = np.nan
208
+ data_masked = ma.masked_invalid(data) # should be same result
209
+ for ax, dat in zip(axs[:2], (data, data_masked)):
210
+ ax.violin(dat, means=True)
211
+ for ax, dat in zip(axs[2:], (data, data_masked)):
212
+ ax.box(dat, fill=True, means=True)
213
+ return fig
214
+
215
+
216
+ @pytest.mark.mpl_image_compare
217
+ def test_pie_charts():
218
+ """
219
+ Test basic pie plots. No examples in user guide right now.
220
+ """
221
+ pplt.rc.inlinefmt = "svg"
222
+ labels = ["foo", "bar", "baz", "biff", "buzz"]
223
+ array = np.arange(1, 6)
224
+ data = pd.Series(array, index=labels)
225
+ fig = pplt.figure()
226
+ ax = fig.subplot(121)
227
+ ax.pie(array, edgefix=True, labels=labels, ec="k", cycle="reds")
228
+ ax = fig.subplot(122)
229
+ ax.pie(data, ec="k", cycle="blues")
230
+ return fig
231
+
232
+
233
+ @pytest.mark.mpl_image_compare
234
+ def test_parametric_labels():
235
+ """
236
+ Test passing strings as parametric 'color values'. This is likely
237
+ a common use case.
238
+ """
239
+ pplt.rc.inlinefmt = "svg"
240
+ fig, ax = pplt.subplots()
241
+ ax.parametric(
242
+ state.rand(5), c=list("abcde"), lw=20, colorbar="b", cmap_kw={"left": 0.2}
243
+ )
244
+ return fig
245
+
246
+
247
+ @pytest.mark.mpl_image_compare
248
+ def test_parametric_colors():
249
+ """
250
+ Test color input arguments. Should be able to make monochromatic
251
+ plots for case where we want `line` without sticky x/y edges.
252
+ """
253
+ fig, axs = pplt.subplots(ncols=2, nrows=2)
254
+ colors = (
255
+ [(0, 1, 1), (0, 1, 0), (1, 0, 0), (0, 0, 1), (1, 1, 0)],
256
+ ["b", "r", "g", "m", "c", "y"],
257
+ "black",
258
+ (0.5, 0.5, 0.5),
259
+ )
260
+ for ax, color in zip(axs, colors):
261
+ ax.parametric(
262
+ state.rand(5),
263
+ state.rand(5),
264
+ linewidth=2,
265
+ label="label",
266
+ color=color,
267
+ colorbar="b",
268
+ legend="b",
269
+ )
270
+ return fig
271
+
272
+
273
+ @pytest.mark.mpl_image_compare
274
+ def test_scatter_args():
275
+ """
276
+ Test diverse scatter keyword parsing and RGB scaling.
277
+ """
278
+ x, y = state.randn(50), state.randn(50)
279
+ data = state.rand(50, 3)
280
+ fig, axs = pplt.subplots(ncols=4, share=0)
281
+ ax = axs[0]
282
+ ax.scatter(x, y, s=80, fc="none", edgecolors="r")
283
+ ax = axs[1]
284
+ ax.scatter(data, c=data, cmap="reds") # column iteration
285
+ ax = axs[2]
286
+ with pytest.warns(pplt.internals.UltraplotWarning) as record:
287
+ ax.scatter(data[:, 0], c=data, cmap="reds") # actual colors
288
+ assert len(record) == 1
289
+ ax = axs[3]
290
+ ax.scatter(data, mean=True, shadestd=1, barstd=0.5) # distribution
291
+ ax.format(xlim=(-0.1, 2.1))
292
+ return fig
293
+
294
+
295
+ @pytest.mark.mpl_image_compare
296
+ def test_scatter_inbounds():
297
+ """
298
+ Test in-bounds scatter plots.
299
+ """
300
+ fig, axs = pplt.subplots(ncols=2, share=False)
301
+ N = 100
302
+ fig.format(xlim=(0, 20))
303
+ for i, ax in enumerate(axs):
304
+ c = ax.scatter(np.arange(N), np.arange(N), c=np.arange(N), inbounds=bool(i))
305
+ ax.colorbar(c, loc="b")
306
+ return fig
307
+
308
+
309
+ @pytest.mark.mpl_image_compare
310
+ def test_scatter_alpha():
311
+ """
312
+ Test behavior with multiple alpha values.
313
+ """
314
+ fig, ax = pplt.subplots()
315
+ data = state.rand(10)
316
+ alpha = np.linspace(0.1, 1, data.size)
317
+ ax.scatter(data, alpha=alpha)
318
+ ax.scatter(data + 1, c=np.arange(data.size), cmap="BuRd", alpha=alpha)
319
+ ax.scatter(data + 2, color="k", alpha=alpha)
320
+ ax.scatter(data + 3, color=[f"red{i}" for i in range(data.size)], alpha=alpha)
321
+ return fig
322
+
323
+
324
+ @pytest.mark.mpl_image_compare
325
+ def test_scatter_cycle():
326
+ """
327
+ Test scatter property cycling.
328
+ """
329
+ fig, ax = pplt.subplots()
330
+ cycle = pplt.Cycle(
331
+ "538", marker=["X", "o", "s", "d"], sizes=[20, 100], edgecolors=["r", "k"]
332
+ )
333
+ ax.scatter(
334
+ state.rand(10, 4),
335
+ state.rand(10, 4),
336
+ cycle=cycle,
337
+ area_size=False,
338
+ )
339
+ return fig
340
+
341
+
342
+ @pytest.mark.mpl_image_compare
343
+ def test_scatter_sizes():
344
+ """
345
+ Test marker size scaling.
346
+ """
347
+ # Compare setting size to input size
348
+ size = 20
349
+ with pplt.rc.context({"lines.markersize": size}):
350
+ fig = pplt.figure()
351
+ ax = fig.subplot(121, margin=0.15)
352
+ for i in range(3):
353
+ kw = {"absolute_size": i == 2}
354
+ if i == 1:
355
+ kw["smin"] = 0
356
+ kw["smax"] = size**2 # should be same as relying on lines.markersize
357
+ ax.scatter(np.arange(5), [0.25 * (1 + i)] * 5, size**2, **kw)
358
+ # Test various size arguments
359
+ ax = fig.subplot(122, margin=0.15)
360
+ data = state.rand(5) * 500
361
+ ax.scatter(
362
+ np.arange(5),
363
+ [0.25] * 5,
364
+ c="blue7",
365
+ sizes=[5, 10, 15, 20, 25],
366
+ area_size=False,
367
+ absolute_size=True,
368
+ )
369
+ ax.scatter(np.arange(5), [0.50] * 5, c="red7", sizes=data, absolute_size=True)
370
+ ax.scatter(np.arange(5), [0.75] * 5, c="red7", sizes=data, absolute_size=False)
371
+ for i, d in enumerate(data):
372
+ ax.text(i, 0.5, format(d, ".0f"), va="center", ha="center")
373
+ return fig