""" Opinion amplification causes extreme polarization in social networks - plot.py by Soo Ling Lim and Peter J. Bentley This code is only to be used for research purposes. Email: s.lim@cs.ucl.ac.uk """ """ implemented on Python 3.9.1 """ import numpy as np import argparse import importlib import os, time import pickle import matplotlib.pyplot as plt RESULTS_DIRECTORY = 'results_conflict/' IMAGE_DIRECTORY = 'image/' image_format = 'pdf' # png num_nodes = 100 # if the directory to save image does not exist, create it if not os.path.exists(IMAGE_DIRECTORY): os.makedirs(IMAGE_DIRECTORY) def get_conflict_results(variable_list): results = [] for variable in variable_list: data_file = RESULTS_DIRECTORY + 'conflict_a' + str(variable['AMPLIFIER']) + '_n' + str(variable['NUM_NODES']) + '_k' + str(variable['ERDOS_K']) + '_e' + str(variable['CONFIDENCE_THRESHOLD']) + '_p' + str(variable['PROBABILITY_AMPLIFY']) + '_as' + str(variable['AMPLIFICATION_STRENGTH']) + '.pkl' optimise_seed, timestep, opinion_std = pickle.load(open(data_file, 'rb')) results.append(opinion_std) return results, timestep def draw_image(timestep, dataset1, dataset1_name, dataset2, dataset2_name, dataset3, dataset3_name, xlabel, ylabel, title, imagename): width = 0.2 # the width of the bars fig, ax = plt.subplots() plt.tick_params(labelsize=14) rects1 = ax.plot(timestep, dataset1, label=dataset1_name, color="#4c72b0") rects2 = ax.plot(timestep, dataset2, label=dataset2_name, color="#dd8452") rects3 = ax.plot(timestep, dataset3, label=dataset3_name, color="#55a868") # Add some text for labels, title and custom x-axis tick labels, etc. if title != '': ax.set_title(title, fontsize=18) ax.set_xlabel(xlabel, fontsize=14) ax.set_ylabel(ylabel, fontsize=14) ax.margins(x=0) xs = np.linspace(1, len(timestep), len(timestep)) ax.hlines(y=0.577, xmin=0, xmax=len(xs), colors='gray', linestyles='--', lw=1) ax.set_ylim([0, 2]) ax.legend(fontsize=14) fig.tight_layout() plt.savefig(IMAGE_DIRECTORY + imagename, dpi=72, bbox_inches='tight', pad_inches=0) amplifier = 0.0 confidence_threshold = 0.8 prob_amplify = 0.0 amplification_strength = 0.0 variable_list = [ {'AMPLIFIER': amplifier, 'ERDOS_K': 2, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': confidence_threshold, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': amplification_strength}, {'AMPLIFIER': amplifier, 'ERDOS_K': 5, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': confidence_threshold, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': amplification_strength}, {'AMPLIFIER': amplifier, 'ERDOS_K': 10, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': confidence_threshold, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': amplification_strength}, ] results, timestep = get_conflict_results(variable_list) v1 = results[0] v1_name = 'k=2' v2 = results[1] v2_name = 'k=5' v3 = results[2] v3_name = 'k=10' xlabel = 'Timestep' ylabel = 'Conflict' title = '' imagename = 'no_amp_conflict_k.' + image_format draw_image(timestep, v1, v1_name, v2, v2_name, v3, v3_name, xlabel, ylabel, title, imagename) amplifier = 0.0 erdos_k = 5 prob_amplify = 0.0 amplification_strength = 0.0 variable_list = [ {'AMPLIFIER': amplifier, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': 0.2, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': amplification_strength}, {'AMPLIFIER': amplifier, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': 0.5, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': amplification_strength}, {'AMPLIFIER': amplifier, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': 0.8, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': amplification_strength}, ] results, timestep = get_conflict_results(variable_list) v1 = results[0] v1_name = 'ϵ=0.2' v2 = results[1] v2_name = 'ϵ=0.5' v3 = results[2] v3_name = 'ϵ=0.8' xlabel = 'Timestep' ylabel = 'Conflict' title = '' imagename = 'no_amp_conflict_e.' + image_format draw_image(timestep, v1, v1_name, v2, v2_name, v3, v3_name, xlabel, ylabel, title, imagename) amplifier = 0.2 erdos_k = 5 prob_amplify = 0.5 amplification_strength = 0.2 variable_list = [ {'AMPLIFIER': amplifier, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': 0.2, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': amplification_strength}, {'AMPLIFIER': amplifier, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': 0.5, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': amplification_strength}, {'AMPLIFIER': amplifier, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': 0.8, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': amplification_strength}, ] results, timestep = get_conflict_results(variable_list) v1 = results[0] v1_name = 'ϵ=0.2' v2 = results[1] v2_name = 'ϵ=0.5' v3 = results[2] v3_name = 'ϵ=0.8' xlabel = 'Timestep' ylabel = 'Conflict' title = '' imagename = 'amp_conflict_e.' + image_format draw_image(timestep, v1, v1_name, v2, v2_name, v3, v3_name, xlabel, ylabel, title, imagename) amplifier = 0.2 confidence_threshold = 0.2 erdos_k = 5 prob_amplify = 0.5 variable_list = [ {'AMPLIFIER': amplifier, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': confidence_threshold, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': 0.2}, {'AMPLIFIER': amplifier, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': confidence_threshold, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': 0.5}, {'AMPLIFIER': amplifier, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': confidence_threshold, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': 0.8}, ] results, timestep = get_conflict_results(variable_list) v1 = results[0] v1_name = 's=0.2' v2 = results[1] v2_name = 's=0.5' v3 = results[2] v3_name = 's=0.8' xlabel = 'Timestep' ylabel = 'Conflict' title = '' imagename = 'amp_strength_conflict_e.' + image_format draw_image(timestep, v1, v1_name, v2, v2_name, v3, v3_name, xlabel, ylabel, title, imagename) amplifier = 0.2 confidence_threshold = 0.2 erdos_k = 5 amplification_strength = 0.2 variable_list = [ {'AMPLIFIER': amplifier, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': confidence_threshold, 'PROBABILITY_AMPLIFY': 0.2, 'AMPLIFICATION_STRENGTH': amplification_strength}, {'AMPLIFIER': amplifier, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': confidence_threshold, 'PROBABILITY_AMPLIFY': 0.5, 'AMPLIFICATION_STRENGTH': amplification_strength}, {'AMPLIFIER': amplifier, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': confidence_threshold, 'PROBABILITY_AMPLIFY': 0.8, 'AMPLIFICATION_STRENGTH': amplification_strength}, ] results, timestep = get_conflict_results(variable_list) v1 = results[0] v1_name = 'p=0.2' v2 = results[1] v2_name = 'p=0.5' v3 = results[2] v3_name = 'p=0.8' xlabel = 'Timestep' ylabel = 'Conflict' title = '' imagename = 'amp_probamp_conflict_e.' + image_format draw_image(timestep, v1, v1_name, v2, v2_name, v3, v3_name, xlabel, ylabel, title, imagename) confidence_threshold = 0.2 erdos_k = 5 amplification_strength = 0.2 prob_amplify = 0.5 variable_list = [ {'AMPLIFIER': 0.2, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': confidence_threshold, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': amplification_strength}, {'AMPLIFIER': 0.5, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': confidence_threshold, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': amplification_strength}, {'AMPLIFIER': 0.8, 'ERDOS_K': erdos_k, 'NUM_NODES': num_nodes, 'CONFIDENCE_THRESHOLD': confidence_threshold, 'PROBABILITY_AMPLIFY': prob_amplify, 'AMPLIFICATION_STRENGTH': amplification_strength}, ] results, timestep = get_conflict_results(variable_list) v1 = results[0] v1_name = 'π=0.2' v2 = results[1] v2_name = 'π=0.5' v3 = results[2] v3_name = 'π=0.8' xlabel = 'Timestep' ylabel = 'Conflict' title = '' imagename = 'amp_proamp_conflict_e.' + image_format draw_image(timestep, v1, v1_name, v2, v2_name, v3, v3_name, xlabel, ylabel, title, imagename)