newsworthycharts 1.74.2__py3-none-any.whl → 1.76.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.
- newsworthycharts/__init__.py +1 -1
- newsworthycharts/choroplethmap.py +13 -9
- newsworthycharts/lib/locator.py +3 -3
- newsworthycharts/map.py +1 -0
- newsworthycharts/serialchart.py +1 -1
- {newsworthycharts-1.74.2.dist-info → newsworthycharts-1.76.0.dist-info}/METADATA +19 -6
- {newsworthycharts-1.74.2.dist-info → newsworthycharts-1.76.0.dist-info}/RECORD +10 -10
- {newsworthycharts-1.74.2.dist-info → newsworthycharts-1.76.0.dist-info}/WHEEL +0 -0
- {newsworthycharts-1.74.2.dist-info → newsworthycharts-1.76.0.dist-info}/licenses/LICENSE.txt +0 -0
- {newsworthycharts-1.74.2.dist-info → newsworthycharts-1.76.0.dist-info}/top_level.txt +0 -0
newsworthycharts/__init__.py
CHANGED
@@ -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":
|
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
|
62
|
-
df["color"] = df["color"].fillna(
|
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
|
133
|
-
df["color"] = df["color"].fillna(
|
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(
|
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=
|
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
|
-
|
235
|
-
for _line in
|
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):
|
newsworthycharts/lib/locator.py
CHANGED
@@ -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 <=
|
78
|
+
if delta.days <= 9 * 7:
|
79
79
|
return WeekdayLocator(MO, interval=1)
|
80
80
|
|
81
|
-
elif delta.days <=
|
81
|
+
elif delta.days <= 18 * 7:
|
82
82
|
return WeekdayLocator(MO, interval=2)
|
83
83
|
|
84
|
-
elif delta.days <=
|
84
|
+
elif delta.days <= 27 * 7:
|
85
85
|
return WeekdayLocator(MO, interval=3)
|
86
86
|
|
87
87
|
else:
|
newsworthycharts/map.py
CHANGED
newsworthycharts/serialchart.py
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: newsworthycharts
|
3
|
-
Version: 1.
|
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.
|
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.
|
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.
|
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.
|
25
|
-
Requires-Dist: mapclassify==2.
|
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
|
@@ -1,15 +1,15 @@
|
|
1
|
-
newsworthycharts/__init__.py,sha256=
|
1
|
+
newsworthycharts/__init__.py,sha256=1Ot5ucxJ17wa-7yxakr0e-G-xpRHzFVw7mVYbMb8-18,1221
|
2
2
|
newsworthycharts/bubblemap.py,sha256=nkocWmpiFgfjEuJGAsthjY5X7Q56jXWsZHUGXw4PwgE,2587
|
3
3
|
newsworthycharts/categoricalchart.py,sha256=Vr-0yFms0hEVCeUa3vLt3FYBqpX4xLQ8YGPc4LGQN_A,18368
|
4
4
|
newsworthycharts/chart.py,sha256=QDvIo_HV9fDmadBKLsPJMXrIYL6ZbHnDbVjZuzX9Srw,35441
|
5
|
-
newsworthycharts/choroplethmap.py,sha256=
|
5
|
+
newsworthycharts/choroplethmap.py,sha256=3ztB8C0Pm9yUvPucnsRgmdPmnlCxvkiB42JuSOJmWSk,9834
|
6
6
|
newsworthycharts/datawrapper.py,sha256=RRkAVTpfP4updKxUIBaSmKuBi2RUVPaBRF8HDQhlGGA,11250
|
7
|
-
newsworthycharts/map.py,sha256=
|
7
|
+
newsworthycharts/map.py,sha256=tECE7bZhJnvJxFV2pSitDxaHrKOwjBjoSA15H-MdzeI,6123
|
8
8
|
newsworthycharts/rangeplot.py,sha256=NE1W9TnmlpK6T3RvBJOU3nd73EXqkj17OY9i5zlw_cQ,8366
|
9
9
|
newsworthycharts/rankchart.py,sha256=vMzNMVOv1jae6wuHC_riAdb1lm9oPltO3TT3YQpc0Oc,9376
|
10
10
|
newsworthycharts/scatterplot.py,sha256=weHubdMsDGaBTXejg2TqBNPTQ1K-QBpZqJiyQ8EOEc4,5084
|
11
11
|
newsworthycharts/seasonalchart.py,sha256=ttT8JpvWB3DL0EcTBQor_Uxlow_6tdcl7ibEmLCpUrQ,1982
|
12
|
-
newsworthycharts/serialchart.py,sha256=
|
12
|
+
newsworthycharts/serialchart.py,sha256=5tHj-UocgHRKKSwEclqcQjm9zPBlsOP_gt7D4O-gPns,32071
|
13
13
|
newsworthycharts/storage.py,sha256=myERhlpvXyExXxUByBq9eW1bWkCyfH9SwTZbsWSyy3Q,4301
|
14
14
|
newsworthycharts/stripechart.py,sha256=9B6PX2MyLuKNQ8W0OGdKbP0-U32kju0K_NHHwwz_J68,1547
|
15
15
|
newsworthycharts/custom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -20,7 +20,7 @@ newsworthycharts/lib/colors.py,sha256=U04TDkvoMQkcldRFXfnwyLOTwq1SWW2se-Ad-DNcw9
|
|
20
20
|
newsworthycharts/lib/datalist.py,sha256=-LdGFE0SOvjLnIRZ6eoJoijDaG3SeUPNIDPBjbm5A2U,6433
|
21
21
|
newsworthycharts/lib/formatter.py,sha256=GNH43hE0bC17OgiV8LYH3YUrEhm7OJh9XzfSV4HVtHo,4838
|
22
22
|
newsworthycharts/lib/geography.py,sha256=K0_teFmuPJwXX7Py-amJB_1YY5_gL2kBYhz1LrRCyTg,584
|
23
|
-
newsworthycharts/lib/locator.py,sha256=
|
23
|
+
newsworthycharts/lib/locator.py,sha256=M0TsMWYQF9i5Rnw4Ortjyv6OltPjXDJifxR1NtEe-TY,3599
|
24
24
|
newsworthycharts/lib/mimetypes.py,sha256=bL9HtVWbn2Of39LcBt4u4yelkr4bGZiyebq3OfLnfFY,237
|
25
25
|
newsworthycharts/lib/utils.py,sha256=zk2hfbZluRcwwxa-N9LocP65HKiHmvgkBw9saAq1lgU,7403
|
26
26
|
newsworthycharts/maps/se-4.gpkg,sha256=oWw5j7FPVpI0ig67jNDim8qSn5SG8rcHp0014-uTKZM,290816
|
@@ -29,8 +29,8 @@ newsworthycharts/rc/newsworthy,sha256=yOIZvYS6PG1u19VMcdtfj9vbihKQsey5IprwqK59Kg
|
|
29
29
|
newsworthycharts/translations/datawrapper_regions.csv,sha256=fzZcQRX6RFMlNNP8mpgfYNdR3Y0QAlQxDXk8FXTaWWI,9214
|
30
30
|
newsworthycharts/translations/regions.py,sha256=Nv1McQjggD4S3JRu82rDMTG3pqUVR13E5-FBpSYbm98,239
|
31
31
|
newsworthycharts/translations/se_municipalities.csv,sha256=br_mm-IvzQtj_W55_ATREhJ97jWnCweBFlDAVY2EBxA,7098
|
32
|
-
newsworthycharts-1.
|
33
|
-
newsworthycharts-1.
|
34
|
-
newsworthycharts-1.
|
35
|
-
newsworthycharts-1.
|
36
|
-
newsworthycharts-1.
|
32
|
+
newsworthycharts-1.76.0.dist-info/licenses/LICENSE.txt,sha256=Sq6kGICrehbhC_FolNdXf0djKjTpv3YqjFCIYsxdQN4,1069
|
33
|
+
newsworthycharts-1.76.0.dist-info/METADATA,sha256=Cl5xD_75FXkccbJ5s_2rVX-KmC1gqlnhpIChH70q6h4,35699
|
34
|
+
newsworthycharts-1.76.0.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
|
35
|
+
newsworthycharts-1.76.0.dist-info/top_level.txt,sha256=dn_kzIj8UgUCMsh1PHdVEQJHVGSsN7Z8YJF-8xXa8n0,17
|
36
|
+
newsworthycharts-1.76.0.dist-info/RECORD,,
|
File without changes
|
{newsworthycharts-1.74.2.dist-info → newsworthycharts-1.76.0.dist-info}/licenses/LICENSE.txt
RENAMED
File without changes
|
File without changes
|