The idea that the easiest way to learn something new is to enjoy doing it and I suppose… this new endeavour bolstered by love, faith and humility(?) would be the easiest way to learn something new too. Let’s go, insyaAllah.
The idea that the easiest way to learn something new is to enjoy doing it and I suppose… this new endeavour bolstered by love, faith and humility(?) would be the easiest way to learn something new too. Let’s go, insyaAllah.
# Required libraries
import matplotlib.pyplot as plt
import networkx as nx
from matplotlib.patches import Patch
# Node definitions
nodes = [
"Rub their shoulders",
"Kiss her cheek",
"Hold her hand",
"Kiss her forehead",
"Give her a foot rub",
"Tickle her knees",
"Pat her back",
"Stare into her eyes",
"Play footsie",
"Give her a long hug",
"Cuddle on the couch",
"Touch shoulders in passing",
"Hug for no reason",
"Hold hands when on a walk",
"Have a secret handshake",
"Snuggle",
"Rest her head on your shoulder",
"Sit close as we watch something together",
"Tickle her",
"Give her a high five",
]
# Create a graph and add the nodes
G = nx.Graph()
G.add_nodes_from(nodes)
# Define the clusters
clusters = {
"Upper body": ["Rub their shoulders", "Pat her back", "Touch shoulders in passing", "Rest her head on your shoulder", "Kiss her cheek", "Kiss her forehead"],
"Hands": ["Hold her hand", "Hold hands when on a walk", "Have a secret handshake", "Give her a high five"],
"Lower body": ["Give her a foot rub", "Play footsie", "Tickle her knees"],
"Full body": ["Give her a long hug", "Cuddle on the couch", "Hug for no reason", "Snuggle", "Sit close as we watch something together", "Tickle her"],
"Undefined": [node for node in G.nodes() if node not in sum(clusters.values(), [])],
}
# Define the colors
colors = {
"Upper body": "#a8dadc88",
"Hands": "#f1faee88",
"Lower body": "#e6394688",
"Full body": "#a8d8ea88",
"Undefined": "#457b9d88",
}
# Define a central node
central_node = "Physical Touch as a Love Language"
# Add the central node to the graph
G.add_node(central_node)
# Connect all other nodes to the central node
for node in nodes:
G.add_edge(node, central_node)
# Assign a color to each node based on its cluster or if it's the central node
node_colors = []
for node in G.nodes():
if node == central_node:
node_colors.append("#b39ddb88") # central node color with alpha
else:
for cluster, nodes in clusters.items():
if node in nodes:
node_colors.append(colors[cluster]) # cluster color with alpha
break
# Compute positions for all nodes, including the new central node
pos = nx.spring_layout(G, seed=42)
# Create the legend
legend_elements = [Patch(facecolor=color[:-2], edgecolor='k', label=cluster) for cluster, color in colors.items()]
# Adjust the color and width of the edges
edge_colors = ["#333333" for edge in G.edges()] # dark gray
edge_widths = [0.5 for edge in G.edges()] # thinner lines
# Create the figure
fig = plt.figure(figsize=(19.20, 11.80)) # increased height to accommodate larger bottom padding
# Create an Axes object with specified margins
ax = plt.axes([0.05, 0.1, 0.9, 0.8]) # left, bottom, width, height
# Draw the graph without labels on the Axes object
nx.draw(G, pos, node_color=node_colors, node_size=2000, edge_color=edge_colors, width=edge_widths, linewidths=1, with_labels=False, ax=ax)
# Draw the labels separately with custom font sizes on the Axes object
for node, (x, y) in pos.items():
if node == central_node:
ax.text(x, y, node, fontsize=15, color='black', ha='center', va='center')
else:
ax.text(x, y, node, fontsize=8, color='black', ha='center', va='center')
# Add the custom legend at the bottom on the Axes object
ax.legend(handles=legend_elements, loc="lower center", bbox_to_anchor=(0.5, -0.05), ncol=len(legend_elements))
# Save the figure
plt.savefig('network_graph.png', format='PNG')