charty 0.2.0 → 0.2.6

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 (78) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +71 -0
  3. data/.github/workflows/nmatrix.yml +67 -0
  4. data/.github/workflows/pycall.yml +86 -0
  5. data/Dockerfile.dev +9 -1
  6. data/Gemfile +18 -0
  7. data/README.md +177 -9
  8. data/Rakefile +4 -5
  9. data/charty.gemspec +10 -4
  10. data/examples/Gemfile +1 -0
  11. data/examples/active_record.ipynb +1 -1
  12. data/examples/daru.ipynb +1 -1
  13. data/examples/iris_dataset.ipynb +1 -1
  14. data/examples/nmatrix.ipynb +1 -1
  15. data/examples/{numo-narray.ipynb → numo_narray.ipynb} +1 -1
  16. data/examples/palette.rb +71 -0
  17. data/examples/sample.png +0 -0
  18. data/examples/sample_images/hist_gruff.png +0 -0
  19. data/examples/sample_pyplot.ipynb +40 -38
  20. data/images/penguins_body_mass_g_flipper_length_mm_scatter_plot.png +0 -0
  21. data/images/penguins_body_mass_g_flipper_length_mm_species_scatter_plot.png +0 -0
  22. data/images/penguins_body_mass_g_flipper_length_mm_species_sex_scatter_plot.png +0 -0
  23. data/images/penguins_species_body_mass_g_bar_plot_h.png +0 -0
  24. data/images/penguins_species_body_mass_g_bar_plot_v.png +0 -0
  25. data/images/penguins_species_body_mass_g_box_plot_h.png +0 -0
  26. data/images/penguins_species_body_mass_g_box_plot_v.png +0 -0
  27. data/images/penguins_species_body_mass_g_sex_bar_plot_v.png +0 -0
  28. data/images/penguins_species_body_mass_g_sex_box_plot_v.png +0 -0
  29. data/lib/charty.rb +13 -1
  30. data/lib/charty/backend_methods.rb +8 -0
  31. data/lib/charty/backends.rb +26 -1
  32. data/lib/charty/backends/bokeh.rb +31 -31
  33. data/lib/charty/backends/{google_chart.rb → google_charts.rb} +75 -33
  34. data/lib/charty/backends/gruff.rb +14 -3
  35. data/lib/charty/backends/plotly.rb +774 -9
  36. data/lib/charty/backends/pyplot.rb +611 -34
  37. data/lib/charty/backends/rubyplot.rb +2 -2
  38. data/lib/charty/backends/unicode_plot.rb +79 -0
  39. data/lib/charty/dash_pattern_generator.rb +57 -0
  40. data/lib/charty/index.rb +213 -0
  41. data/lib/charty/linspace.rb +1 -1
  42. data/lib/charty/plot_methods.rb +254 -0
  43. data/lib/charty/plotter.rb +10 -10
  44. data/lib/charty/plotters.rb +12 -0
  45. data/lib/charty/plotters/abstract_plotter.rb +243 -0
  46. data/lib/charty/plotters/bar_plotter.rb +201 -0
  47. data/lib/charty/plotters/box_plotter.rb +79 -0
  48. data/lib/charty/plotters/categorical_plotter.rb +380 -0
  49. data/lib/charty/plotters/count_plotter.rb +7 -0
  50. data/lib/charty/plotters/estimation_support.rb +84 -0
  51. data/lib/charty/plotters/line_plotter.rb +300 -0
  52. data/lib/charty/plotters/random_support.rb +25 -0
  53. data/lib/charty/plotters/relational_plotter.rb +635 -0
  54. data/lib/charty/plotters/scatter_plotter.rb +80 -0
  55. data/lib/charty/plotters/vector_plotter.rb +6 -0
  56. data/lib/charty/statistics.rb +114 -0
  57. data/lib/charty/table.rb +161 -15
  58. data/lib/charty/table_adapters.rb +2 -0
  59. data/lib/charty/table_adapters/active_record_adapter.rb +17 -9
  60. data/lib/charty/table_adapters/base_adapter.rb +166 -0
  61. data/lib/charty/table_adapters/daru_adapter.rb +41 -3
  62. data/lib/charty/table_adapters/datasets_adapter.rb +17 -2
  63. data/lib/charty/table_adapters/hash_adapter.rb +143 -16
  64. data/lib/charty/table_adapters/narray_adapter.rb +25 -6
  65. data/lib/charty/table_adapters/nmatrix_adapter.rb +15 -5
  66. data/lib/charty/table_adapters/pandas_adapter.rb +163 -0
  67. data/lib/charty/util.rb +28 -0
  68. data/lib/charty/vector.rb +69 -0
  69. data/lib/charty/vector_adapters.rb +187 -0
  70. data/lib/charty/vector_adapters/array_adapter.rb +101 -0
  71. data/lib/charty/vector_adapters/daru_adapter.rb +163 -0
  72. data/lib/charty/vector_adapters/narray_adapter.rb +182 -0
  73. data/lib/charty/vector_adapters/nmatrix_adapter.rb +37 -0
  74. data/lib/charty/vector_adapters/numpy_adapter.rb +168 -0
  75. data/lib/charty/vector_adapters/pandas_adapter.rb +199 -0
  76. data/lib/charty/version.rb +1 -1
  77. metadata +121 -22
  78. data/.travis.yml +0 -10
@@ -0,0 +1,168 @@
1
+ module Charty
2
+ module VectorAdapters
3
+ class NumpyAdapter < BaseAdapter
4
+ VectorAdapters.register(:numpy, self)
5
+
6
+ def self.supported?(data)
7
+ return false unless defined?(Numpy::NDArray)
8
+ case data
9
+ when Numpy::NDArray
10
+ true
11
+ else
12
+ false
13
+ end
14
+ end
15
+
16
+ def initialize(data)
17
+ @data = check_data(data)
18
+ self.index = index || RangeIndex.new(0 ... length)
19
+ end
20
+
21
+ attr_reader :data
22
+
23
+ def_delegator :data, :size, :length
24
+
25
+ def compare_data_equality(other)
26
+ case other
27
+ when NumpyAdapter, PandasSeriesAdapter
28
+ Numpy.all(data == other.data)
29
+ when BaseAdapter
30
+ Numpy.all(data == other.data.to_a)
31
+ else
32
+ false
33
+ end
34
+ end
35
+
36
+ include NameSupport
37
+ include IndexSupport
38
+
39
+ def where(mask)
40
+ mask = check_mask_vector(mask)
41
+ case mask.data
42
+ when Numpy::NDArray,
43
+ ->(x) { defined?(Pandas::Series) && x.is_a?(Pandas::Series) }
44
+ mask_data = Numpy.asarray(mask.data, dtype: :bool)
45
+ masked_data = data[mask_data]
46
+ masked_index = mask_data.nonzero()[0].to_a.map {|i| index[i] }
47
+ else
48
+ masked_data, masked_index = where_in_array(mask)
49
+ masked_data = Numpy.asarray(masked_data, dtype: data.dtype)
50
+ end
51
+ Charty::Vector.new(masked_data, index: masked_index, name: name)
52
+ end
53
+
54
+ def each
55
+ return enum_for(__method__) unless block_given?
56
+
57
+ i, n = 0, data.size
58
+ while i < n
59
+ yield data[i]
60
+ i += 1
61
+ end
62
+ end
63
+
64
+ def empty?
65
+ data.size == 0
66
+ end
67
+
68
+ def boolean?
69
+ builtins = PyCall.builtins
70
+ case
71
+ when builtins.issubclass(data.dtype.type, Numpy.bool_)
72
+ true
73
+ when builtins.issubclass(data.dtype.type, Numpy.object_)
74
+ i, n = 0, data.size
75
+ while i < n
76
+ case data[i]
77
+ when nil, true, false
78
+ # do nothing
79
+ else
80
+ return false
81
+ end
82
+ i += 1
83
+ end
84
+ true
85
+ else
86
+ false
87
+ end
88
+ end
89
+
90
+ def numeric?
91
+ # TODO: Handle object array
92
+ PyCall.builtins.issubclass(data.dtype.type, PyCall.tuple([Numpy.number, Numpy.bool_]))
93
+ end
94
+
95
+ def categorical?
96
+ false
97
+ end
98
+
99
+ def categories
100
+ nil
101
+ end
102
+
103
+ def unique_values
104
+ Numpy.unique(data).to_a
105
+ end
106
+
107
+ def group_by(grouper)
108
+ case grouper
109
+ when Numpy::NDArray,
110
+ ->(x) { defined?(Pandas::Series) && x.is_a?(Pandas::Series) }
111
+ # Nothing todo
112
+ when Charty::Vector
113
+ case grouper.data
114
+ when Numpy::NDArray
115
+ grouper = grouper.data
116
+ else
117
+ grouper = Numpy.asarray(grouper.to_a)
118
+ end
119
+ else
120
+ grouper = Numpy.asarray(Array.try_convert(grouper))
121
+ end
122
+
123
+ group_keys = Numpy.unique(grouper).to_a
124
+ group_keys.map { |g|
125
+ [g, Charty::Vector.new(data[grouper == g])]
126
+ }.to_h
127
+ end
128
+
129
+ def drop_na
130
+ where_is_na = if numeric?
131
+ Numpy.isnan(data)
132
+ else
133
+ (data == nil)
134
+ end
135
+ Charty::Vector.new(data[Numpy.logical_not(where_is_na)])
136
+ end
137
+
138
+ def eq(val)
139
+ Charty::Vector.new((data == val),
140
+ index: index,
141
+ name: name)
142
+ end
143
+
144
+ def notnull
145
+ case
146
+ when PyCall.builtins.issubclass(data.dtype.type, Numpy.object_)
147
+ i, n = 0, length
148
+ notnull_data = Numpy::NDArray.new(n, dtype: :bool)
149
+ while i < n
150
+ notnull_data[i] = ! Util.missing?(data[i])
151
+ i += 1
152
+ end
153
+ else
154
+ notnull_data = Numpy.isnan(data)
155
+ end
156
+ Charty::Vector.new(notnull_data, index: index, name: name)
157
+ end
158
+
159
+ def mean
160
+ Numpy.mean(data)
161
+ end
162
+
163
+ def stdev(population: false)
164
+ Numpy.std(data, ddof: population ? 0 : 1)
165
+ end
166
+ end
167
+ end
168
+ end
@@ -0,0 +1,199 @@
1
+ module Charty
2
+ module VectorAdapters
3
+ class PandasSeriesAdapter < BaseAdapter
4
+ VectorAdapters.register(:pandas_series, self)
5
+
6
+ def self.supported?(data)
7
+ return false unless defined?(Pandas::Series)
8
+ case data
9
+ when Pandas::Series
10
+ true
11
+ else
12
+ false
13
+ end
14
+ end
15
+
16
+ def initialize(data)
17
+ @data = check_data(data)
18
+ end
19
+
20
+ attr_reader :data
21
+
22
+ def_delegator :data, :size, :length
23
+
24
+ def index
25
+ PandasIndex.new(data.index)
26
+ end
27
+
28
+ def index=(new_index)
29
+ case new_index
30
+ when PandasIndex
31
+ data.index = new_index.values
32
+ when Index
33
+ data.index = new_index.to_a
34
+ else
35
+ data.index = new_index
36
+ end
37
+ end
38
+
39
+ def_delegators :data, :name, :name=
40
+
41
+ def compare_data_equality(other)
42
+ case other
43
+ when PandasSeriesAdapter
44
+ return data.equals(other.data)
45
+ when NumpyAdapter
46
+ other = other.data
47
+ when NArrayAdapter
48
+ case other.data
49
+ when Numo::Bit
50
+ other = other.data.to_a
51
+ other.map! {|x| [false, true][x] }
52
+ else
53
+ other = other.data.to_a
54
+ end
55
+ when BaseAdapter
56
+ other = other.data.to_a
57
+ else
58
+ return false
59
+ end
60
+
61
+ data.equals(Pandas::Series.new(other, index: data.index))
62
+ end
63
+
64
+ def [](key)
65
+ case key
66
+ when Charty::Vector
67
+ where(key)
68
+ else
69
+ data[key]
70
+ end
71
+ end
72
+
73
+ def_delegators :data, :[]=, :to_a
74
+
75
+ def each
76
+ return enum_for(__method__) unless block_given?
77
+
78
+ i, n = 0, data.size
79
+ while i < n
80
+ yield data.iloc[i]
81
+ i += 1
82
+ end
83
+ end
84
+
85
+ def empty?
86
+ data.size == 0
87
+ end
88
+
89
+ def values_at(*indices)
90
+ data.take(indices).to_a
91
+ end
92
+
93
+ def where(mask)
94
+ mask = check_mask_vector(mask)
95
+ case mask.data
96
+ when Numpy::NDArray,
97
+ ->(x) { defined?(Pandas::Series) && x.is_a?(Pandas::Series) }
98
+ mask_data = Numpy.asarray(mask.data, dtype: :bool)
99
+ masked_data = data[mask_data]
100
+ masked_index = mask_data.nonzero()[0].to_a.map {|i| index[i] }
101
+ else
102
+ masked_data, masked_index = where_in_array(mask)
103
+ masked_data = Pandas::Series.new(masked_data, dtype: data.dtype)
104
+ end
105
+ Charty::Vector.new(masked_data, index: masked_index, name: name)
106
+ end
107
+
108
+ def where_in_array(mask)
109
+ mask = check_mask_vector(mask)
110
+ masked_data = []
111
+ masked_index = []
112
+ mask.each_with_index do |f, i|
113
+ case f
114
+ when true, 1
115
+ masked_data << data.iloc[i]
116
+ masked_index << index[i]
117
+ end
118
+ end
119
+ return masked_data, masked_index
120
+ end
121
+
122
+ def boolean?
123
+ case
124
+ when Pandas.api.types.is_bool_dtype(data.dtype)
125
+ true
126
+ when Pandas.api.types.is_object_dtype(data.dtype)
127
+ data.isin([nil, false, true]).all()
128
+ else
129
+ false
130
+ end
131
+ end
132
+
133
+ def numeric?
134
+ Pandas.api.types.is_numeric_dtype(data.dtype)
135
+ end
136
+
137
+ def categorical?
138
+ Pandas.api.types.is_categorical_dtype(data.dtype)
139
+ end
140
+
141
+ def categories
142
+ data.cat.categories.to_a if categorical?
143
+ end
144
+
145
+ def unique_values
146
+ data.unique.to_a
147
+ end
148
+
149
+ def group_by(grouper)
150
+ case grouper
151
+ when Pandas::Series
152
+ group_keys = grouper.unique.to_a
153
+ groups = data.groupby(grouper)
154
+ group_keys.map {|g|
155
+ [g, Charty::Vector.new(groups.get_group(g))]
156
+ }.to_h
157
+ when Charty::Vector
158
+ case grouper.adapter
159
+ when self.class
160
+ group_by(grouper.data)
161
+ else
162
+ grouper = Pandas::Series.new(grouper.to_a)
163
+ group_by(grouper)
164
+ end
165
+ else
166
+ grouper = Pandas::Series.new(Array(grouper))
167
+ group_by(grouper)
168
+ end
169
+ end
170
+
171
+ def drop_na
172
+ Charty::Vector.new(data.dropna)
173
+ end
174
+
175
+ def eq(val)
176
+ Charty::Vector.new((data == val),
177
+ index: index,
178
+ name: name)
179
+ end
180
+
181
+ def notnull
182
+ Charty::Vector.new(data.notnull, index: index, name: name)
183
+ end
184
+
185
+ def mean
186
+ data.mean()
187
+ end
188
+
189
+ def stdev(population: false)
190
+ data.std(ddof: population ? 0 : 1)
191
+ end
192
+
193
+ def percentile(q)
194
+ q = q.map {|x| x / 100.0 }
195
+ data.quantile(q)
196
+ end
197
+ end
198
+ end
199
+ end
@@ -1,5 +1,5 @@
1
1
  module Charty
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.6"
3
3
 
4
4
  module Version
5
5
  numbers, TAG = VERSION.split("-")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: charty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - youchan
@@ -10,30 +10,72 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2019-09-27 00:00:00.000000000 Z
13
+ date: 2021-06-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: bundler
16
+ name: red-colors
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: '1.16'
22
- type: :development
21
+ version: 0.3.0
22
+ type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- version: '1.16'
28
+ version: 0.3.0
29
29
  - !ruby/object:Gem::Dependency
30
- name: rake
30
+ name: red-palette
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 0.5.0
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.5.0
43
+ - !ruby/object:Gem::Dependency
44
+ name: matplotlib
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 1.2.0
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 1.2.0
57
+ - !ruby/object:Gem::Dependency
58
+ name: pandas
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 0.3.5
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 0.3.5
71
+ - !ruby/object:Gem::Dependency
72
+ name: playwright-ruby-client
31
73
  requirement: !ruby/object:Gem::Requirement
32
74
  requirements:
33
75
  - - ">="
34
76
  - !ruby/object:Gem::Version
35
77
  version: '0'
36
- type: :development
78
+ type: :runtime
37
79
  prerelease: false
38
80
  version_requirements: !ruby/object:Gem::Requirement
39
81
  requirements:
@@ -41,21 +83,21 @@ dependencies:
41
83
  - !ruby/object:Gem::Version
42
84
  version: '0'
43
85
  - !ruby/object:Gem::Dependency
44
- name: test-unit
86
+ name: bundler
45
87
  requirement: !ruby/object:Gem::Requirement
46
88
  requirements:
47
89
  - - ">="
48
90
  - !ruby/object:Gem::Version
49
- version: '0'
91
+ version: '1.16'
50
92
  type: :development
51
93
  prerelease: false
52
94
  version_requirements: !ruby/object:Gem::Requirement
53
95
  requirements:
54
96
  - - ">="
55
97
  - !ruby/object:Gem::Version
56
- version: '0'
98
+ version: '1.16'
57
99
  - !ruby/object:Gem::Dependency
58
- name: numo-narray
100
+ name: rake
59
101
  requirement: !ruby/object:Gem::Requirement
60
102
  requirements:
61
103
  - - ">="
@@ -69,7 +111,7 @@ dependencies:
69
111
  - !ruby/object:Gem::Version
70
112
  version: '0'
71
113
  - !ruby/object:Gem::Dependency
72
- name: nmatrix
114
+ name: test-unit
73
115
  requirement: !ruby/object:Gem::Requirement
74
116
  requirements:
75
117
  - - ">="
@@ -88,14 +130,14 @@ dependencies:
88
130
  requirements:
89
131
  - - ">="
90
132
  - !ruby/object:Gem::Version
91
- version: 0.0.9
133
+ version: 0.1.2
92
134
  type: :development
93
135
  prerelease: false
94
136
  version_requirements: !ruby/object:Gem::Requirement
95
137
  requirements:
96
138
  - - ">="
97
139
  - !ruby/object:Gem::Version
98
- version: 0.0.9
140
+ version: 0.1.2
99
141
  - !ruby/object:Gem::Dependency
100
142
  name: daru
101
143
  requirement: !ruby/object:Gem::Requirement
@@ -111,7 +153,7 @@ dependencies:
111
153
  - !ruby/object:Gem::Version
112
154
  version: '0'
113
155
  - !ruby/object:Gem::Dependency
114
- name: activerecord
156
+ name: matrix
115
157
  requirement: !ruby/object:Gem::Requirement
116
158
  requirements:
117
159
  - - ">="
@@ -125,7 +167,7 @@ dependencies:
125
167
  - !ruby/object:Gem::Version
126
168
  version: '0'
127
169
  - !ruby/object:Gem::Dependency
128
- name: sqlite3
170
+ name: activerecord
129
171
  requirement: !ruby/object:Gem::Requirement
130
172
  requirements:
131
173
  - - ">="
@@ -139,7 +181,7 @@ dependencies:
139
181
  - !ruby/object:Gem::Version
140
182
  version: '0'
141
183
  - !ruby/object:Gem::Dependency
142
- name: matplotlib
184
+ name: sqlite3
143
185
  requirement: !ruby/object:Gem::Requirement
144
186
  requirements:
145
187
  - - ">="
@@ -152,6 +194,20 @@ dependencies:
152
194
  - - ">="
153
195
  - !ruby/object:Gem::Version
154
196
  version: '0'
197
+ - !ruby/object:Gem::Dependency
198
+ name: iruby
199
+ requirement: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ">="
202
+ - !ruby/object:Gem::Version
203
+ version: 0.7.0
204
+ type: :development
205
+ prerelease: false
206
+ version_requirements: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: 0.7.0
155
211
  description: Visualizing your data in a simple way.
156
212
  email:
157
213
  - youchan01@gmail.com
@@ -161,8 +217,10 @@ executables: []
161
217
  extensions: []
162
218
  extra_rdoc_files: []
163
219
  files:
220
+ - ".github/workflows/ci.yml"
221
+ - ".github/workflows/nmatrix.yml"
222
+ - ".github/workflows/pycall.yml"
164
223
  - ".gitignore"
165
- - ".travis.yml"
166
224
  - Dockerfile.dev
167
225
  - Gemfile
168
226
  - LICENSE
@@ -177,7 +235,9 @@ files:
177
235
  - examples/daru.ipynb
178
236
  - examples/iris_dataset.ipynb
179
237
  - examples/nmatrix.ipynb
180
- - examples/numo-narray.ipynb
238
+ - examples/numo_narray.ipynb
239
+ - examples/palette.rb
240
+ - examples/sample.png
181
241
  - examples/sample_bokeh.ipynb
182
242
  - examples/sample_google_chart.ipynb
183
243
  - examples/sample_gruff.ipynb
@@ -200,6 +260,7 @@ files:
200
260
  - examples/sample_images/curve_with_function_pyplot.png
201
261
  - examples/sample_images/curve_with_function_rubyplot.png
202
262
  - examples/sample_images/error_bar_pyplot.png
263
+ - examples/sample_images/hist_gruff.png
203
264
  - examples/sample_images/hist_pyplot.png
204
265
  - examples/sample_images/scatter_bokeh.html
205
266
  - examples/sample_images/scatter_gruff.png
@@ -210,25 +271,63 @@ files:
210
271
  - examples/sample_pyplot.ipynb
211
272
  - examples/sample_rubyplot.ipynb
212
273
  - images/design_concept.png
274
+ - images/penguins_body_mass_g_flipper_length_mm_scatter_plot.png
275
+ - images/penguins_body_mass_g_flipper_length_mm_species_scatter_plot.png
276
+ - images/penguins_body_mass_g_flipper_length_mm_species_sex_scatter_plot.png
277
+ - images/penguins_species_body_mass_g_bar_plot_h.png
278
+ - images/penguins_species_body_mass_g_bar_plot_v.png
279
+ - images/penguins_species_body_mass_g_box_plot_h.png
280
+ - images/penguins_species_body_mass_g_box_plot_v.png
281
+ - images/penguins_species_body_mass_g_sex_bar_plot_v.png
282
+ - images/penguins_species_body_mass_g_sex_box_plot_v.png
213
283
  - lib/charty.rb
284
+ - lib/charty/backend_methods.rb
214
285
  - lib/charty/backends.rb
215
286
  - lib/charty/backends/bokeh.rb
216
- - lib/charty/backends/google_chart.rb
287
+ - lib/charty/backends/google_charts.rb
217
288
  - lib/charty/backends/gruff.rb
218
289
  - lib/charty/backends/plotly.rb
219
290
  - lib/charty/backends/pyplot.rb
220
291
  - lib/charty/backends/rubyplot.rb
292
+ - lib/charty/backends/unicode_plot.rb
293
+ - lib/charty/dash_pattern_generator.rb
294
+ - lib/charty/index.rb
221
295
  - lib/charty/layout.rb
222
296
  - lib/charty/linspace.rb
297
+ - lib/charty/plot_methods.rb
223
298
  - lib/charty/plotter.rb
299
+ - lib/charty/plotters.rb
300
+ - lib/charty/plotters/abstract_plotter.rb
301
+ - lib/charty/plotters/bar_plotter.rb
302
+ - lib/charty/plotters/box_plotter.rb
303
+ - lib/charty/plotters/categorical_plotter.rb
304
+ - lib/charty/plotters/count_plotter.rb
305
+ - lib/charty/plotters/estimation_support.rb
306
+ - lib/charty/plotters/line_plotter.rb
307
+ - lib/charty/plotters/random_support.rb
308
+ - lib/charty/plotters/relational_plotter.rb
309
+ - lib/charty/plotters/scatter_plotter.rb
310
+ - lib/charty/plotters/vector_plotter.rb
311
+ - lib/charty/statistics.rb
224
312
  - lib/charty/table.rb
225
313
  - lib/charty/table_adapters.rb
226
314
  - lib/charty/table_adapters/active_record_adapter.rb
315
+ - lib/charty/table_adapters/base_adapter.rb
227
316
  - lib/charty/table_adapters/daru_adapter.rb
228
317
  - lib/charty/table_adapters/datasets_adapter.rb
229
318
  - lib/charty/table_adapters/hash_adapter.rb
230
319
  - lib/charty/table_adapters/narray_adapter.rb
231
320
  - lib/charty/table_adapters/nmatrix_adapter.rb
321
+ - lib/charty/table_adapters/pandas_adapter.rb
322
+ - lib/charty/util.rb
323
+ - lib/charty/vector.rb
324
+ - lib/charty/vector_adapters.rb
325
+ - lib/charty/vector_adapters/array_adapter.rb
326
+ - lib/charty/vector_adapters/daru_adapter.rb
327
+ - lib/charty/vector_adapters/narray_adapter.rb
328
+ - lib/charty/vector_adapters/nmatrix_adapter.rb
329
+ - lib/charty/vector_adapters/numpy_adapter.rb
330
+ - lib/charty/vector_adapters/pandas_adapter.rb
232
331
  - lib/charty/version.rb
233
332
  homepage: https://github.com/red-data-tools/charty
234
333
  licenses:
@@ -249,7 +348,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
249
348
  - !ruby/object:Gem::Version
250
349
  version: '0'
251
350
  requirements: []
252
- rubygems_version: 3.0.3
351
+ rubygems_version: 3.2.3
253
352
  signing_key:
254
353
  specification_version: 4
255
354
  summary: Visualizing your data in a simple way.