Plot einer 1D Datenmenge mit Distanzmaß

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Evora
User
Beiträge: 8
Registriert: Mittwoch 16. Juni 2021, 10:47

Guten Tag,

ich bin bislang leider nicht fündig geworden wie ich 1-Dimensionale Daten schön darstellen kann. Eventuell hat jemand damit Erfahrung und weiß wie ich das ganze anpassen kann.

Ausgangssituation: Ich habe zwei Datenquellen mit |R Zahlen (Knoten), die Anzahl in meinem Fall liegt im Bereich 150 - 250 je Datenbank.
Diese Zahlen wurden einander Zugeordnet (SciPy Optimize und max weight Matching NetworkX). Nach der Zuordnung liegen demnach Kanten zu den jeweiligen Knoten vor.

Ziel: Ich würde gerne eine bildliche Darstellung haben, die diese Knoten und Kanten Visualisiert und zwar inklusive des Distanzmaßes der Kante, heißt wenn die Knoten 3 und 5 verbunden sind muss die Linie den Wert 2 haben und entsprechend länger sein als eine Kante zwischen den Knoten 3,5 und 4,5.

Ich habe derzeit nur einen Plot hinbekommen bei dem die Punkte rechts und links stehen und die Linien diese Verbinden allerdings ohne jegliche gewichtung der Kante.

Bild

Ziel wäre demnach "eher" sowas wobei ich dann die zwei Teilmengen in unterschiedlichen Farben darstellen würde.. das ist auch nicht das Problem, lediglich das Längenmaß. Kann man das evtl. als Subtraktion zw. den Knotenpunkten irgendwie integrieren?

Bild
Quelle: https://networkx.guide/visualization/basics/

Liegt das an dem Bipartiten Graphen? Grundsätzlich wäre es nicht verkehrt wenn die Zahlen immernoch rechts und links wären aber eben unterschiedlich voneinander entfernt.. :shock: ich hoffe es ist nachvollziehbar was ich meine. Ich denke es hat was mit dem bipartite_layout zu tun.. aber ich bekomme ständig Fehler wenn ich das ändern will :|


Ich hab mal ein kleines Beispiel erstellt mit meinem derzeitigen Graph.
Bild

import pandas as pd
import numpy as np
import networkx as nx

a = [0, 1, 3, 4, 5.2]
b = [5, 6, 8, 7, 3.2]
edg = [(0,5),(1,8),(3,6), (4,3.2),(5.2,7)]

B = nx.Graph()

B.add_nodes_from(list(a), bipartite=0, label='X')
B.add_nodes_from(list(b), bipartite=1, label='Y')

B.add_edges_from(edg, label='matching')
left_or_top = list(a)
pos = nx.bipartite_layout(B, left_or_top)
plt.subplots(figsize=(10, 5))

nx.draw(B,pos,node_color='#A0CBE2',edge_color='#00bb5e',width=1, edge_cmap=plt.cm.Blues,with_labels=True)
Benutzeravatar
__blackjack__
User
Beiträge: 13069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Evora: Du willst also gewichtete Kanten. Da wäre also der erste Schritt den Kanten ein Gewicht mitzugeben: `add_weighted_edges_from()`. Und dann musst Du mal schauen wie man das den Visualisierungen beibringt das irgendwie als Entfernung und/oder Kantenstärke darzustellen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten