plotcli-py 0.1.0__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 (143) hide show
  1. CLAUDE.md +51 -0
  2. LICENSE +21 -0
  3. PKG-INFO +358 -0
  4. README.md +340 -0
  5. main.py +6 -0
  6. plotcli-original/.Rbuildignore +18 -0
  7. plotcli-original/.github/workflows/deploy_docs.yml +43 -0
  8. plotcli-original/.gitignore +46 -0
  9. plotcli-original/DESCRIPTION +25 -0
  10. plotcli-original/NAMESPACE +60 -0
  11. plotcli-original/NEWS.md +112 -0
  12. plotcli-original/R/ascii_escape.r +13 -0
  13. plotcli-original/R/canvas.r +586 -0
  14. plotcli-original/R/class_functions.r +114 -0
  15. plotcli-original/R/geom_registry.r +1376 -0
  16. plotcli-original/R/ggplotcli.r +234 -0
  17. plotcli-original/R/ggplotcli_helpers.r +1099 -0
  18. plotcli-original/R/helper_functions.r +351 -0
  19. plotcli-original/R/plotcli.r +963 -0
  20. plotcli-original/R/plotcli_grid.r +1 -0
  21. plotcli-original/R/plotcli_wrappers.r +416 -0
  22. plotcli-original/R/zzz.r +15 -0
  23. plotcli-original/README.md +192 -0
  24. plotcli-original/docs/ascii.png +0 -0
  25. plotcli-original/docs/bar.png +0 -0
  26. plotcli-original/docs/block.png +0 -0
  27. plotcli-original/docs/boxplot.png +0 -0
  28. plotcli-original/docs/density.png +0 -0
  29. plotcli-original/docs/facet.png +0 -0
  30. plotcli-original/docs/facet_grid.png +0 -0
  31. plotcli-original/docs/generate_png.sh +137 -0
  32. plotcli-original/docs/heatmap.png +0 -0
  33. plotcli-original/docs/histogram.png +0 -0
  34. plotcli-original/docs/line.png +0 -0
  35. plotcli-original/docs/noborder.png +0 -0
  36. plotcli-original/docs/scatter.png +0 -0
  37. plotcli-original/docs/showcase.R +182 -0
  38. plotcli-original/inst/doc/ggplotcli.R +231 -0
  39. plotcli-original/inst/doc/ggplotcli.Rmd +329 -0
  40. plotcli-original/inst/doc/ggplotcli.html +1078 -0
  41. plotcli-original/inst/doc/plotcli_class.R +98 -0
  42. plotcli-original/inst/doc/plotcli_class.Rmd +121 -0
  43. plotcli-original/inst/doc/plotcli_class.html +564 -0
  44. plotcli-original/inst/doc/plotcli_wrappers.R +35 -0
  45. plotcli-original/inst/doc/plotcli_wrappers.Rmd +62 -0
  46. plotcli-original/inst/doc/plotcli_wrappers.html +546 -0
  47. plotcli-original/man/AsciiCanvas.Rd +116 -0
  48. plotcli-original/man/BlockCanvas.Rd +132 -0
  49. plotcli-original/man/BrailleCanvas.Rd +146 -0
  50. plotcli-original/man/Canvas.Rd +492 -0
  51. plotcli-original/man/GeomRegistry.Rd +9 -0
  52. plotcli-original/man/add_legend_to_output.Rd +12 -0
  53. plotcli-original/man/braille_dot_bit.Rd +29 -0
  54. plotcli-original/man/braille_set_dot.Rd +21 -0
  55. plotcli-original/man/bresenham.Rd +27 -0
  56. plotcli-original/man/build_plot_output.Rd +28 -0
  57. plotcli-original/man/build_plot_output_v2.Rd +41 -0
  58. plotcli-original/man/cat_plot_matrix.Rd +17 -0
  59. plotcli-original/man/cbind.plotcli.Rd +19 -0
  60. plotcli-original/man/cbind_plots.Rd +17 -0
  61. plotcli-original/man/color_to_term.Rd +18 -0
  62. plotcli-original/man/create_canvas.Rd +21 -0
  63. plotcli-original/man/create_panel_scales.Rd +29 -0
  64. plotcli-original/man/create_scales.Rd +27 -0
  65. plotcli-original/man/dot-geom_registry.Rd +16 -0
  66. plotcli-original/man/draw_border.Rd +12 -0
  67. plotcli-original/man/draw_grid.Rd +12 -0
  68. plotcli-original/man/extract_legend_info.Rd +12 -0
  69. plotcli-original/man/extract_plot_labels.Rd +12 -0
  70. plotcli-original/man/extract_plot_style.Rd +12 -0
  71. plotcli-original/man/format_axis_label.Rd +18 -0
  72. plotcli-original/man/format_four_chars.Rd +21 -0
  73. plotcli-original/man/geom_area_handler.Rd +12 -0
  74. plotcli-original/man/geom_bar_handler.Rd +12 -0
  75. plotcli-original/man/geom_boxplot_handler.Rd +13 -0
  76. plotcli-original/man/geom_density_handler.Rd +12 -0
  77. plotcli-original/man/geom_histogram_handler.Rd +12 -0
  78. plotcli-original/man/geom_hline_handler.Rd +12 -0
  79. plotcli-original/man/geom_line_handler.Rd +12 -0
  80. plotcli-original/man/geom_path_handler.Rd +12 -0
  81. plotcli-original/man/geom_point_handler.Rd +12 -0
  82. plotcli-original/man/geom_rect_handler.Rd +12 -0
  83. plotcli-original/man/geom_segment_handler.Rd +12 -0
  84. plotcli-original/man/geom_smooth_handler.Rd +12 -0
  85. plotcli-original/man/geom_text_handler.Rd +12 -0
  86. plotcli-original/man/geom_vline_handler.Rd +12 -0
  87. plotcli-original/man/get_color_hue.Rd +18 -0
  88. plotcli-original/man/get_data_subset.Rd +23 -0
  89. plotcli-original/man/get_facet_info.Rd +18 -0
  90. plotcli-original/man/get_geom_handler.Rd +17 -0
  91. plotcli-original/man/get_term_colors.Rd +21 -0
  92. plotcli-original/man/ggplotcli.Rd +83 -0
  93. plotcli-original/man/init_color_mapping.Rd +15 -0
  94. plotcli-original/man/is_braille.Rd +20 -0
  95. plotcli-original/man/is_geom_registered.Rd +17 -0
  96. plotcli-original/man/list_registered_geoms.Rd +14 -0
  97. plotcli-original/man/make_colored.Rd +23 -0
  98. plotcli-original/man/make_unique_names.Rd +20 -0
  99. plotcli-original/man/normalize_data.Rd +27 -0
  100. plotcli-original/man/pclib.Rd +48 -0
  101. plotcli-original/man/pclibx.Rd +46 -0
  102. plotcli-original/man/pclid.Rd +44 -0
  103. plotcli-original/man/pclih.Rd +50 -0
  104. plotcli-original/man/pclil.Rd +48 -0
  105. plotcli-original/man/pclis.Rd +48 -0
  106. plotcli-original/man/pixel_to_braille.Rd +23 -0
  107. plotcli-original/man/plotcli.Rd +598 -0
  108. plotcli-original/man/plotcli_bar.Rd +48 -0
  109. plotcli-original/man/plotcli_box.Rd +46 -0
  110. plotcli-original/man/plotcli_density.Rd +44 -0
  111. plotcli-original/man/plotcli_histogram.Rd +50 -0
  112. plotcli-original/man/plotcli_line.Rd +48 -0
  113. plotcli-original/man/plotcli_options.Rd +18 -0
  114. plotcli-original/man/plotcli_scatter.Rd +48 -0
  115. plotcli-original/man/plus-.plotcli.Rd +19 -0
  116. plotcli-original/man/rbind.plotcli.Rd +19 -0
  117. plotcli-original/man/rbind_plots.Rd +17 -0
  118. plotcli-original/man/register_geom.Rd +21 -0
  119. plotcli-original/man/remove_color_codes.Rd +21 -0
  120. plotcli-original/man/render_faceted_plot.Rd +25 -0
  121. plotcli-original/man/render_single_panel.Rd +12 -0
  122. plotcli-original/man/safe_aes_name.Rd +18 -0
  123. plotcli-original/tests/testthat/test-new-geoms.R +136 -0
  124. plotcli-original/tests/testthat/test-plotcli.R +69 -0
  125. plotcli-original/tests/testthat.R +4 -0
  126. plotcli-original/vignettes/ggplotcli.Rmd +329 -0
  127. plotcli-original/vignettes/plotcli_class.R +98 -0
  128. plotcli-original/vignettes/plotcli_class.Rmd +121 -0
  129. plotcli-original/vignettes/plotcli_wrappers.R +35 -0
  130. plotcli-original/vignettes/plotcli_wrappers.Rmd +62 -0
  131. plotcli.egg-info/PKG-INFO +11 -0
  132. plotcli.egg-info/SOURCES.txt +7 -0
  133. plotcli.egg-info/dependency_links.txt +1 -0
  134. plotcli.egg-info/entry_points.txt +3 -0
  135. plotcli.egg-info/top_level.txt +1 -0
  136. plotcli.py +978 -0
  137. plotcli_py-0.1.0.dist-info/METADATA +358 -0
  138. plotcli_py-0.1.0.dist-info/RECORD +143 -0
  139. plotcli_py-0.1.0.dist-info/WHEEL +4 -0
  140. plotcli_py-0.1.0.dist-info/entry_points.txt +2 -0
  141. plotcli_py-0.1.0.dist-info/licenses/LICENSE +21 -0
  142. pyproject.toml +31 -0
  143. uv.lock +8 -0
@@ -0,0 +1,358 @@
1
+ Metadata-Version: 2.4
2
+ Name: plotcli-py
3
+ Version: 0.1.0
4
+ Summary: Terminal plotting using Unicode Braille/Block/ASCII. Zero dependencies. Pipe data, plot math functions, read CSV -- all from the CLI.
5
+ Project-URL: Homepage, https://github.com/wowave/plotcli-py
6
+ Project-URL: Repository, https://github.com/wowave/plotcli-py
7
+ License-Expression: MIT
8
+ License-File: LICENSE
9
+ Keywords: braille,chart,cli,graph,plot,terminal,unicode,visualization
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Topic :: Scientific/Engineering :: Visualization
16
+ Requires-Python: >=3.8
17
+ Description-Content-Type: text/markdown
18
+
19
+ # plotcli
20
+
21
+ Terminal plotting in Python using Unicode Braille characters, block elements, or ASCII. Zero dependencies. Designed for CLI workflows and AI coding assistants like Claude Code.
22
+
23
+ Inspired by the R [plotcli](https://github.com/cheuerde/plotcli) package and Julia's [UnicodePlots.jl](https://github.com/JuliaPlots/UnicodePlots.jl).
24
+
25
+ ## Install
26
+
27
+ ```bash
28
+ # With uv (recommended)
29
+ uv tool install plotcli
30
+
31
+ # With pip
32
+ pip install plotcli
33
+
34
+ # Or run directly without installing
35
+ uvx plotcli fn "sin(x)" 0 6.28
36
+ ```
37
+
38
+ ## Quick Start
39
+
40
+ ```bash
41
+ # Pipe data
42
+ echo "1 4 9 16 25 36 49 64 81 100" | plotcli line
43
+
44
+ # Plot a math function
45
+ plotcli fn "sin(x)" 0 6.28
46
+
47
+ # From a Python expression
48
+ plotcli scatter -e "[(x, x**2) for x in range(50)]"
49
+
50
+ # From a CSV file
51
+ plotcli line -f data.csv -x time -y value
52
+
53
+ # Pipe from other commands
54
+ seq 100 | awk '{print sin($1/10)}' | plotcli line
55
+ ```
56
+
57
+ ## Examples
58
+
59
+ ### Line Plot
60
+
61
+ ```bash
62
+ echo "1 4 9 16 25 36 49 64 81 100" | plotcli line --title "Squares"
63
+ ```
64
+ ```
65
+ Squares
66
+ ┌───────────────────────────────────────────────────────┐
67
+ 100 ┤ ⢀⠤⠊│
68
+ │ ⡠⠒⠁ │
69
+ 80.2 ┤ ⡠⠔⠉ │
70
+ │ ⡠⠔⠉ │
71
+ 60.4 ┤ ⢀⡠⠔⠉ │
72
+ │ ⣀⠤⠒⠁ │
73
+ y │ ⢀⡠⠔⠊ │
74
+ 40.6 ┤ ⣀⠤⠔⠊⠁ │
75
+ │ ⣀⠤⠒⠉ │
76
+ 20.8 ┤ ⣀⡠⠤⠒⠊⠉ │
77
+ │ ⢀⣀⡠⠤⠔⠒⠊⠉ │
78
+ 1 ┤⣀⣀⣀⡠⠤⠤⠤⠔⠒⠊⠉⠁ │
79
+ └───────────────────────────────────────────────────────┘
80
+ 0 2.25 4.5 6.75 9
81
+ x
82
+ ```
83
+
84
+ ### Math Functions
85
+
86
+ ```bash
87
+ plotcli fn "sin(x)" 0 6.28 --title "Sine Wave"
88
+ ```
89
+ ```
90
+ Sine Wave
91
+ ┌───────────────────────────────────────────────────────┐
92
+ 1 ┤ ⣀⠴⠒⠋⠉⠉⠙⠒⠤⣀ │
93
+ │ ⢀⡴⠋⠁ ⠈⠳⢄ │
94
+ 0.6 ┤ ⢀⡤⠋ ⠑⣄ │
95
+ │ ⢠⠊ ⠈⠱⡄ │
96
+ f 0.2 ┤ ⢀⠜⠁ ⠘⢆ │
97
+ ( │⢠⠊ ⠱⡄ │
98
+ x │⠁ ⠘⢆ ⣠⠋│
99
+ ) -0.2 ┤ ⠱⡄ ⡔⠁ │
100
+ │ ⠈⢆⡀ ⡠⠋ │
101
+ -0.6 ┤ ⠙⢄ ⣠⠚⠁ │
102
+ │ ⠑⢦⡀ ⢀⣠⠞⠁ │
103
+ -1 ┤ ⠉⠒⠤⣄⣀⣀⣠⠤⠖⠋ │
104
+ └───────────────────────────────────────────────────────┘
105
+ 0 1.57 3.14 4.71 6.28
106
+ x
107
+ ```
108
+
109
+ Built-in math: `sin`, `cos`, `tan`, `sqrt`, `log`, `exp`, `pi`, `e`, and Python's `math` module.
110
+
111
+ ```bash
112
+ plotcli fn "exp(-x/5) * cos(x*2)" 0 15 --title "Damped Oscillation"
113
+ plotcli fn "x**3 - 3*x" -3 3 --title "Cubic"
114
+ plotcli fn "log(x)" 0.1 10 --title "Logarithm"
115
+ ```
116
+
117
+ ### Histogram
118
+
119
+ ```bash
120
+ plotcli hist -e "[random.gauss(0,1) for _ in range(500)]" --title "Normal Distribution"
121
+ ```
122
+ ```
123
+ Normal Distribution
124
+ ┌───────────────────────────────────────────────────────┐
125
+ 62 ┤ ⣿⡇ │
126
+ │ ⣿⡇⢸⣿ │
127
+ 49.6 ┤ ⢰⣶ ⣿⡇⢸⣿ ⣿⡇⢰⣶ │
128
+ │ ⢸⣿ ⣿⡇⢸⣿ ⣿⡇⢸⣿ │
129
+ c 37.2 ┤ ⢸⣿ ⢰⣶ ⣿⡇⢸⣿ ⣿⡇⢸⣿ │
130
+ o │ ⣀⡀⢸⣿ ⢸⣿ ⣿⡇⢸⣿ ⣿⡇⢸⣿ │
131
+ u │ ⢰⣶ ⣿⡇⢸⣿ ⢸⣿ ⣿⡇⢸⣿ ⣿⡇⢸⣿ │
132
+ n 24.8 ┤ ⢸⣿ ⣿⡇⢸⣿ ⢸⣿ ⣿⡇⢸⣿ ⣿⡇⢸⣿ ⣀⡀ ⣤⡄ │
133
+ t │ ⣶⡆⢸⣿ ⣿⡇⢸⣿ ⢸⣿ ⣿⡇⢸⣿ ⣿⡇⢸⣿ ⣿⡇ ⣿⡇ │
134
+ 12.4 ┤ ⢰⣶ ⣿⡇⢸⣿ ⣿⡇⢸⣿ ⢸⣿ ⣿⡇⢸⣿ ⣿⡇⢸⣿ ⣿⡇ ⣿⡇⢠⣤ ⣶⡆ │
135
+ │ ⣀⡀⢸⣿ ⢠⣤ ⣿⡇⢸⣿ ⣿⡇⢸⣿ ⢸⣿ ⣿⡇⢸⣿ ⣿⡇⢸⣿ ⣿⡇ ⣿⡇⢸⣿ ⣿⡇⢠⣤ ⣤⡄ │
136
+ 0 ┤⣶ ⣿⡇⢸⣿ ⢸⣿ ⣿⡇⢸⣿ ⣿⡇⢸⣿ ⢸⣿ ⣿⡇⢸⣿ ⣿⡇⢸⣿ ⣿⡇ ⣿⡇⢸⣿ ⣿⡇⢸⣿ ⣿⡇ ⣀⡀⢀⣀ ⣶│
137
+ └───────────────────────────────────────────────────────┘
138
+ -2.48 -1.06 0.36 1.78 3.2
139
+ x
140
+ ```
141
+
142
+ ### Density Plot
143
+
144
+ ```bash
145
+ plotcli density -e "[random.gauss(0,1) for _ in range(1000)]" --title "Kernel Density"
146
+ ```
147
+ ```
148
+ Kernel Density
149
+ ┌───────────────────────────────────────────────────────┐
150
+ 0.38 ┤ ⢀⠤⠒⠊⠉⠉⠢⢄ │
151
+ │ ⢰⠁ ⢣ │
152
+ 0.3 ┤ ⢠⠃ ⢣ │
153
+ d │ ⡎ ⢣ │
154
+ e 0.23 ┤ ⡜ ⢣ │
155
+ n │ ⡰⠁ ⠑⡄ │
156
+ s │ ⢀⠎ ⠘⡄ │
157
+ i 0.15 ┤ ⢀⠎ ⠱⡀ │
158
+ t │ ⢀⠎ ⢣ │
159
+ y 0.08 ┤ ⢠⠊ ⠱⡀ │
160
+ │ ⢀⠤⠒⠁ ⠈⠑⠤⡀ │
161
+ 1.7e-05 ┤⣀⣀⣀⣀⣀⣀⣀⡠⠤⠔⠊⠁ ⠈⠑⠢⠤⠤⢄⣀⣀⣀⣀⣀⣀│
162
+ └───────────────────────────────────────────────────────┘
163
+ -4.01 -2.01 -0.02 1.97 3.96
164
+ x
165
+ ```
166
+
167
+ ### Boxplot
168
+
169
+ ```bash
170
+ plotcli boxplot \
171
+ -e "[[random.gauss(m, 1+i*0.3) for _ in range(100)] for i, m in enumerate([0, 3, 7])]" \
172
+ --title "Boxplots"
173
+ ```
174
+ ```
175
+ Boxplots
176
+ ┌───────────────────────────────────────────────────────┐
177
+ 10.45 ┤ ⠈⠉⢹⠉⠉ │
178
+ │ ⢸ │
179
+ 7.83 ┤ ⡖⠒⠒⠒⠚⠒⠒⠒⠒⡆ │
180
+ │ ⢀ ⡏⠉⠉⠉⠉⠉⠉⠉⠉⡇ │
181
+ v 5.22 ┤ ⠐⠒⢲⠒⠒ ⠉⠉⠉⠉⢹⠉⠉⠉⠉⠁ │
182
+ a │ ⢸ ⢸ │
183
+ l │ ⣖⣒⣒⣒⣚⣒⣒⣒⣒⡆ ⢀⣀⣸⣀⣀ │
184
+ u 2.6 ┤ ⠒⠒⡖⠒⠂ ⠧⠤⠤⠤⢤⠤⠤⠤⠤⠇ ⠐ │
185
+ e │ ⢀⣀⣀⣀⣀⣇⣀⣀⣀⣀ ⢸ │
186
+ -0.02 ┤ ⢸⣒⣒⣒⣒⣒⣒⣒⣒⣺ ⠐⠒⠚⠒⠒ │
187
+ │ ⡇ │
188
+ -2.63 ┤ ⠉⠉⡉⠉⠁ │
189
+ └───────────────────────────────────────────────────────┘
190
+ box_1 box_2 box_3
191
+ x
192
+ ```
193
+
194
+ ### Scatter Plot
195
+
196
+ ```bash
197
+ plotcli scatter \
198
+ -e "[(x, x**1.5 + random.gauss(0,5)) for x in range(40)]" \
199
+ --title "Noisy Power Law"
200
+ ```
201
+
202
+ ### Heatmap
203
+
204
+ ```bash
205
+ plotcli heatmap \
206
+ -e "[[math.sin(r/3+c/3) for c in range(20)] for r in range(10)]" \
207
+ --title "Heatmap"
208
+ ```
209
+
210
+ ## Canvas Types
211
+
212
+ Three rendering backends with different resolution/compatibility tradeoffs:
213
+
214
+ ### Braille (default) -- highest resolution
215
+ ```bash
216
+ plotcli fn "sin(x)" 0 6.28 --canvas braille
217
+ ```
218
+ Uses Unicode Braille patterns (U+2800-U+28FF). Each character cell contains a 2x4 dot grid, giving **8x** the effective resolution of ASCII.
219
+
220
+ ### Block -- medium resolution
221
+ ```bash
222
+ plotcli fn "sin(x)" 0 6.28 --canvas block
223
+ ```
224
+ ```
225
+ Block Canvas
226
+ ┌───────────────────────────────────────────────────────┐
227
+ 1 ┤ ▄▄█▀▀▀▀█▄▄ │
228
+ │ ▄█▀ ▀▀▄ │
229
+ 0.6 ┤ ▄▀▀ █▄ │
230
+ │ ▄█▀ █▄ │
231
+ f 0.2 ┤ █▀ ▀█▄ │
232
+ ( │▄█ █▄ │
233
+ x │▀ ▀█ █▀│
234
+ ) -0.2 ┤ █▄ ▄█ │
235
+ │ ▀█ ▄█▀ │
236
+ -0.6 ┤ ▀█ ▄▄▀ │
237
+ │ ▀█▄ ▄█▀ │
238
+ -1 ┤ ▀▀█▄▄▄▄█▀▀ │
239
+ └───────────────────────────────────────────────────────┘
240
+ ```
241
+ Uses half-block characters (▀ ▄ █) for 2x vertical resolution.
242
+
243
+ ### ASCII -- maximum compatibility
244
+ ```bash
245
+ plotcli fn "sin(x)" 0 6.28 --canvas ascii
246
+ ```
247
+ ```
248
+ ASCII Canvas
249
+ ┌───────────────────────────────────────────────────────┐
250
+ 1 ┤ ******** │
251
+ │ **** **** │
252
+ 0.6 ┤ *** *** │
253
+ │ *** *** │
254
+ f 0.2 ┤ ** ** │
255
+ ( │** ** │
256
+ x │* ** **│
257
+ ) -0.2 ┤ ** ** │
258
+ │ *** *** │
259
+ -0.6 ┤ *** *** │
260
+ │ **** **** │
261
+ -1 ┤ ******** │
262
+ └───────────────────────────────────────────────────────┘
263
+ ```
264
+ Works in any terminal. Uses `*` for data points.
265
+
266
+ ## Data Input
267
+
268
+ | Method | Example |
269
+ |--------|---------|
270
+ | **Pipe values** | `echo "1 4 9 16" \| plotcli line` |
271
+ | **Pipe lines** | `seq 50 \| plotcli line` |
272
+ | **x,y pairs** | `echo -e "1,2\n3,4\n5,6" \| plotcli scatter -d ","` |
273
+ | **Expression** | `plotcli line -e "[x**2 for x in range(20)]"` |
274
+ | **Tuple list** | `plotcli scatter -e "[(x, sin(x)) for x in range(50)]"` |
275
+ | **CSV file** | `plotcli line -f data.csv -x time -y price` |
276
+ | **JSON** | `echo '[1,4,9,16]' \| plotcli line -j` |
277
+ | **Math function** | `plotcli fn "sin(x)*exp(-x/5)" 0 20` |
278
+ | **Shell pipeline** | `curl -s api \| jq '.[].value' \| plotcli line` |
279
+
280
+ ## Options
281
+
282
+ ```
283
+ -W, --width Canvas width in characters (auto-detected)
284
+ -H, --height Canvas height in characters (auto-detected)
285
+ -t, --title Plot title
286
+ --x-label X-axis label
287
+ --y-label Y-axis label
288
+ -c, --color Series color (red, green, blue, yellow, magenta, cyan, ...)
289
+ --canvas braille (default), block, or ascii
290
+ --xlim MIN MAX X-axis limits
291
+ --ylim MIN MAX Y-axis limits
292
+ --bins N Number of histogram bins
293
+ --no-legend Hide legend
294
+ -d, --delimiter Input delimiter
295
+ -j, --json Parse stdin as JSON
296
+ -e, --eval Python expression for data
297
+ -f, --file CSV/TSV file path
298
+ -x, --x-col X column name or index
299
+ -y, --y-col Y column name or index
300
+ ```
301
+
302
+ ## Use with Claude Code
303
+
304
+ plotcli is designed for AI-assisted CLI workflows. Claude Code can generate and display plots inline:
305
+
306
+ ```
307
+ > Plot a sine wave
308
+
309
+ $ plotcli fn "sin(x)" 0 6.28 --title "Sine Wave"
310
+
311
+ > Show me the distribution of file sizes in this directory
312
+
313
+ $ find . -type f -exec stat -f%z {} \; | plotcli hist --title "File Sizes" --bins 20
314
+
315
+ > Visualize the CSV data
316
+
317
+ $ plotcli scatter -f measurements.csv -x temperature -y pressure --title "T vs P"
318
+ ```
319
+
320
+ To make `plotcli` available globally for Claude Code:
321
+
322
+ ```bash
323
+ uv tool install plotcli # install globally via uv
324
+ # or
325
+ pip install plotcli # install globally via pip
326
+ ```
327
+
328
+ ## Python API
329
+
330
+ ```python
331
+ import plotcli
332
+
333
+ # Quick one-liners
334
+ plotcli.line(range(10), [x**2 for x in range(10)], title="Squares").show()
335
+ plotcli.scatter(xs, ys, title="My Data", canvas_type="braille").show()
336
+ plotcli.histogram(data, bins=20, title="Distribution").show()
337
+ plotcli.density(data, title="KDE").show()
338
+ plotcli.boxplot([group_a, group_b], names=["A", "B"]).show()
339
+ plotcli.function_plot("sin(x)*x", 0, 10).show()
340
+
341
+ # Multi-series
342
+ from plotcli import Plot
343
+ p = Plot(title="Comparison", width=60, height=15)
344
+ p.add(x1, y1, "line", color="blue", name="model")
345
+ p.add(x2, y2, "scatter", color="red", name="data")
346
+ p.show()
347
+
348
+ # Get string output (no print)
349
+ output = p.render()
350
+ ```
351
+
352
+ ## License
353
+
354
+ LGPL-3.0 (same as the original R plotcli)
355
+
356
+ ## Credits
357
+
358
+ Python port inspired by [plotcli](https://github.com/cheuerde/plotcli) by Claas Heuer, which was in turn inspired by [UnicodePlots.jl](https://github.com/JuliaPlots/UnicodePlots.jl).
@@ -0,0 +1,143 @@
1
+ ./CLAUDE.md,sha256=1U5yOj7JSfE3yHf1Z1__cByJJa5vXLySLIe1VKQujZk,1742
2
+ ./LICENSE,sha256=pjdFhMYmiWiXUsZ9DKJeBzH567EbSfG6XxZVxvStA3A,1077
3
+ ./PKG-INFO,sha256=PjudQpUF41fI4pMTHIO9iMcLPu_68VSaB8P61hzBklE,17121
4
+ ./README.md,sha256=WNjvOYkAdqF_FSFnGWzVe7aagyn75NTz0VPYhENMZ5w,16341
5
+ ./main.py,sha256=wMn45gyG59397s65RDr453gWIf9HohDLw-F9aZKx9ug,85
6
+ ./plotcli.py,sha256=c5nY0guQOm3U9ggoO7fn-qqUDZB71ICqJWsLafHHYgI,37375
7
+ ./pyproject.toml,sha256=9IVdkiNJvn114IJILLQbFtjoLGvad7pvfty2IvkeFPw,932
8
+ ./uv.lock,sha256=WTK9sSvgT0IyN8avBbcaqcAGDZ0N3Aka89I_4a-J4do,127
9
+ ./plotcli-original/.Rbuildignore,sha256=4XX22A4-fXXFROAoZkPNe_bbAeuaUO6sHt_2KylOtN0,268
10
+ ./plotcli-original/.gitignore,sha256=Y3nn2mfFba77TDh4wLXvL9ROqN6_AqhdntMJrJ4GGfA,649
11
+ ./plotcli-original/DESCRIPTION,sha256=E-gw-Ww0PQmKfg_dNB1af9A-gi5dNronc6rZv2Hh3hM,1053
12
+ ./plotcli-original/NAMESPACE,sha256=7dYJN6v6PMWKlrcL51CfwjrJlKvLDFrekVnyiHC4cj0,1321
13
+ ./plotcli-original/NEWS.md,sha256=A_mdD4gCpbTkr5DefG99HaQ4AYP_s6xeEb-cg6s4UAw,3944
14
+ ./plotcli-original/README.md,sha256=GR_ZP2mw8hWFr-OG5oVUsOoZsgixTFFYxFl1WKDeSDU,5366
15
+ ./plotcli-original/.github/workflows/deploy_docs.yml,sha256=rvj0Ssa016ics3KbukgjX7GpVCRTtdjPFSmgmbAtRe8,1100
16
+ ./plotcli-original/R/ascii_escape.r,sha256=PpBITNnEIu3Y70HpXoiWV2HTcdgUZ1E6630UpaUCpc0,435
17
+ ./plotcli-original/R/canvas.r,sha256=QOjRS25t2MzXhvpKZOzGzATjlApNCGIoD7j94f37xb4,18612
18
+ ./plotcli-original/R/class_functions.r,sha256=d4oypqKKuQA7fy5fbWw2eC6UVeDPfNVmwqPccSPREeM,3745
19
+ ./plotcli-original/R/geom_registry.r,sha256=4rO5brXdGsBQ8xghzr62dafeAysaTzRaBM-CiD03aR8,41782
20
+ ./plotcli-original/R/ggplotcli.r,sha256=47cd_mjbeq0GpSIIRcdHP8Zyn9eNZFx1TV3h_VVh8Jc,7609
21
+ ./plotcli-original/R/ggplotcli_helpers.r,sha256=gkeBVbowjs6Gk6UoSn-wpMC4D242t6wIxdV8NKDkfQc,35103
22
+ ./plotcli-original/R/helper_functions.r,sha256=kfu4tB_gVVE4aTmb7HQXWxLMS4LONBfVYoJyhqzEgso,10099
23
+ ./plotcli-original/R/plotcli.r,sha256=1KnYoJg4n1pJNdUkt4gXg94VnzPcIpUzF_zzEheH-gA,38201
24
+ ./plotcli-original/R/plotcli_grid.r,sha256=YrI5X5O177b-7PM81c515J9IbVA6pRfkH3ib4SKoR2Q,13
25
+ ./plotcli-original/R/plotcli_wrappers.r,sha256=9I_-TxD0NZwzoBAeyucC6v4jokZ4emvxBeSfdrUelas,15650
26
+ ./plotcli-original/R/zzz.r,sha256=61fVeLV7T4GYEcoG0r6anD_Sy0_kliWxOovWr2IVssE,517
27
+ ./plotcli-original/docs/ascii.png,sha256=zffim40vIL8AvX2hx-JiK4x2LPY1g3qBEOjsBqZ9YoQ,17854
28
+ ./plotcli-original/docs/bar.png,sha256=csqyrOGIx00i2T8026Fah-FEUPVtcI5Y5BM4kjyPyIM,39763
29
+ ./plotcli-original/docs/block.png,sha256=qmxfpFEMeeXanRV4jjaHC1GG8UVYGnhcOXDl22YBgTU,18973
30
+ ./plotcli-original/docs/boxplot.png,sha256=BoWEFtsxl8gqVHPpeT7MGsLgCpGJvSevxJGE1syPlgg,29489
31
+ ./plotcli-original/docs/density.png,sha256=8zuVf34w4jXan6USgFM_HVSh1X5FPUjhz90U761ASRs,34294
32
+ ./plotcli-original/docs/facet.png,sha256=650oiVsCh2yY5R_0XM82fMbvy-VQBtvcaeq5wnThPRg,33576
33
+ ./plotcli-original/docs/facet_grid.png,sha256=vdaL52HMblyFdRMwhuchyGs_y7Gbrw-uGjQaGd-YeX8,38680
34
+ ./plotcli-original/docs/generate_png.sh,sha256=0JCoOWwKghimCjZzhfNM1lH-cSmPWnlqXsHUF4f8CCc,3577
35
+ ./plotcli-original/docs/heatmap.png,sha256=zoxQlry_oRRLN8xdUgMQ0_Tvx6EnFLWwIWRmnVc3qn8,81331
36
+ ./plotcli-original/docs/histogram.png,sha256=CTwKdDypyA-CdWtuxbDGBsfa-RrRrlcyTajxH-03Kxk,32533
37
+ ./plotcli-original/docs/line.png,sha256=sDxsjZNEQuNRV8CUtVYnZB7JfNATo6utpbCw_WZiPmA,24913
38
+ ./plotcli-original/docs/noborder.png,sha256=U4M6-Dev9SnORf_vC3r3bTPia2DOs_nUFNwxMexEXxY,16846
39
+ ./plotcli-original/docs/scatter.png,sha256=OGYhx1KN9ZjGYCda9nh_LH2XU873ssevgJOIInqRf1A,25219
40
+ ./plotcli-original/docs/showcase.R,sha256=stBcjvj3UKqVCG6pRcO3CHsyL9bhzBSSg7_OGwNLJXM,6551
41
+ ./plotcli-original/inst/doc/ggplotcli.R,sha256=0jjBPvr8LSlkKbB8-S2x6SlC0gyRu4zp5klKw4v9xlY,7853
42
+ ./plotcli-original/inst/doc/ggplotcli.Rmd,sha256=4FSe7BeeZHkyBIb1QazmVyW_kLwm4ZsO8O_sjpmfP6c,8866
43
+ ./plotcli-original/inst/doc/ggplotcli.html,sha256=PRxAFKHz6pqYh1s7ZM8-yRFWqLzkKJaMEYufNtxqTv8,155553
44
+ ./plotcli-original/inst/doc/plotcli_class.R,sha256=yrQFRe2FzV9pvwPj_z0MZVkZK6COCF2L40wY39_ZIX4,2467
45
+ ./plotcli-original/inst/doc/plotcli_class.Rmd,sha256=ZJKnndrHbOCSrugFCV9C-tp2s6Ai7HP7184roQJtZy0,2861
46
+ ./plotcli-original/inst/doc/plotcli_class.html,sha256=PTtTYt8KDiTSO_9FM_odeX7gbQq-Z40DL6zSzJ-AJQ8,43420
47
+ ./plotcli-original/inst/doc/plotcli_wrappers.R,sha256=sfekpktiAYOxh_yhZCDItmCwjc2y1jZDP8O6FA3_YTU,1100
48
+ ./plotcli-original/inst/doc/plotcli_wrappers.Rmd,sha256=uPghCUPxx3KpNrJ-THoGPwsPm4XjOJGwIIWQnWqXC5g,1132
49
+ ./plotcli-original/inst/doc/plotcli_wrappers.html,sha256=NgGCX9re_7-Xi7YvCUDNYgGQnjwse4JSCw4ZE6wKkak,43154
50
+ ./plotcli-original/man/AsciiCanvas.Rd,sha256=-0yA0psO4F3oAOwDC1GyXq69Sy_87B6xvNyIcnnVn_k,6347
51
+ ./plotcli-original/man/BlockCanvas.Rd,sha256=hJ_dGc-v7jtrL05TReLbMNPi8ReG05MXxkFSMohKi-M,6853
52
+ ./plotcli-original/man/BrailleCanvas.Rd,sha256=GgPsbRqHslIhufCJtPw3xqRgNjIyh8JSbrtKSFc6Tk8,7399
53
+ ./plotcli-original/man/Canvas.Rd,sha256=ajt6y__XyHnJ5QHNej3VHP2oKQS6cHIYkkp_CET6R-I,14412
54
+ ./plotcli-original/man/GeomRegistry.Rd,sha256=iwWYJwCct871XL946zlBgj4USywhL5tPGjJaRBB3aAk,324
55
+ ./plotcli-original/man/add_legend_to_output.Rd,sha256=f370UfqrS05_us_OCGvMvEBoxwy3se0TXK96uBmEq8Y,341
56
+ ./plotcli-original/man/braille_dot_bit.Rd,sha256=KJ7B9kXNwTeT8ZHcGb-QDpuDgtoQGFNjC1Qmz66i9S0,697
57
+ ./plotcli-original/man/braille_set_dot.Rd,sha256=390ZsvtTpy4YLgnnQP3F8orfIa6rdr3dpQNZTBdalxo,529
58
+ ./plotcli-original/man/bresenham.Rd,sha256=4wYZ4LN3Pof63uZ-vhwl_SZTv3-g_ap2KA3c2mUMhXQ,686
59
+ ./plotcli-original/man/build_plot_output.Rd,sha256=7EWTSuyOZgvHG_QxEhFmIQva-J4C-saec2dAPIEt4q8,599
60
+ ./plotcli-original/man/build_plot_output_v2.Rd,sha256=OiPR3m4Zd8FcBd2svCRf0LopXgJSXDYcqoNE4NtPLNw,760
61
+ ./plotcli-original/man/cat_plot_matrix.Rd,sha256=1i1bXtTOfIrU3OpTFSrVD53ofwGUspGroVA1FAffhbY,421
62
+ ./plotcli-original/man/cbind.plotcli.Rd,sha256=xQ1M7vCClFwhkHpeDtBAwZfo-KeGUgFvRGUUdIRa2qQ,495
63
+ ./plotcli-original/man/cbind_plots.Rd,sha256=UFwMZ8Qa0voOHmZyXoCQZbJs54wKSPlFvvozbEXS8Og,408
64
+ ./plotcli-original/man/color_to_term.Rd,sha256=6pG80-K7LAOQKb7kqqtl0GmI5k7wudBEnGx5TKiBxsY,486
65
+ ./plotcli-original/man/create_canvas.Rd,sha256=odikUHkp6u6gYdlFwDGBCSDsa-ukWZRBfTT6YNRIucQ,448
66
+ ./plotcli-original/man/create_panel_scales.Rd,sha256=zYmk3mS4tfy1iSVUvwuBD2i5kKIE8dF7-_D0FWLvxuc,749
67
+ ./plotcli-original/man/create_scales.Rd,sha256=0i0iypc50gV5mI6PfO68o13bmUcLcqM_-FgWWVPxudM,732
68
+ ./plotcli-original/man/dot-geom_registry.Rd,sha256=cQozLmOgkizGqvE4l3zVPmI61cDGyfvMKbNH-nUNrIQ,365
69
+ ./plotcli-original/man/draw_border.Rd,sha256=6b5y48m4J1l7owzmvxz5g-0pdwbM59vXWQRo5P70Hxg,262
70
+ ./plotcli-original/man/draw_grid.Rd,sha256=LN0o4gtduFwT0WIoFU63J1_kRGNT3-OSVd0t9mqLTxg,275
71
+ ./plotcli-original/man/extract_legend_info.Rd,sha256=5v4ACWEsnSk5EkKovlknNdF-yqlReGREmhUV_j6jNk8,311
72
+ ./plotcli-original/man/extract_plot_labels.Rd,sha256=wqAs0h2KE1h18IzAP6RXYkjTL-qvodyKAZazxih3izI,336
73
+ ./plotcli-original/man/extract_plot_style.Rd,sha256=G5SiriPWM609XeiQr9Hu88ntz44uq1gQZHPbmJUh17s,326
74
+ ./plotcli-original/man/format_axis_label.Rd,sha256=o03VOVjQlBfY_HMChObNAesF350cM2FFUEoq5iBFuh8,332
75
+ ./plotcli-original/man/format_four_chars.Rd,sha256=5_feRyzVFJhWs-K4AF_PF2bo9LfyVULEohVWFyjHOWc,503
76
+ ./plotcli-original/man/geom_area_handler.Rd,sha256=_Gj32-wySArITBBhlxdIlTayvjPOmoI0vPC9K32iuD8,303
77
+ ./plotcli-original/man/geom_bar_handler.Rd,sha256=AkcomD_wuFw4fp8zyVjoo1X_TSRy6tGr56nnnzySabM,305
78
+ ./plotcli-original/man/geom_boxplot_handler.Rd,sha256=81By_7NDSTcJS961Icz4Dmhl3JGo3R0KBWR7ZhvtpSA,442
79
+ ./plotcli-original/man/geom_density_handler.Rd,sha256=rbg3fogm-xUcVvAs58ltVHQJT1opKqJv7W_YeLaUPAQ,317
80
+ ./plotcli-original/man/geom_histogram_handler.Rd,sha256=NovSEmZpHccbc6nDI8I5OwmCYQxL1EW-DgZmpTASP2k,335
81
+ ./plotcli-original/man/geom_hline_handler.Rd,sha256=lP1fHQHxfUstSM5ullwNAOCNWZjZPbzIJCN_gu7FwFE,311
82
+ ./plotcli-original/man/geom_line_handler.Rd,sha256=UzblHUosciO-89NECkYIwZTUW9un-uyHLpRi5cIzzyI,306
83
+ ./plotcli-original/man/geom_path_handler.Rd,sha256=QHf1DWS08sukumzG8xEgKE9kQQpheKuLa4CDVFd_eqI,329
84
+ ./plotcli-original/man/geom_point_handler.Rd,sha256=3deEQVcLTKjOOLMCYVvUjF17q5ju-8plw3Lk8H7co00,338
85
+ ./plotcli-original/man/geom_rect_handler.Rd,sha256=-felmvIvHStw34ygQ1pkevjUNYx1jvOn686rFVPb4LQ,301
86
+ ./plotcli-original/man/geom_segment_handler.Rd,sha256=BBDeX1MG81UE2Y-NU4JxEYo2fsfC4exNlgoXT6t1JwI,316
87
+ ./plotcli-original/man/geom_smooth_handler.Rd,sha256=YwQoqX4dEF10_diJa1la6lb_12oWyNaJAhDZhm55kNs,364
88
+ ./plotcli-original/man/geom_text_handler.Rd,sha256=bLooQXb6k7VbkXvSqAGKYfbVaz4Z44jpsBLxlf-tFJ8,302
89
+ ./plotcli-original/man/geom_vline_handler.Rd,sha256=WKg2YuCbh7PhIbvU38QB4zfsZc_OyyxmCRFYGIh1klI,309
90
+ ./plotcli-original/man/get_color_hue.Rd,sha256=sdNc2htUitg0GKnoT_tcQNzo_jSlpy4IfZLiuBsP3xM,384
91
+ ./plotcli-original/man/get_data_subset.Rd,sha256=Ka9XXfQMuWMckfalAiVPG2HJq0BCS6l6HNzLW75OEio,608
92
+ ./plotcli-original/man/get_facet_info.Rd,sha256=93wN2emUgeazLBYPLJitGwvXi_flnY7XWJYvRfVvDNo,383
93
+ ./plotcli-original/man/get_geom_handler.Rd,sha256=BWnm_mdFXr4Eq5GqtkhjJdAQONvLrWxIZbkXIv4loeo,378
94
+ ./plotcli-original/man/get_term_colors.Rd,sha256=ofqN1N9KyuIlEZqh_NkQIe9D295HRc_xn3lpxltCE0U,422
95
+ ./plotcli-original/man/ggplotcli.Rd,sha256=8Ry4OFBPxB2Af-l3HXhZORsgC0DGekLgsRUhzqba3eQ,2262
96
+ ./plotcli-original/man/init_color_mapping.Rd,sha256=MNFky2KdXmjG--LcCnvduWuUcaD71towtDbt19xdr5w,475
97
+ ./plotcli-original/man/is_braille.Rd,sha256=paEyfmzMfJEpeH0wBKNX-tkUoJMrYSci-gbo3ICVupM,470
98
+ ./plotcli-original/man/is_geom_registered.Rd,sha256=V2wrkr1UvmwcL7D55cyh-6u6Rt7-D0pbePr3uZwdems,338
99
+ ./plotcli-original/man/list_registered_geoms.Rd,sha256=MtlZr_QqPTeHHfNfJnIda_qvp_JCfsg7OsAvfQAXd0I,307
100
+ ./plotcli-original/man/make_colored.Rd,sha256=sA5IfaH6P5lk7xz1XhVSX00C_p0P-21_-7zAy0sTThM,595
101
+ ./plotcli-original/man/make_unique_names.Rd,sha256=FazmtnsiJaTYfKkZdac_x1QileTy0zwYGDwpUr1Fh6g,510
102
+ ./plotcli-original/man/normalize_data.Rd,sha256=OZA70BPqARlePq8Fs3AIytKO86GdkfwL3zKERaXim-I,657
103
+ ./plotcli-original/man/pclib.Rd,sha256=diotmYMdoP5NS6MiIWz_vhFu3ugxosgmqpqyxCK724Q,1096
104
+ ./plotcli-original/man/pclibx.Rd,sha256=tWzEmAsIWuIsvzDbDzn_-5a36BG2VMt5AoNleMTH918,1084
105
+ ./plotcli-original/man/pclid.Rd,sha256=QjGHdSS_P4KSwxEPvLEZBuJ-pf6TryZeBktXiB0F1aA,1049
106
+ ./plotcli-original/man/pclih.Rd,sha256=uqBycu2xickr9FYZ5kcY08KNcQYUg9a9vbFs34RKPuE,1188
107
+ ./plotcli-original/man/pclil.Rd,sha256=41dSv-wZbP_6Tb5QnRw1W16D-FEA4BIsYFK66NKRTyk,1085
108
+ ./plotcli-original/man/pclis.Rd,sha256=QTtD6-oBSDyceGMru1ITx7fXnYY-12W4eJt4wH-BArI,1110
109
+ ./plotcli-original/man/pixel_to_braille.Rd,sha256=MXMnzvwb1AUhoCTXtZx9w1gRKW_83zfkHRJZiUHs-OI,626
110
+ ./plotcli-original/man/plotcli.Rd,sha256=MASXp2gyG0ggkM7nsSOX3-ULiYaclz5eFLf8DS-VOI8,20449
111
+ ./plotcli-original/man/plotcli_bar.Rd,sha256=pfMK0F6Sm4t1jVdsmFZpDyvbsbbOwpBQKees6V74wFE,1134
112
+ ./plotcli-original/man/plotcli_box.Rd,sha256=MxYg8Tb8I3uq7ygIhGxm2okXna-EDnbMZjwltU67Z80,1120
113
+ ./plotcli-original/man/plotcli_density.Rd,sha256=tBv_LAB_zfx6nTjfKAkkaNB4HxPHmGLhkfZ3NQOcy2M,1103
114
+ ./plotcli-original/man/plotcli_histogram.Rd,sha256=DZkuqMCB4QkUuTHgjKT8AdP0sayN1BNEn0MqKvpTL6Q,1251
115
+ ./plotcli-original/man/plotcli_line.Rd,sha256=fyR_7gD7vszWoL8OTPql6Z4BLiSzBpebqnSV_wjwcYM,1127
116
+ ./plotcli-original/man/plotcli_options.Rd,sha256=ZSXfjmsMfMDhbNblZO4DxUVbo8IG_jUZO4foS_TQFqI,487
117
+ ./plotcli-original/man/plotcli_scatter.Rd,sha256=iQA3DfVjTtJTtmOfHN_dx2FAR0j19Cd4PugIeRXVPFE,1165
118
+ ./plotcli-original/man/plus-.plotcli.Rd,sha256=i9wDitxd3nDoWh89FpDF2Z3_21Kr4tzTJGrl9WcEJik,500
119
+ ./plotcli-original/man/rbind.plotcli.Rd,sha256=mwetswIn-0x5gFeQPIsbu_G1YR-C5-0BQ2RCBMJ3N0Y,491
120
+ ./plotcli-original/man/rbind_plots.Rd,sha256=MrBNkX_wyzHDUrsO2HspsoxeWx5622eARvKNSkYzQI0,406
121
+ ./plotcli-original/man/register_geom.Rd,sha256=_NTLG4BylyWT5upzTVTHROZCS8pzo--mfF5Ru7c6RnA,581
122
+ ./plotcli-original/man/remove_color_codes.Rd,sha256=BYRayUcme7z3KwiV2Bqqg5NfqdyhOmLvjZqPm9MjmH0,528
123
+ ./plotcli-original/man/render_faceted_plot.Rd,sha256=6eUtHBgjz-YnizmihsM1QujC4wwBs0eczIGtMG1hruY,559
124
+ ./plotcli-original/man/render_single_panel.Rd,sha256=CRxBKzZLkg3uYiylald7edmhUqR92Ih0vsBTXTKMpvo,355
125
+ ./plotcli-original/man/safe_aes_name.Rd,sha256=bEpuVG3yWsu1oN5Kgwj_q8Kc_NHsvzercnO0UZaUl7E,451
126
+ ./plotcli-original/tests/testthat.R,sha256=ixH0hhVldaXoppoNuX3B_5_YvJD94zZrWxgGCBX5fsw,58
127
+ ./plotcli-original/tests/testthat/test-new-geoms.R,sha256=orlpLuhuJqV_83pus2xhbCWaVmPw6NGYoYi1wPeFEnE,4403
128
+ ./plotcli-original/tests/testthat/test-plotcli.R,sha256=2FYxXdrVA6JadofnmJVTyZh7zQ0SMu9RZjEAcZ3KuRQ,2297
129
+ ./plotcli-original/vignettes/ggplotcli.Rmd,sha256=4FSe7BeeZHkyBIb1QazmVyW_kLwm4ZsO8O_sjpmfP6c,8866
130
+ ./plotcli-original/vignettes/plotcli_class.R,sha256=yrQFRe2FzV9pvwPj_z0MZVkZK6COCF2L40wY39_ZIX4,2467
131
+ ./plotcli-original/vignettes/plotcli_class.Rmd,sha256=ZJKnndrHbOCSrugFCV9C-tp2s6Ai7HP7184roQJtZy0,2861
132
+ ./plotcli-original/vignettes/plotcli_wrappers.R,sha256=sfekpktiAYOxh_yhZCDItmCwjc2y1jZDP8O6FA3_YTU,1100
133
+ ./plotcli-original/vignettes/plotcli_wrappers.Rmd,sha256=uPghCUPxx3KpNrJ-THoGPwsPm4XjOJGwIIWQnWqXC5g,1132
134
+ ./plotcli.egg-info/PKG-INFO,sha256=jH4N8Q4xdAPOqgkDkt2ueRMF77pgSWKih98zmunu70I,215
135
+ ./plotcli.egg-info/SOURCES.txt,sha256=73CEwY5VaimWS-A4CVDAdOKF89CUsbbFEdrKTTWpx5I,177
136
+ ./plotcli.egg-info/dependency_links.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
137
+ ./plotcli.egg-info/entry_points.txt,sha256=AoDhPczRxzd3xl0ptQSFbAkNDY5JdJrvkFsW8MmUwnY,42
138
+ ./plotcli.egg-info/top_level.txt,sha256=dbzFd-tQv-NUEOWGvpHau6RmegkBpfE3yM6nnLEpDrI,8
139
+ plotcli_py-0.1.0.dist-info/METADATA,sha256=PjudQpUF41fI4pMTHIO9iMcLPu_68VSaB8P61hzBklE,17121
140
+ plotcli_py-0.1.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
141
+ plotcli_py-0.1.0.dist-info/entry_points.txt,sha256=w9voG7uDfn6NqUcjhIwBwEvtSxgGiKENK2N150AMcnE,41
142
+ plotcli_py-0.1.0.dist-info/licenses/LICENSE,sha256=pjdFhMYmiWiXUsZ9DKJeBzH567EbSfG6XxZVxvStA3A,1077
143
+ plotcli_py-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.29.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ plotcli = plotcli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 plotcli contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
pyproject.toml ADDED
@@ -0,0 +1,31 @@
1
+ [project]
2
+ name = "plotcli-py"
3
+ version = "0.1.0"
4
+ description = "Terminal plotting using Unicode Braille/Block/ASCII. Zero dependencies. Pipe data, plot math functions, read CSV -- all from the CLI."
5
+ requires-python = ">=3.8"
6
+ dependencies = []
7
+ license = "MIT"
8
+ readme = "README.md"
9
+ keywords = ["terminal", "plot", "cli", "braille", "unicode", "chart", "graph", "visualization"]
10
+ classifiers = [
11
+ "Development Status :: 4 - Beta",
12
+ "Environment :: Console",
13
+ "Intended Audience :: Developers",
14
+ "Intended Audience :: Science/Research",
15
+ "Topic :: Scientific/Engineering :: Visualization",
16
+ "Programming Language :: Python :: 3",
17
+ ]
18
+
19
+ [project.urls]
20
+ Homepage = "https://github.com/wowave/plotcli-py"
21
+ Repository = "https://github.com/wowave/plotcli-py"
22
+
23
+ [project.scripts]
24
+ plotcli = "plotcli:main"
25
+
26
+ [build-system]
27
+ requires = ["hatchling"]
28
+ build-backend = "hatchling.build"
29
+
30
+ [tool.hatch.build.targets.wheel]
31
+ packages = ["."]
uv.lock ADDED
@@ -0,0 +1,8 @@
1
+ version = 1
2
+ revision = 3
3
+ requires-python = ">=3.8"
4
+
5
+ [[package]]
6
+ name = "plotcli"
7
+ version = "0.1.0"
8
+ source = { editable = "." }