gruff 0.16.0-java → 0.19.0-java

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/.devcontainer/devcontainer.json +26 -0
  3. data/.github/workflows/ci.yml +9 -6
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +0 -6
  6. data/CHANGELOG.md +32 -0
  7. data/README.md +7 -3
  8. data/gruff.gemspec +2 -4
  9. data/lib/gruff/area.rb +3 -1
  10. data/lib/gruff/bar.rb +26 -24
  11. data/lib/gruff/base.rb +214 -93
  12. data/lib/gruff/bezier.rb +7 -8
  13. data/lib/gruff/{box_plot.rb → box.rb} +12 -6
  14. data/lib/gruff/bubble.rb +99 -0
  15. data/lib/gruff/candlestick.rb +22 -14
  16. data/lib/gruff/dot.rb +5 -6
  17. data/lib/gruff/helper/bar_conversion.rb +1 -5
  18. data/lib/gruff/helper/bar_mixin.rb +25 -0
  19. data/lib/gruff/helper/bar_value_label.rb +0 -22
  20. data/lib/gruff/helper/stacked_mixin.rb +16 -0
  21. data/lib/gruff/histogram.rb +8 -5
  22. data/lib/gruff/line.rb +47 -27
  23. data/lib/gruff/mini/bar.rb +1 -1
  24. data/lib/gruff/mini/legend.rb +13 -9
  25. data/lib/gruff/mini/pie.rb +2 -2
  26. data/lib/gruff/net.rb +26 -13
  27. data/lib/gruff/pie.rb +7 -2
  28. data/lib/gruff/renderer/bezier.rb +1 -1
  29. data/lib/gruff/renderer/circle.rb +5 -3
  30. data/lib/gruff/renderer/dash_line.rb +1 -1
  31. data/lib/gruff/renderer/dot.rb +26 -15
  32. data/lib/gruff/renderer/line.rb +1 -1
  33. data/lib/gruff/renderer/polygon.rb +1 -1
  34. data/lib/gruff/renderer/polyline.rb +4 -2
  35. data/lib/gruff/renderer/renderer.rb +0 -4
  36. data/lib/gruff/renderer/text.rb +7 -1
  37. data/lib/gruff/scatter.rb +52 -55
  38. data/lib/gruff/side_bar.rb +28 -24
  39. data/lib/gruff/side_stacked_bar.rb +36 -41
  40. data/lib/gruff/spider.rb +7 -2
  41. data/lib/gruff/stacked_area.rb +8 -3
  42. data/lib/gruff/stacked_bar.rb +48 -40
  43. data/lib/gruff/store/xy_data.rb +8 -9
  44. data/lib/gruff/store/xy_pointsizes_data.rb +60 -0
  45. data/lib/gruff/version.rb +1 -1
  46. data/lib/gruff.rb +3 -4
  47. metadata +9 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 03a1c8455536dad68e5d325a51416807d32595aee6e4be75ef214c1b00e0df06
4
- data.tar.gz: fa90b50b714c8464f6b82260f3ec9598edb57cf4b03ffcb8b451083e9bd1a307
3
+ metadata.gz: fa39c23fc44be66931c2b7f05ad88021b82a8a900ce7894eb962ddaf9ba895f3
4
+ data.tar.gz: c1bbf2d54c4ad2760e66352626fc07b7b3f89ee4c8d9edcaa87270c173572c4d
5
5
  SHA512:
6
- metadata.gz: 180bb66623c99daf3b89febea4059ed0d1f655b5fdee1da046e78174d0ea2efdf26e3fbc1de8bc18765cf9ab5cbe8bc52cb22fd01deeb25c377210340506bcfb
7
- data.tar.gz: 05e9d6c86ee5ccee8bafc37fe1843f041f2a91f82aa7bbfb77c11fd05c9d64b2192d4b56dfaff0bc3f5d5db925e13ba057179843e0265873d2e1c7659582235d
6
+ metadata.gz: d82e25b5eefc2e5c8ead58a5e3968b5df4952066032d5fa7c80dd69516b726644c76e91d7e136389cc5c0a6899291b2ac6a4a57548116fd8c53ced4bf347d3b8
7
+ data.tar.gz: 0d9e8d013c78269a606c85fbf3313302dd9048b37c3fd3eeae55894823a1754fc389073aa4381a4598511fbb31bdc1c2d56b565bc1bc2fac922b3a38261540e8
@@ -0,0 +1,26 @@
1
+ // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
2
+ // https://github.com/microsoft/vscode-dev-containers/tree/v0.245.0/containers/docker-existing-dockerfile
3
+ {
4
+ "name": "Existing Dockerfile",
5
+
6
+ // Sets the run context to one level up instead of the .devcontainer folder.
7
+ "context": "..",
8
+
9
+ // Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename.
10
+ "dockerFile": "../Dockerfile"
11
+
12
+ // Use 'forwardPorts' to make a list of ports inside the container available locally.
13
+ // "forwardPorts": [],
14
+
15
+ // Uncomment the next line to run commands after the container is created - for example installing curl.
16
+ // "postCreateCommand": "apt-get update && apt-get install -y curl",
17
+
18
+ // Uncomment when using a ptrace-based debugger like C++, Go, and Rust
19
+ // "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ],
20
+
21
+ // Uncomment to use the Docker CLI from inside the container. See https://aka.ms/vscode-remote/samples/docker-from-docker.
22
+ // "mounts": [ "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind" ],
23
+
24
+ // Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root.
25
+ // "remoteUser": "vscode"
26
+ }
@@ -6,9 +6,12 @@ on:
6
6
  pull_request:
7
7
  branches: [ master ]
8
8
 
9
+ permissions:
10
+ contents: read
11
+
9
12
  jobs:
10
13
  lint:
11
- runs-on: ubuntu-20.04
14
+ runs-on: ubuntu-22.04
12
15
  timeout-minutes: 20
13
16
  name: Lint
14
17
  steps:
@@ -23,18 +26,18 @@ jobs:
23
26
  - name: Install dependencies
24
27
  run: bundle install --path=vendor/bundle --jobs 4 --retry 3
25
28
  - name: RuboCop Problem Matchers
26
- uses: r7kamura/rubocop-problem-matchers-action@v1.1.0
29
+ uses: r7kamura/rubocop-problem-matchers-action@v1
27
30
  - name: Run tests
28
31
  run: bundle exec rubocop
29
32
 
30
33
  test-ruby:
31
- runs-on: ubuntu-20.04
34
+ runs-on: ubuntu-22.04
32
35
  timeout-minutes: 20
33
36
  strategy:
34
37
  matrix:
35
38
  ruby-version: ['2.5', '2.6', '2.7', '3.0', '3.1']
36
39
  imagemagick-version:
37
- - { full: 7.1.0-31, major-minor: '7.0' }
40
+ - { full: 7.1.0-45, major-minor: '7.0' }
38
41
  name: Ruby ${{ matrix.ruby-version }}
39
42
  steps:
40
43
  - uses: actions/checkout@v3
@@ -60,11 +63,11 @@ jobs:
60
63
  run: bundle exec rake
61
64
 
62
65
  test-jruby:
63
- runs-on: ubuntu-20.04
66
+ runs-on: ubuntu-22.04
64
67
  timeout-minutes: 20
65
68
  strategy:
66
69
  matrix:
67
- ruby-version: ['9.2.20.1', '9.3.4.0']
70
+ ruby-version: ['9.2.21.0', '9.3.7.0']
68
71
  name: JRuby ${{ matrix.ruby-version }}
69
72
  steps:
70
73
  - uses: actions/checkout@v3
data/.gitignore CHANGED
@@ -1,6 +1,7 @@
1
1
  *~
2
2
  /.idea/
3
3
  /pkg/
4
+ /doc/
4
5
  /coverage/
5
6
  /vendor/
6
7
  /test/output/
data/.rubocop.yml CHANGED
@@ -48,9 +48,6 @@ Lint/FloatComparison:
48
48
  Lint/NumberConversion:
49
49
  Enabled: false
50
50
 
51
- Naming/MemoizedInstanceVariableName:
52
- Enabled: false
53
-
54
51
  Naming/MethodParameterName:
55
52
  Enabled: false
56
53
 
@@ -122,6 +119,3 @@ Style/StructInheritance:
122
119
 
123
120
  Performance/ChainArrayAllocation:
124
121
  Enabled: false
125
-
126
- Performance/StringReplacement:
127
- Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.19.0
4
+ - Draw the graph starting from zero point by default (#609)
5
+ - Improve joints in Gruff::Net using polyline method (#608)
6
+ - Improve joints in Gruff::Line using polyline method (#607)
7
+ - Adjust default font size in Gruff::Mini::{Bar, Pie}
8
+
9
+ ## 0.18.0
10
+ - Add Gruff::Bubble (#604)
11
+ - Rename Gruff::BoxPlot to Gruff::Box (#603)
12
+ - Mark Gruff::Scatter#disable_significant_rounding_x_axis= as deprecated (#602)
13
+ - Mark Gruff::Scatter#x_label_margin= as deprecated (#601)
14
+ - Mark Gruff::Scatter#use_vertical_x_labels= as deprecated (#600)
15
+
16
+ ## 0.17.0
17
+ - Add Gruff::Base#label_rotation= method to rotate bottom label (#599)
18
+ - Mark #label_stagger_height= as deprecated (#598)
19
+ - Fixed truncation of long legends in mini graph (#597)
20
+ - Fix error when input empty data in Gruff::Bezier (#596)
21
+ - Fix error when input empty data in Gruff::StackedArea (#595)
22
+ - Fix error when input empty data in Gruff::BoxPlot (#594)
23
+ - Fix error when input empty data in Gruff::Spider (#593)
24
+ - Fix error when input empty data in Gruff::Histogram (#592)
25
+ - Fix error when input empty data in Gruff::Area (#591)
26
+ - Stop adjusting the square radius in Gruff::Line (#589)
27
+ - Add diamond dot stype in Gruff::Line (#588)
28
+ - Allow title to be set as an array (#587)
29
+ - Allow labels to be set as an array corresponding to the data values (#586)
30
+ - Fixed a bug that breaks the colors in the theme when using the add_color method (#583)
31
+ - Ensure to raise an exception if use sort feature in Candlestick
32
+ - Fix column_count in BoxPlot/Candlestick (#581)
33
+ - Fix left/right graph margin (#579)
34
+
3
35
  ## 0.16.0
4
36
  - Add Candlestick (#575)
5
37
  - Add BoxPlot (#574)
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Gruff Graphs
2
2
 
3
- [![Build Status](https://travis-ci.org/topfunky/gruff.svg?branch=master)](https://travis-ci.org/topfunky/gruff)
3
+ [![CI](https://github.com/topfunky/gruff/actions/workflows/ci.yml/badge.svg)](https://github.com/topfunky/gruff/actions/workflows/ci.yml)
4
4
  [![Gem Version](https://badge.fury.io/rb/gruff.svg)](https://badge.fury.io/rb/gruff)
5
5
 
6
6
  A library for making beautiful graphs.
@@ -126,14 +126,18 @@ In progress!
126
126
 
127
127
  ![Histogram chart](https://raw.github.com/topfunky/gruff/master/test/expected/histogram.png)
128
128
 
129
- ### Box plot
129
+ ### Box chart
130
130
 
131
- ![Box plot](https://raw.github.com/topfunky/gruff/master/test/expected/box_plot.png)
131
+ ![Box chart](https://raw.github.com/topfunky/gruff/master/test/expected/box.png)
132
132
 
133
133
  ### Candlestick
134
134
 
135
135
  ![Candlestick](https://raw.github.com/topfunky/gruff/master/test/expected/candlestick.png)
136
136
 
137
+ ### Bubble chart
138
+
139
+ ![Bubble chart](https://raw.github.com/topfunky/gruff/master/test/expected/bubble.png)
140
+
137
141
  ## Documentation
138
142
 
139
143
  http://www.rubydoc.info/github/topfunky/gruff/frames
data/gruff.gemspec CHANGED
@@ -16,16 +16,14 @@ Gem::Specification.new do |s|
16
16
  s.require_paths = %w[lib]
17
17
  s.summary = 'Beautiful graphs for one or multiple datasets.'
18
18
  s.license = 'MIT'
19
- s.test_files = s.files.grep(%r{^(test|spec|features)/})
20
19
  s.executables = s.files.grep(%r{^bin/}).map { |f| File.basename(f) }
21
- s.specification_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
22
20
 
23
21
  if defined? JRUBY_VERSION
24
22
  s.platform = 'java'
25
23
  s.add_dependency 'rmagick4j'
26
24
  else
27
25
  s.add_dependency 'rmagick', '>= 4.2'
28
- s.add_development_dependency 'rubocop', '~> 1.27.0'
26
+ s.add_development_dependency 'rubocop', '~> 1.28.2'
29
27
  s.add_development_dependency 'rubocop-performance', '~> 1.13.3'
30
28
  s.add_development_dependency 'rubocop-rake', '~> 0.6.0'
31
29
  end
@@ -35,7 +33,7 @@ Gem::Specification.new do |s|
35
33
  s.add_development_dependency 'rake'
36
34
  s.add_development_dependency 'minitest-reporters'
37
35
  s.add_development_dependency 'simplecov'
38
- s.add_development_dependency 'yard', '~> 0.9.25'
36
+ s.add_development_dependency 'yard', '~> 0.9.28'
39
37
 
40
38
  s.metadata['rubygems_mfa_required'] = 'true'
41
39
  end
data/lib/gruff/area.rb CHANGED
@@ -30,9 +30,11 @@ private
30
30
  end
31
31
 
32
32
  def draw_graph
33
- x_increment = @graph_width / (column_count - 1)
33
+ x_increment = (@graph_width / (column_count - 1)).to_f
34
34
 
35
35
  store.norm_data.each do |data_row|
36
+ next if data_row.points.empty?
37
+
36
38
  poly_points = []
37
39
 
38
40
  data_row.points.each_with_index do |data_point, index|
data/lib/gruff/bar.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'helper/bar_mixin'
4
+
3
5
  #
4
6
  # Gruff::Bar provide a bar graph that presents categorical data
5
7
  # with rectangular bars.
@@ -16,6 +18,8 @@
16
18
  # g.write('bar.png')
17
19
  #
18
20
  class Gruff::Bar < Gruff::Base
21
+ include BarMixin
22
+
19
23
  # Spacing factor applied between bars.
20
24
  attr_writer :bar_spacing
21
25
 
@@ -86,8 +90,6 @@ private
86
90
  return if @hide_line_markers
87
91
 
88
92
  if @show_labels_for_bar_values
89
- proc_text_metrics = ->(text) { text_metrics(@marker_font, text) }
90
-
91
93
  if maximum_value >= 0
92
94
  _, metrics = Gruff::BarValueLabel.metrics(maximum_value, @label_formatting, proc_text_metrics)
93
95
  @graph_top += metrics.height
@@ -112,36 +114,32 @@ private
112
114
  minimum_value: minimum_value, maximum_value: maximum_value, spread: @spread
113
115
  )
114
116
 
115
- proc_text_metrics = ->(text) { text_metrics(@marker_font, text) }
117
+ group_left_x = @graph_left
116
118
 
117
- # iterate over all normalised data
118
- store.norm_data.each_with_index do |data_row, row_index|
119
- data_row.points.each_with_index do |data_point, point_index|
120
- group_spacing = @group_spacing * @scale * point_index
121
-
122
- # Use incremented x and scaled y
123
- # x
124
- left_x = @graph_left + (bar_width * (row_index + point_index + ((store.length - 1) * point_index))) + padding + group_spacing
119
+ normalized_group_bars.each_with_index do |group_bars, group_index|
120
+ right_x = 0
121
+ group_bars.each_with_index do |bar, index|
122
+ left_x = group_left_x + (bar_width * index) + padding
125
123
  right_x = left_x + (bar_width * @bar_spacing)
126
- # y
127
- left_y, right_y = conversion.get_top_bottom_scaled(data_point)
128
-
129
- # create new bar
130
- rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: data_row.color)
131
- rect_renderer.render(left_x, left_y - AXIS_MARGIN, right_x, right_y - AXIS_MARGIN)
132
124
 
133
- # Calculate center based on bar_width and current row
134
- label_center = @graph_left + group_spacing + (store.length * bar_width * point_index) + (store.length * bar_width / 2.0)
125
+ top_y, bottom_y = conversion.get_top_bottom_scaled(bar.point)
126
+ if bar.point != 0
127
+ rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: bar.color)
128
+ rect_renderer.render(left_x, bottom_y - AXIS_MARGIN, right_x, top_y)
129
+ end
135
130
 
136
- # Subtract half a bar width to center left if requested
137
- draw_label(label_center, point_index)
138
- if @show_labels_for_bar_values
139
- bar_value_label = Gruff::BarValueLabel::Bar.new([left_x, left_y, right_x, right_y], store.data[row_index].points[point_index])
131
+ if @show_labels_for_bar_values && bar.value
132
+ bar_value_label = Gruff::BarValueLabel::Bar.new([left_x, top_y, right_x, bottom_y], bar.value)
140
133
  bar_value_label.prepare_rendering(@label_formatting, proc_text_metrics) do |x, y, text, _text_width, text_height|
141
134
  draw_value_label(bar_width * @bar_spacing, text_height, x, y, text)
142
135
  end
143
136
  end
144
137
  end
138
+
139
+ label_center = group_left_x + ((right_x - group_left_x) / 2.0)
140
+ draw_label(label_center, group_index)
141
+
142
+ group_left_x = right_x + padding + @group_spacing
145
143
  end
146
144
 
147
145
  # Draw the last label if requested
@@ -149,6 +147,10 @@ private
149
147
  end
150
148
 
151
149
  def calculate_spacing
152
- @scale * @group_spacing * (column_count - 1)
150
+ @group_spacing * (column_count - 1)
151
+ end
152
+
153
+ def proc_text_metrics
154
+ ->(text) { text_metrics(@marker_font, text) }
153
155
  end
154
156
  end