newsworthycharts 1.74.2__tar.gz → 1.76.0__tar.gz

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 (52) hide show
  1. {newsworthycharts-1.74.2/newsworthycharts.egg-info → newsworthycharts-1.76.0}/PKG-INFO +19 -6
  2. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/README.rst +13 -0
  3. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/__init__.py +1 -1
  4. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/choroplethmap.py +13 -9
  5. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/lib/locator.py +3 -3
  6. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/map.py +1 -0
  7. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/serialchart.py +1 -1
  8. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0/newsworthycharts.egg-info}/PKG-INFO +19 -6
  9. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts.egg-info/requires.txt +3 -3
  10. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/setup.py +4 -4
  11. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/LICENSE.txt +0 -0
  12. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/MANIFEST.in +0 -0
  13. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/bubblemap.py +0 -0
  14. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/categoricalchart.py +0 -0
  15. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/chart.py +0 -0
  16. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/custom/__init__.py +0 -0
  17. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/custom/climate_cars.py +0 -0
  18. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/datawrapper.py +0 -0
  19. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/lib/__init__.py +0 -0
  20. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/lib/color_fn.py +0 -0
  21. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/lib/colors.py +0 -0
  22. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/lib/datalist.py +0 -0
  23. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/lib/formatter.py +0 -0
  24. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/lib/geography.py +0 -0
  25. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/lib/mimetypes.py +0 -0
  26. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/lib/utils.py +0 -0
  27. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/maps/se-4.gpkg +0 -0
  28. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/maps/se-7.gpkg +0 -0
  29. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/rangeplot.py +0 -0
  30. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/rankchart.py +0 -0
  31. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/rc/newsworthy +0 -0
  32. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/scatterplot.py +0 -0
  33. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/seasonalchart.py +0 -0
  34. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/storage.py +0 -0
  35. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/stripechart.py +0 -0
  36. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/translations/datawrapper_regions.csv +0 -0
  37. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/translations/regions.py +0 -0
  38. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts/translations/se_municipalities.csv +0 -0
  39. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts.egg-info/SOURCES.txt +0 -0
  40. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts.egg-info/dependency_links.txt +0 -0
  41. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts.egg-info/not-zip-safe +0 -0
  42. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/newsworthycharts.egg-info/top_level.txt +0 -0
  43. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/setup.cfg +0 -0
  44. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/test/test_categorical_chart.py +0 -0
  45. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/test/test_choropleth_maps.py +0 -0
  46. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/test/test_custom_climate_cars.py +0 -0
  47. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/test/test_data_list.py +0 -0
  48. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/test/test_datawrapper.py +0 -0
  49. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/test/test_main.py +0 -0
  50. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/test/test_rangeplot.py +0 -0
  51. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/test/test_scatterplot.py +0 -0
  52. {newsworthycharts-1.74.2 → newsworthycharts-1.76.0}/test/test_serial_chart.py +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: newsworthycharts
3
- Version: 1.74.2
3
+ Version: 1.76.0
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.74.2.tar.gz
6
+ Download-URL: https://github.com/jplusplus/newsworthycharts/archive/1.76.0.tar.gz
7
7
  Author: Jens Finnäs and Leo Wallentin, J++ Stockholm
8
8
  Author-email: stockholm@jplusplus.org
9
9
  License: MIT
10
- Requires-Python: >=3.9
10
+ Requires-Python: >=3.10
11
11
  Description-Content-Type: text/x-rst
12
12
  License-File: LICENSE.txt
13
13
  Requires-Dist: boto3>=1.26
@@ -18,11 +18,11 @@ Requires-Dist: PyYAML>=3
18
18
  Requires-Dist: adjustText==1.3.0
19
19
  Requires-Dist: numpy>2
20
20
  Requires-Dist: python-dateutil<3,>=2
21
- Requires-Dist: Pillow==11.2.1
21
+ Requires-Dist: Pillow==11.3.0
22
22
  Requires-Dist: requests>=2.22
23
23
  Requires-Dist: matplotlib-label-lines==0.5.1
24
- Requires-Dist: geopandas==1.0.1
25
- Requires-Dist: mapclassify==2.8.1
24
+ Requires-Dist: geopandas==1.1.1
25
+ Requires-Dist: mapclassify==2.10.0
26
26
  Dynamic: author
27
27
  Dynamic: author-email
28
28
  Dynamic: description
@@ -225,6 +225,7 @@ These settings are available for all chart types:
225
225
  - `categorical` = False # If True, the map will be colored by category. If False, it will be colored by a continuous value
226
226
  - `base_map` = None
227
227
  - `missing_label` = None # Add a label for no data
228
+ - `missing_color` = "gainsboro" # Color for regions with no data
228
229
 
229
230
  `basemap` can be `{ISO}-{level}` or `{ISO}|{subset}-{level}`.
230
231
  For example, `se-4` will show Swedish counties, while `se|03-7` will show municipalities (`se-7`) starting with `03`.
@@ -281,10 +282,22 @@ Roadmap
281
282
  - Remove custom charts (add missing api interfaces to Chart class instead)
282
283
  - Remove DataWrapper class (out-of-scope)
283
284
  - Custom month locator with equal-width month bars
285
+ - TODO: avif support
284
286
 
285
287
  Changelog
286
288
  ---------
287
289
 
290
+ - 1.76.0
291
+
292
+ - Pillow==11.3.0
293
+ - Minimum required Python version is now 3.10
294
+ - Minor fixes to weekly serial chart x axis
295
+
296
+ - 1.75.0
297
+
298
+ - geopandas==1.1.0
299
+ - Added `missing_color` argument to ChoroplethMap, to set the color of regions with no data
300
+
288
301
  - 1.74.2
289
302
 
290
303
  - Improved positioning of x-range annotations in SerialChart
@@ -188,6 +188,7 @@ These settings are available for all chart types:
188
188
  - `categorical` = False # If True, the map will be colored by category. If False, it will be colored by a continuous value
189
189
  - `base_map` = None
190
190
  - `missing_label` = None # Add a label for no data
191
+ - `missing_color` = "gainsboro" # Color for regions with no data
191
192
 
192
193
  `basemap` can be `{ISO}-{level}` or `{ISO}|{subset}-{level}`.
193
194
  For example, `se-4` will show Swedish counties, while `se|03-7` will show municipalities (`se-7`) starting with `03`.
@@ -244,10 +245,22 @@ Roadmap
244
245
  - Remove custom charts (add missing api interfaces to Chart class instead)
245
246
  - Remove DataWrapper class (out-of-scope)
246
247
  - Custom month locator with equal-width month bars
248
+ - TODO: avif support
247
249
 
248
250
  Changelog
249
251
  ---------
250
252
 
253
+ - 1.76.0
254
+
255
+ - Pillow==11.3.0
256
+ - Minimum required Python version is now 3.10
257
+ - Minor fixes to weekly serial chart x axis
258
+
259
+ - 1.75.0
260
+
261
+ - geopandas==1.1.0
262
+ - Added `missing_color` argument to ChoroplethMap, to set the color of regions with no data
263
+
251
264
  - 1.74.2
252
265
 
253
266
  - Improved positioning of x-range annotations in SerialChart
@@ -1,4 +1,4 @@
1
- __version__ = "1.74.2"
1
+ __version__ = "1.76.0"
2
2
 
3
3
  from .chart import Chart
4
4
  from .choroplethmap import ChoroplethMap
@@ -33,6 +33,10 @@ class ChoroplethMap(Map):
33
33
 
34
34
  df = self._prepare_map_data()
35
35
 
36
+ missing_color = "gainsboro"
37
+ if self.missing_color:
38
+ missing_color = self.missing_color
39
+
36
40
  args = {
37
41
  "categorical": True,
38
42
  "legend": True, # bug in geopandas, fixed in master but not released
@@ -43,7 +47,7 @@ class ChoroplethMap(Map):
43
47
  "edgecolor": "white",
44
48
  "linewidth": 0.2,
45
49
  "missing_kwds": {
46
- "color": "gainsboro",
50
+ "color": missing_color,
47
51
  },
48
52
  }
49
53
  # This should be adjusted per basemap
@@ -58,8 +62,8 @@ class ChoroplethMap(Map):
58
62
  # normalize the data ourselves, otherwise the inset maps will be off
59
63
  norm = mpl.colors.Normalize(vmin=df["data"].min(), vmax=df["data"].max())
60
64
  mapper = mpl.cm.ScalarMappable(norm=norm, cmap=self.color_ramp)
61
- df["color"] = df["data"].apply(lambda x: mapper.to_rgba(x) if not np.isnan(x) else "gainsboro")
62
- df["color"] = df["color"].fillna("gainsboro")
65
+ df["color"] = df["data"].apply(lambda x: mapper.to_rgba(x) if not np.isnan(x) else missing_color)
66
+ df["color"] = df["color"].fillna(missing_color)
63
67
  args["color"] = df["color"]
64
68
 
65
69
  self._fig.tight_layout()
@@ -129,8 +133,8 @@ class ChoroplethMap(Map):
129
133
  # normalize the data ourselves, otherwise the inset maps will be off
130
134
  norm = mpl.colors.Normalize(vmin=_has_value["data"].min(), vmax=_has_value["data"].max())
131
135
  mapper = mpl.cm.ScalarMappable(norm=norm, cmap=self.color_ramp)
132
- df["color"] = df["data"].apply(lambda x: mapper.to_rgba(x) if not np.isnan(x) else "gainsboro")
133
- df["color"] = df["color"].fillna("gainsboro")
136
+ df["color"] = df["data"].apply(lambda x: mapper.to_rgba(x) if not np.isnan(x) else missing_color)
137
+ df["color"] = df["color"].fillna(missing_color)
134
138
  args["color"] = df["color"]
135
139
 
136
140
  # Add labels legend (manually, Geopandas is too crude as of now)
@@ -173,7 +177,7 @@ class ChoroplethMap(Map):
173
177
  for idx, cat in enumerate(cat):
174
178
  color_map[cat] = self._nwc_style["qualitative_colors"][idx]
175
179
  df["color"] = df["data"].astype(str).map(color_map)
176
- df["color"] = df["color"].fillna("gainsboro")
180
+ df["color"] = df["color"].fillna(missing_color)
177
181
  args["color"] = df["color"]
178
182
 
179
183
  # Geopandas does not handle legend if color keyword is used
@@ -195,7 +199,7 @@ class ChoroplethMap(Map):
195
199
  patches.append(patch)
196
200
  patches = list(reversed(patches))
197
201
  if self.missing_label and len(patches):
198
- patches.append(mpatches.Patch(color="gainsboro", label=self.missing_label))
202
+ patches.append(mpatches.Patch(color=missing_color, label=self.missing_label))
199
203
 
200
204
  df.plot(ax=self.ax, **args)
201
205
  # Add outer edge
@@ -231,8 +235,8 @@ class ChoroplethMap(Map):
231
235
  ax=axin,
232
236
  **args,
233
237
  )
234
- r, (a, b, c, d) = self.ax.indicate_inset_zoom(axin)
235
- for _line in [a, b, c, d]:
238
+ artist = self.ax.indicate_inset_zoom(axin)
239
+ for _line in artist.connectors:
236
240
  _line.set_visible(False)
237
241
 
238
242
  if len(patches):
@@ -75,13 +75,13 @@ def get_best_locator(delta, points, interval=None, max_ticks=None):
75
75
 
76
76
  elif interval == "weekly":
77
77
  # NB The threshold are not tested thoroughly. Consider adjusting.
78
- if delta.days <= 10 * 7:
78
+ if delta.days <= 9 * 7:
79
79
  return WeekdayLocator(MO, interval=1)
80
80
 
81
- elif delta.days <= 20 * 7:
81
+ elif delta.days <= 18 * 7:
82
82
  return WeekdayLocator(MO, interval=2)
83
83
 
84
- elif delta.days <= 30 * 7:
84
+ elif delta.days <= 27 * 7:
85
85
  return WeekdayLocator(MO, interval=3)
86
86
 
87
87
  else:
@@ -94,6 +94,7 @@ class Map(Chart):
94
94
  self.categorical = kwargs.get("categorical", False)
95
95
  self.base_map = None
96
96
  self.missing_label = None
97
+ self.missing_color = None
97
98
  self.df = None
98
99
  self.show_ticks = False
99
100
 
@@ -253,7 +253,7 @@ class SerialChart(Chart):
253
253
  lm = "-"
254
254
  if lw is None:
255
255
  lw = self._nwc_style.get("lines.linewidth", 2)
256
-
256
+
257
257
  if hasattr(self, "_get_line_colors"):
258
258
  # Hook for sub classes
259
259
  color = self._get_line_colors(i)
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: newsworthycharts
3
- Version: 1.74.2
3
+ Version: 1.76.0
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.74.2.tar.gz
6
+ Download-URL: https://github.com/jplusplus/newsworthycharts/archive/1.76.0.tar.gz
7
7
  Author: Jens Finnäs and Leo Wallentin, J++ Stockholm
8
8
  Author-email: stockholm@jplusplus.org
9
9
  License: MIT
10
- Requires-Python: >=3.9
10
+ Requires-Python: >=3.10
11
11
  Description-Content-Type: text/x-rst
12
12
  License-File: LICENSE.txt
13
13
  Requires-Dist: boto3>=1.26
@@ -18,11 +18,11 @@ Requires-Dist: PyYAML>=3
18
18
  Requires-Dist: adjustText==1.3.0
19
19
  Requires-Dist: numpy>2
20
20
  Requires-Dist: python-dateutil<3,>=2
21
- Requires-Dist: Pillow==11.2.1
21
+ Requires-Dist: Pillow==11.3.0
22
22
  Requires-Dist: requests>=2.22
23
23
  Requires-Dist: matplotlib-label-lines==0.5.1
24
- Requires-Dist: geopandas==1.0.1
25
- Requires-Dist: mapclassify==2.8.1
24
+ Requires-Dist: geopandas==1.1.1
25
+ Requires-Dist: mapclassify==2.10.0
26
26
  Dynamic: author
27
27
  Dynamic: author-email
28
28
  Dynamic: description
@@ -225,6 +225,7 @@ These settings are available for all chart types:
225
225
  - `categorical` = False # If True, the map will be colored by category. If False, it will be colored by a continuous value
226
226
  - `base_map` = None
227
227
  - `missing_label` = None # Add a label for no data
228
+ - `missing_color` = "gainsboro" # Color for regions with no data
228
229
 
229
230
  `basemap` can be `{ISO}-{level}` or `{ISO}|{subset}-{level}`.
230
231
  For example, `se-4` will show Swedish counties, while `se|03-7` will show municipalities (`se-7`) starting with `03`.
@@ -281,10 +282,22 @@ Roadmap
281
282
  - Remove custom charts (add missing api interfaces to Chart class instead)
282
283
  - Remove DataWrapper class (out-of-scope)
283
284
  - Custom month locator with equal-width month bars
285
+ - TODO: avif support
284
286
 
285
287
  Changelog
286
288
  ---------
287
289
 
290
+ - 1.76.0
291
+
292
+ - Pillow==11.3.0
293
+ - Minimum required Python version is now 3.10
294
+ - Minor fixes to weekly serial chart x axis
295
+
296
+ - 1.75.0
297
+
298
+ - geopandas==1.1.0
299
+ - Added `missing_color` argument to ChoroplethMap, to set the color of regions with no data
300
+
288
301
  - 1.74.2
289
302
 
290
303
  - Improved positioning of x-range annotations in SerialChart
@@ -6,8 +6,8 @@ PyYAML>=3
6
6
  adjustText==1.3.0
7
7
  numpy>2
8
8
  python-dateutil<3,>=2
9
- Pillow==11.2.1
9
+ Pillow==11.3.0
10
10
  requests>=2.22
11
11
  matplotlib-label-lines==0.5.1
12
- geopandas==1.0.1
13
- mapclassify==2.8.1
12
+ geopandas==1.1.1
13
+ mapclassify==2.10.0
@@ -22,7 +22,7 @@ setup(
22
22
  license="MIT",
23
23
  packages=["newsworthycharts"],
24
24
  zip_safe=False,
25
- python_requires='>=3.9',
25
+ python_requires='>=3.10',
26
26
  install_requires=[
27
27
  "boto3>=1.26",
28
28
  "matplotlib==3.10.3",
@@ -32,11 +32,11 @@ setup(
32
32
  "adjustText==1.3.0",
33
33
  "numpy>2",
34
34
  "python-dateutil>=2,<3",
35
- "Pillow==11.2.1",
35
+ "Pillow==11.3.0",
36
36
  "requests>=2.22",
37
37
  "matplotlib-label-lines==0.5.1",
38
- "geopandas==1.0.1",
39
- "mapclassify==2.8.1",
38
+ "geopandas==1.1.1",
39
+ "mapclassify==2.10.0",
40
40
  ],
41
41
  setup_requires=["flake8"],
42
42
  include_package_data=True,