Please tell me whether the following statement evokes a positive or negative feeling for you: Immigration of people from other EU Member States.The data from the main spreadsheet reporting the results country by country was isolated in a csv file (then uploaded on github) so that it could be easily loaded in Pandas as follows:
import pandas as pd # github gist gist = 'https://gist.githubusercontent.com/JustGlowing/' gist += '2c25b9b153192baf573ce3b744ea6a65/raw/' gist += '5f3888f7f42caca58b2418ec5822425083b6d559/' gist += 'immigration_from_EU_eurobarometer_2018.csv' df = pd.read_csv(gist, index_col=0) df = df[df.index.map(lambda x: not '\n' in x)] df.sort_values(by=["Total 'Positive'"], inplace=True) # from https://ec.europa.eu/eurostat/statistics-explained/index.php country_names = {'BE' : 'Belgium', 'BG' : 'Bulgaria', 'CZ' : 'Czechia', 'DK' : 'Denmark', 'DE' : 'Germany', 'EE' : 'Estonia', 'IE' : 'Ireland', 'EL' : 'Greece', 'ES' : 'Spain', 'FR' : 'France', 'HR' : 'Croatia', 'IT' : 'Italy', 'CY' : 'Cyprus', 'LV' : 'Latvia', 'LT' : 'Lithuania', 'LU' : 'Luxembourg', 'HU' : 'Hungary', 'MT' : 'Malta', 'NL' : 'Netherlands', 'AT' : 'Austria', 'PL' : 'Poland', 'PT' : 'Portugal', 'RO' : 'Romania', 'SI' : 'Slovenia', 'SK' : 'Slovakia', 'FI' : 'Finland', 'SE' : 'Sweden', 'UK' : 'United Kingdom'} df.index = df.index.map(country_names.get)The idea is to create a bar chart with two sides, positive responses on the right and negative on the left. To do this, we can use the function barh and the attribute left can be used to stack the two subsets of responses ("Fairly positive/ negative" and "Very positive/negative"). The xticks also need to be adapted to reflect that the left side of the axis doesn't report values below zero. Here's the snippet:
import matplotlib.pyplot as plt import numpy as np country_idx = range(len(df)) plt.figure(figsize=(11, 14)) plt.barh(country_idx, df['Fairly positive'], color='deepskyblue',label='Fairly positive') plt.barh(country_idx, df['Very positive'], left=df['Fairly positive'], color='dodgerblue', label='Very positive') plt.barh(country_idx, -df['Fairly negative'], color='tomato', label='Fairly negative') plt.barh(country_idx, -df['Very negative'], left=-df['Fairly negative'], color='firebrick', label='Very negative') plt.yticks(country_idx, df.index) plt.xlim([-100, 100]) plt.xticks(np.arange(-100, 101, 25), np.abs(np.arange(-100, 101, 25))) plt.ylim([-.5, len(df)-.5]) title = 'Feelings toward immigration of people from\n' title += 'other EU Member States in November 2018' plt.title(title) xlbl = 'negative <<< % responses >>> positive' plt.xlabel(xlbl) plt.legend(loc='lower right') bbox_props = dict(fc="white", ec="k", lw=2) plt.text(-95, 27, 'twitter: @justglowing \nhttps://glowingpython.blogspot.com', ha="left", va="center", size=11, bbox=bbox_props) plt.show()
From the chart we note that the percentage of positive responses per country is mostly above 50% while the negative ones reach 50% only in two cases. We also see that Ireland and Sweden are the countries with the most positive responses, while Czechia (yes, that's Chech Republic :) is the country with most negative responses, though Cypriots also gave a similar number of "Very negative" responses.