This time, I’ll plot the World Food Programme Prices data. First, we get data from the ’‘’Global WFP Food Prices’’ dataset from the HDX API. and remove the first row which contains tags.
from hdx.utilities.easy_logging import setup_loggingfrom hdx.api.configuration import Configurationfrom hdx.data.dataset import Datasetimport pandas as pd
Generating LALR tables
/home/gnoblet/Documents/Codeberg/30DayChartChallenge/.venv/lib/python3.13/site-packages/quantulum3/classifier.py:28: UserWarning: Classifier dependencies not installed. Run pip install quantulum3[classifier] to install them. The classifer helps to dissambiguate units.
warnings.warn(
# setupsetup_logging()Configuration.create( hdx_site ="prod", user_agent="@gnoblet_30DayChartChallenge", hdx_read_only =True)dataset = Dataset.read_from_hdx("global-wfp-food-prices")url = dataset.get_resource()['url']# get csv from urldf = pd.read_csv(url, dtype =str)# remove first rowdf = df.iloc[1:]
2026-07-09 12:30:58.343 | INFO | hdx.api.configuration:__init__:96 - No HDX base configuration parameter. Using default base configuration file: /home/gnoblet/Documents/Codeberg/30DayChartChallenge/.venv/lib/python3.13/site-packages/hdx/api/hdx_base_configuration.yaml.2026-07-09 12:30:58.343 | INFO | hdx.api.configuration:__init__:99 - Loading HDX base configuration from: /home/gnoblet/Documents/Codeberg/30DayChartChallenge/.venv/lib/python3.13/site-packages/hdx/api/hdx_base_configuration.yaml2026-07-09 12:30:58.354 | INFO | hdx.api.configuration:__init__:136 - No HDX configuration parameter and no configuration file at default path: /home/gnoblet/.hdx_configuration.yaml.2026-07-09 12:30:58.355 | INFO | hdx.api.configuration:__init__:230 - Read only access to HDX: True
Let’s keep only Sub-Saharan countries in the West African region (using XOF, recorded as such in the dataset). Let’s also focus on the local prices for rice.
# keep only Sub-Saharan countries curreency being set to XOFdf = df[df['currency'] =='XOF']# keep only local prices for ricedf = df[df['commodity_id'] =='71']
There is some needed data wrangling now since there are different units, and in particular where the unit is 1KG, only KG is written in column ‘unit’.
# split at the first spacesplits = df['unit'].str.split(' ', n =1, expand=True)# If the first part is not numeric, move it to the second part and set the first to '0'mask_text_only =~splits[0].str.isnumeric()splits.loc[mask_text_only, 1] = splits.loc[mask_text_only, 0]splits.loc[mask_text_only, 0] ='1'# Fill NaN in the second part with None or ''splits[1] = splits[1].fillna('')# Assign columnsdf['div'] = splits[0].astype(int)df['unit_only'] = splits[1]# price as doubledf['price'] = df['price'].astype(float)# case_when# if unit_only is KG, divide price by div# if unit_only is marmite, divide price by 2.5 (FAO: marmite is 2.5kg, seems to be in Haiti only, can be removed eventually since HTI is not XOF)df['price_kg'] = df.apply(lambda x: x['price'] / x['div'] if x['unit_only'] =='KG'else x['price'] /2.5, axis=1)
Now, before I move on to plot, I want to get the median price by country and date, and get neat country names. For this, I need to convert the date column to datetime, summarize and get unique median price by countryiso3 and date, and add country names from a wonderful iso dictionary.
df['date'] = pd.to_datetime(df['date'])df = df.sort_values('date')# summarize and get unique median price by countryiso3 and datedf = df.groupby(['countryiso3', 'date'])['price_kg'].median().reset_index()
# add country names from iso dictionaryiso = {'BEN': 'Benin','BFA': 'Burkina Faso','CIV': 'Ivory Coast','GNB': 'Guinea-Bissau','MLI': 'Mali','NER': 'Niger','SEN': 'Senegal'}df['country_name'] = df['countryiso3'].map(iso)
On to the plot! Using seaborn now we will plot time series of prices using small multiples by country. Let’s load the packages needed and set up the theme.
# load librariesimport seaborn as snsimport matplotlib.dates as mdatesimport textwrapimport matplotlib.pyplot as plt# set up a themesns.set_theme( style ='whitegrid', font ='Carlito', rc = {"grid.linewidth": 0.3,'figure.figsize':(9,6) })
There are only seven countries in this dataset. I add dummy rows to be able to plot empty countries first that will leave space for the plot title on the basis of a 3-column row. There may very well be more elegant solutions but I couldn’t find any.
The plot follows this structure: - use sns.relplot to plot each year’s time series in its own facet; - loop through each facet to add all countries except the dummy ones.
# add dummy rows to plot emoty countries firstdummy_rows = pd.DataFrame({'date': [df['date'].min(), df['date'].min()],'price_kg': [None, None],'country_name': ['cty1', 'cty2']})df2 = pd.concat([dummy_rows, df], ignore_index=True)# plot each year's time series in its own facetg = sns.relplot( data = df2, x ="date", y ="price_kg", col ="country_name", hue ="country_name", kind ="line", palette ="Set2", linewidth =4, zorder =5, col_wrap =3, height =2, aspect =1.5, legend =False, col_order = ['cty1', 'cty2'] +sorted(df['country_name'].unique()))# loop through each facetfor country_name, ax in g.axes_dict.items():if country_name in ['cty1', 'cty2']:# Hide axes for dummy facets ax.axis('off')else:# Your normal plotting code ax.text(.05, .93, country_name, transform = ax.transAxes) sns.lineplot( data = df2[df2['country_name'] != country_name], x ="date", y ="price_kg", units ="country_name", estimator =None, color ="black", linewidth =0.2, ax = ax )
/tmp/ipykernel_658271/3260248810.py:7: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.
df2 = pd.concat([dummy_rows, df], ignore_index=True)
2026-07-09 12:31:07.928 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.036 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.038 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.041 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.042 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.044 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.071 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.178 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.222 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.263 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.299 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.343 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.381 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.424 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.464 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.986 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.988 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:08.991 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.169 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.173 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.175 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.177 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.179 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.180 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.182 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.188 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.784 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.788 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.810 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.850 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.852 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.855 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.885 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.888 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.892 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.896 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.898 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.900 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.933 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.936 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.939 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.955 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.966 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.969 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.972 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.975 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.977 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.980 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.983 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:09.996 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.006 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.008 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.011 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.039 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.043 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.046 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.048 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.051 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.054 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.057 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.069 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.074 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.077 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.083 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.087 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.090 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.092 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.127 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.129 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.131 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.133 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.135 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.138 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.139 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.147 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.154 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.157 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.159 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.182 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.183 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.185 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.188 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.189 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.191 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.207 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.226 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.244 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.263 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.287 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.306 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.325 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.337 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.339 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.341 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.343 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.345 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.346 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.347 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.352 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.359 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.375 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.396 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.424 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.446 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.474 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.781 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.783 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.785 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.789 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.790 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.793 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.795 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.812 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.815 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.833 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.857 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.860 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.862 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.880 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.898 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.902 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.907 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.912 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.914 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.917 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.934 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.959 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.961 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.964 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.975 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.978 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.980 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.981 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.982 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.984 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.986 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:10.995 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.000 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.010 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.013 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.016 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.018 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.021 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.024 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.027 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.041 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.050 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.052 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.054 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.079 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.090 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.094 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.097 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.100 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.108 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.111 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.116 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.128 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.132 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.134 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.140 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.145 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.147 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.149 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.172 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.181 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.185 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.188 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.190 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.193 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.197 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.200 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.209 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.215 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.216 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.218 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.
Now that I got the base plot, I can add some nice touches. First, I want to set the x-axis to show only years, remove titles and set the y-axis label to XOF.
# format x-axis to show only yearsfor ax in g.axes.flatten(): ax.xaxis.set_major_locator(mdates.YearLocator()) ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))for label in ax.get_xticklabels(): label.set_rotation(0) label.set_horizontalalignment('center')# Enable grid only for major ticks (years) ax.grid(which='major', axis='x', linestyle='-', linewidth=0.2)# tweak the supporting aspects of the plotg.set_titles("")g.set_axis_labels("", "XOF")
Second, it’s time to set titles, caption, etc.
# some layout style aka titles and captionpalette = sns.color_palette("Set2")title_color = palette[0]title ="How smooth are changes in local rice prices in Western Sub-Saharan Africa?"subtitle ="The graph displays median prices of local rice for 7 sub-saharan countries from 2022 to today, where XOF is the main currency."caption ="Data: HDX - WFP Food Prices | Viz: @gnoblet"# wrap characters and then add texttitle_w ="\n".join(textwrap.wrap(title, width =35))subtitle_w ="\n".join(textwrap.wrap(subtitle, width =50))plt.figtext(0.05, 0.9, title_w, fontsize =20, color = title_color, wrap =True)plt.figtext(0.05, 0.75, subtitle_w, fontsize =16, color ='black', wrap =True)plt.figtext(0.05, 0.70, caption, fontsize =12, color ='black', wrap =True)
2026-07-09 12:31:11.533 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.640 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.643 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.646 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.649 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.652 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.654 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.656 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.658 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.662 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.664 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.666 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.668 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.670 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.672 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.673 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.676 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.678 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.681 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.682 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.683 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.686 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.687 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.689 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.692 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.793 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.898 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.901 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.903 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.907 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.910 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.913 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.917 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.921 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.924 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.927 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.930 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.932 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.934 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.936 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.940 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.941 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.943 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.945 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.947 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.949 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.951 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.952 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.955 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.958 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.961 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.964 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.968 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.970 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.972 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.977 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.979 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.981 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.983 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.986 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.987 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.988 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.990 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.992 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.993 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:11.997 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.000 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.003 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.008 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.012 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.015 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.017 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.019 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.020 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.023 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.025 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.028 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.031 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.034 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.037 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.039 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.042 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.044 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.046 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.048 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.050 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.052 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.053 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.055 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.
<Figure size 864x576 with 0 Axes>
Now, we eventually would like to save this plot.
# save plotg.figure.savefig('day_19.png', dpi =300, bbox_inches ='tight')plt.show()# close plotplt.close()
2026-07-09 12:31:12.078 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.080 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.088 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.089 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.090 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.094 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.096 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.112 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.120 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.130 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.139 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.243 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.244 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.245 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.251 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.252 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.253 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.254 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.256 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.259 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.260 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.263 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.264 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.273 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.275 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.284 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.286 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.293 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.295 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.298 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.301 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.302 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.310 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.2026-07-09 12:31:12.312 | WARNING | matplotlib.font_manager:_find_fonts_by_props:1431 - findfont: Font family 'Carlito' not found.
Final Plot
Notes
This visualization shows the evolution of local rice prices across seven West African countries that use XOF as their currency.
Data source: World Food Programme Food Prices dataset (via Humanitarian Data Exchange API)
Tools used: - hdx (for accessing the Humanitarian Data Exchange API) - pandas (for data manipulation) - seaborn (for visualization) - matplotlib (for plot customization)
The visualization employs small multiples (faceted plots) to compare price trends across countries while maintaining context with faint background lines showing other countries’ trends. The analysis addresses data quality issues by standardizing units (converting to price per kg) and calculating median prices by country and date to smooth inconsistencies in the original data.