newsworthycharts 1.61.0__py3-none-any.whl → 1.61.2__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.
@@ -1,4 +1,4 @@
1
- __version__ = "1.61.0"
1
+ __version__ = "1.61.2"
2
2
 
3
3
  from .chart import Chart
4
4
  from .choroplethmap import ChoroplethMap
newsworthycharts/chart.py CHANGED
@@ -667,7 +667,7 @@ class Chart(object):
667
667
  'Creator': f"NWCharts {__version__}",
668
668
  }
669
669
  """
670
- self._fig.savefig(buf, **args)
670
+ self._fig.savefig(buf, **args) # , bbox_inches="tight")
671
671
  buf.seek(0)
672
672
  self._storage.save(key, buf, img_format, storage_options)
673
673
 
@@ -716,7 +716,7 @@ class Chart(object):
716
716
  'Creator': f"NWCharts {__version__}",
717
717
  }
718
718
  """
719
- self._fig.savefig(buf, **args)
719
+ self._fig.savefig(buf, **args) # bbox_inches="tight")
720
720
  buf.seek(0)
721
721
  self._storage.save(key, buf, file_format, storage_options)
722
722
 
@@ -46,7 +46,7 @@ class SerialChart(Chart):
46
46
  self.colors = None
47
47
 
48
48
  # Optional: where to place series label
49
- self.label_placement = "legend" # legend|inline|outside
49
+ self.label_placement = "legend" # legend|inline|outside|line
50
50
 
51
51
  # Optional: annotate each point with a value label
52
52
  self.value_labels = False
@@ -194,6 +194,8 @@ class SerialChart(Chart):
194
194
  line_label_elems = []
195
195
  value_label_elems = []
196
196
 
197
+ bar_elems = []
198
+
197
199
  for i, serie in enumerate(series):
198
200
 
199
201
  values = np.array(serie_values[i], dtype=float)
@@ -352,13 +354,13 @@ class SerialChart(Chart):
352
354
  width=bar_widths,
353
355
  zorder=zo,
354
356
  )
355
- if len(dates) < 100:
356
- # FIXME: This complements the bar_width hack above
357
- # For some charts edges give better results (n_bars ~50?)
358
- # This should be better tested, and implemented in a
359
- # more robust way
360
- bar_kwargs["edgecolor"] = "white"
361
- bar_kwargs["linewidth"] = 1
357
+ # if len(dates) < 100:
358
+ # # FIXME: This complements the bar_width hack above
359
+ # # For some charts edges give better results (n_bars ~50?)
360
+ # # This should be better tested, and implemented in a
361
+ # # more robust way
362
+ # bar_kwargs["edgecolor"] = "white"
363
+ # bar_kwargs["linewidth"] = 0 # 1
362
364
 
363
365
  if is_stacked and i > 0:
364
366
  if self.baseline != 0:
@@ -378,6 +380,7 @@ class SerialChart(Chart):
378
380
  bar_kwargs["bottom"] = self.baseline
379
381
 
380
382
  bars = self.ax.bar(dates, values, **bar_kwargs)
383
+ bar_elems.append(bars)
381
384
 
382
385
  if len(self.labels) > i:
383
386
  bars.set_label(self.labels[i])
@@ -440,6 +443,16 @@ class SerialChart(Chart):
440
443
  continue
441
444
  self._annotate_point(value_label, xy, direction=dir)
442
445
 
446
+ # Add some padding around bars, but only left/right to avoid lines in stacked bars
447
+ if len(dates) < 100:
448
+ for bars in bar_elems:
449
+ # for container in self.ax.containers:
450
+ for bar in bars:
451
+ x, y = bar.get_xy()
452
+ w, h = bar.get_width(), bar.get_height()
453
+ self.ax.plot([x + w, x + w], [y, y + h], color='white', lw=1, zorder=zo + 1)
454
+ self.ax.plot([x, x], [y, y + h], color='white', lw=1, zorder=zo + 1)
455
+
443
456
  # Add background highlights
444
457
  for (x0, x1) in self.highlighted_x_ranges:
445
458
  x0 = to_date(x0)
@@ -549,7 +562,12 @@ class SerialChart(Chart):
549
562
  _ = self.ax.legend(loc="best")
550
563
  _.set(zorder=20)
551
564
  elif self.label_placement == "outside":
552
- self.ax.legend(bbox_to_anchor=(0, 1, 1, 0), loc="lower right")
565
+ # mpl 3.7 has loc=outside, but it will lead to overlaps with titles
566
+ # also, has to be set on the figure, causing image size to change
567
+ _ = self.ax.legend(bbox_to_anchor=(1.04, 1), loc="upper left")
568
+ # self._fig.subplots_adjust(right=0.8)
569
+ # self._fig.tight_layout()
570
+ _.set(zorder=20)
553
571
  elif self.label_placement == "inline":
554
572
  labelLines(self.ax.get_lines(), align=False, zorder=13, outline_width=4, fontweight="bold")
555
573
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: newsworthycharts
3
- Version: 1.61.0
3
+ Version: 1.61.2
4
4
  Summary: Matplotlib wrapper to create charts and publish them on Amazon S3
5
5
  Home-page: https://github.com/jplusplus/newsworthycharts
6
- Download-URL: https://github.com/jplusplus/newsworthycharts/archive/1.61.0.tar.gz
6
+ Download-URL: https://github.com/jplusplus/newsworthycharts/archive/1.61.2.tar.gz
7
7
  Author: Jens Finnäs and Leo Wallentin, J++ Stockholm
8
8
  Author-email: stockholm@jplusplus.org
9
9
  License: MIT
@@ -150,6 +150,7 @@ These settings are available for all chart types:
150
150
  - decimals = None # None means automatically chose the best number
151
151
  - logo = None # Path to image that will be embedded in the caption area. Can also be set though a style property
152
152
  - color_fn = None # Custom coloring function
153
+ - legend_title = None # Title for the legend
153
154
 
154
155
  **SerialChart**
155
156
 
@@ -167,7 +168,7 @@ These settings are available for all chart types:
167
168
  - value_labels = False # Print out values at points on line?
168
169
  - highlighted_x_ranges = [] # List of tuples with start and end of highlighted areas
169
170
  - x_range_labels = [] # List of labels for highlighted areas
170
- - label_placement = "legend" # legend|inline|outside
171
+ - label_placement = "legend" # legend|inline|outside|line
171
172
  - color_labels = None # A dictionary of label/color, to override style colors
172
173
 
173
174
  **SeasonalChart**
@@ -252,6 +253,14 @@ Roadmap
252
253
  Changelog
253
254
  ---------
254
255
 
256
+ - 1.61.2
257
+
258
+ - Remove horizontal line between bars in stacked bar charts
259
+
260
+ - 1.61.1
261
+
262
+ - Improved handling of label_placement = "outside" in SerialChart
263
+
255
264
  - 1.61.0
256
265
 
257
266
  - Added non-binned color ramp support to ChoroplethMap, with `use_bins=False`
@@ -1,14 +1,14 @@
1
- newsworthycharts/__init__.py,sha256=jnjdyPdjfQOT6rFgjHDof_FP6br3JVLWzdGN66o7x3c,1160
1
+ newsworthycharts/__init__.py,sha256=YXG2imrthc_eFdVmTFvxb8cSu1CP7I0voNa6Ify1tPU,1160
2
2
  newsworthycharts/bubblemap.py,sha256=nkocWmpiFgfjEuJGAsthjY5X7Q56jXWsZHUGXw4PwgE,2587
3
3
  newsworthycharts/categoricalchart.py,sha256=LwOZ3VbNy9vzvoK0s77AkbfMt4CXVDSAhnsnBInUIrE,14764
4
- newsworthycharts/chart.py,sha256=VXEJe_g_KahyiUXqXnM3vDS7SQoW1Ppktcj13-A2_oc,30631
4
+ newsworthycharts/chart.py,sha256=bCUkNKjFfuGRN6_VRQ-yCHla5LIMZ9H9a16upWbeWmY,30681
5
5
  newsworthycharts/choroplethmap.py,sha256=bCLf4kcchp1C2djg5AxcOM8BdbaMj0xg7UHrZsDafhI,8013
6
6
  newsworthycharts/datawrapper.py,sha256=RRkAVTpfP4updKxUIBaSmKuBi2RUVPaBRF8HDQhlGGA,11250
7
7
  newsworthycharts/map.py,sha256=c409jEO4L8Yr780sJRC0RchR44roAlgOUDAkuk1SfRg,6057
8
8
  newsworthycharts/rangeplot.py,sha256=NE1W9TnmlpK6T3RvBJOU3nd73EXqkj17OY9i5zlw_cQ,8366
9
9
  newsworthycharts/scatterplot.py,sha256=6iaMoiZx__Gc-2Hcdw-8Ga5dSonrFo3oexKNmSFuir4,4959
10
10
  newsworthycharts/seasonalchart.py,sha256=rr55yqJUkaYDR9Ik98jes6574oY1U8t8LwoLE3gClW4,1967
11
- newsworthycharts/serialchart.py,sha256=QjXfPepHVUpxeQvXP9S8BnZwUPY2mSc-5RvGIjZvZhU,26386
11
+ newsworthycharts/serialchart.py,sha256=Nk1ctfzuySA7b0O6BpgRCWkpwNrJrRx5FcSS1xA10A0,27295
12
12
  newsworthycharts/storage.py,sha256=myERhlpvXyExXxUByBq9eW1bWkCyfH9SwTZbsWSyy3Q,4301
13
13
  newsworthycharts/stripechart.py,sha256=9B6PX2MyLuKNQ8W0OGdKbP0-U32kju0K_NHHwwz_J68,1547
14
14
  newsworthycharts/custom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -28,8 +28,8 @@ newsworthycharts/rc/newsworthy,sha256=X0btLNrmk2DRrfOsKj_WCSIgeD6btacEN2tRF_B4m8
28
28
  newsworthycharts/translations/datawrapper_regions.csv,sha256=fzZcQRX6RFMlNNP8mpgfYNdR3Y0QAlQxDXk8FXTaWWI,9214
29
29
  newsworthycharts/translations/regions.py,sha256=Nv1McQjggD4S3JRu82rDMTG3pqUVR13E5-FBpSYbm98,239
30
30
  newsworthycharts/translations/se_municipalities.csv,sha256=br_mm-IvzQtj_W55_ATREhJ97jWnCweBFlDAVY2EBxA,7098
31
- newsworthycharts-1.61.0.dist-info/LICENSE.txt,sha256=Sq6kGICrehbhC_FolNdXf0djKjTpv3YqjFCIYsxdQN4,1069
32
- newsworthycharts-1.61.0.dist-info/METADATA,sha256=gyom0iFYdCZuYaLwa24Arkma11A1Qn5H0DdrZhVJkz0,28560
33
- newsworthycharts-1.61.0.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
34
- newsworthycharts-1.61.0.dist-info/top_level.txt,sha256=dn_kzIj8UgUCMsh1PHdVEQJHVGSsN7Z8YJF-8xXa8n0,17
35
- newsworthycharts-1.61.0.dist-info/RECORD,,
31
+ newsworthycharts-1.61.2.dist-info/LICENSE.txt,sha256=Sq6kGICrehbhC_FolNdXf0djKjTpv3YqjFCIYsxdQN4,1069
32
+ newsworthycharts-1.61.2.dist-info/METADATA,sha256=Us2_7v3jdscS_9Iz4h2rhwj-t22fp5QS73DP74U4heU,28763
33
+ newsworthycharts-1.61.2.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
34
+ newsworthycharts-1.61.2.dist-info/top_level.txt,sha256=dn_kzIj8UgUCMsh1PHdVEQJHVGSsN7Z8YJF-8xXa8n0,17
35
+ newsworthycharts-1.61.2.dist-info/RECORD,,