import plotly.graph_objs as go from plotly.subplots import make_subplots def create_charts(results): charts = {} explanations = {} general_impressions = {} for speaker_id, data in results.items(): charts[speaker_id] = {} explanations[speaker_id] = {} # Extract general impression general_impressions[speaker_id] = data.get('general_impression', "No general impression provided.") # Attachment Styles attachment_data = data['attachments'] labels = ['Secured', 'Anxious-Preoccupied', 'Dismissive-Avoidant', 'Fearful-Avoidant'] values = [getattr(attachment_data, 'Secured', 0), getattr(attachment_data, 'Anxious_Preoccupied', 0), getattr(attachment_data, 'Dismissive_Avoidant', 0), getattr(attachment_data, 'Fearful_Avoidant', 0)] colors = ['blue', 'orange', 'green', 'red'] fig = go.Figure(data=[go.Bar(x=labels, y=values, marker_color=colors)]) fig.update_layout(title=f'{speaker_id}: Attachment Styles', yaxis_range=[0, 1]) charts[speaker_id]['attachment'] = fig explanations[speaker_id]['attachment'] = attachment_data.Explanation # Big Five Traits bigfive_data = data['bigfive'] labels = ['Extraversion', 'Agreeableness', 'Conscientiousness', 'Neuroticism', 'Openness'] values = [bigfive_data.Extraversion, bigfive_data.Agreeableness, bigfive_data.Conscientiousness, bigfive_data.Neuroticism, bigfive_data.Openness] colors = ['blue', 'green', 'red', 'purple', 'orange'] fig = go.Figure(data=[go.Bar(x=labels, y=values, marker_color=colors)]) fig.update_layout(title=f'{speaker_id}: Big Five Traits', yaxis_range=[0, 10]) charts[speaker_id]['bigfive'] = fig explanations[speaker_id]['bigfive'] = bigfive_data.Explanation # Personality Disorders personality_data = data['personalities'] labels = ['Antisocial', 'Narcissistic', 'Depressed', 'Anxious-Avoidant', 'Obsessive', 'Paranoid', 'Borderline', 'Dependent', 'Schizoid-Schizotypal'] values = [personality_data.Antisocial_Psychopathic, personality_data.Narcissistic, personality_data.Depressed, personality_data.Anxious_Avoidant, personality_data.Obsessional, personality_data.Paranoid, personality_data.Borderline_Dysregulated, personality_data.Dependent_Victimized, personality_data.Schizoid_Schizotypal] colors = ['black', 'orange', 'gray', 'green', 'brown', 'purple', 'red', 'cyan', 'gold'] fig = go.Figure(data=[go.Bar(x=labels, y=values, marker_color=colors)]) fig.update_layout(title=f'{speaker_id}: Personality Disorders', yaxis_range=[0, 5]) charts[speaker_id]['personality'] = fig explanations[speaker_id]['personality'] = personality_data.Explanation # Attachment Dimensions (Radar Chart) dimensions_data = data['attachments'] labels = ['Self', 'Others', 'Anxiety', 'Avoidance'] values = [dimensions_data.Self, dimensions_data.Others, dimensions_data.Anxiety, dimensions_data.Avoidance] fig = go.Figure(data=go.Scatterpolar( r=values, theta=labels, fill='toself' )) fig.update_layout( polar=dict( radialaxis=dict(visible=True, range=[0, 10]) ), showlegend=False, title=f'{speaker_id}: Attachment Dimensions' ) charts[speaker_id]['dimensions'] = fig return charts, explanations, general_impressions