2017-07-13 8 views
-1

Ich arbeite an einem Cluster-Algorithmus, der die Eingabe von einer Excel-Datei mit Pandas als Liste importiert. Die Liste ist in Datenblöcke mit 8 Gleitpunkten unterteilt, die durch k[0], k[1].....k[7] repräsentiert werden (die Indexnummern entsprechen den Werten im Wörterbuch). Der Cluster wird in Wörterbuchform dargestellt. Ein Beispiel für meine Cluster-Ausgabe istNotwendigkeit, ein Python-Wörterbuch zu visualisieren

cluster = {0: [0, 2, 4, 5, 6], 1: [1], 2: [3, 7]} 

Gibt es eine Möglichkeit, ein Streudiagramm haben, so dass [0, 2, 4, 5, 6] mit einer Farbe aufgetragen ist, [1] in einer anderen Farbe, [3,7] in einer anderen Farbe. Im Wesentlichen sollte jeder Cluster mit der gleichen Farbe markiert werden. Ich würde gerne wissen, wie man diese Liste auf Farben abbildet (vorzugsweise so viele Farben wie die Anzahl der Cluster in dem Cluster-Algorithmus, der vorher bekannt ist). Ich arbeite mit Matplotlib in Python und bin völlig verloren, wie dieses Problem zu lösen ist.

+0

Haben Sie Colormap-Implementierung betrachtet? [Stack Link] (https://StackOverflow.com/questions/12236566/setting-different-color-for-each-series-in-scatter-plot-on-matplotlib) – anugrah

Antwort

1

Sie könnten nur für jede Liste von Zahlen, die eine Streuung wie folgt vorgehen:

Sie
import matplotlib.pyplot as plt 

cluster = {0: [0, 2, 4, 5, 6], 1: [1], 2: [3, 7]} 
colours = ['green', 'orange', 'red'] 

fig = plt.figure() 
ax = fig.add_subplot(111) 

for colour, (x, ys) in zip(colours, cluster.items()): 
    ax.scatter([x] * len(ys), ys, c=colour, linewidth=0, s=50) 

plt.show() 

Giving:

multi coloured scatter plot

Um dies zu erweitern die Farbkarte zu verwenden, konstruiert werden colours könnte wie:

colours = cm.rainbow(np.linspace(0, 1, len(cluster))) 

z

import matplotlib.pyplot as plt 
import matplotlib.cm as cm 
import numpy as np 

cluster = {0: [0, 2, 4, 5, 6], 1: [1], 2: [3, 7]} 
colours = cm.rainbow(np.linspace(0, 1, len(cluster))) 

fig = plt.figure() 
ax = fig.add_subplot(111) 

for colour, (x, ys) in zip(colours, cluster.items()): 
    ax.scatter([x] * len(ys), ys, c=colour, linewidth=0, s=50) 

plt.show() 
+0

Vielen Dank @ Martin Evans. Dies würde definitiv dem Zweck dienen. Ich habe gerade gemerkt, dass ich wirklich nicht alle Punkte, die die Indexnummer ausmachen, aufzeichnen muss, was ich versucht habe zu erreichen, aber es ist nicht notwendig. – Eyejay