2016-09-21 2 views
4

Ich versuche, ein colorbar mein networkx gezogen matplotlib ax aus dem Bereich von 1 (das ist der leichteste) und 3 (das ist die dunkelste) hinzufügen [Besuche die Linie w/cmap unten]. Ich versuche, viele PyData Funktionalitäten zu kombinieren.Wie fügt man `colorbar` zu` networkx` mit einer `seaborn` Farbpalette hinzu? (Python 3)

Wie kann ich ein Farbbalken-Feature in einem Netzwerkexplot mit einer Seaborn-Farbpalette hinzufügen?

enter image description here

# Set up Graph 
DF_adj = pd.DataFrame(np.array(
    [[1, 0, 1, 1], 
    [0, 1, 1, 0], 
    [1, 1, 1, 1], 
    [1, 0, 1, 1] ]), columns=['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'], index=['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']) 

G = nx.Graph(DF_adj.as_matrix()) 
G = nx.relabel_nodes(G, dict(zip(range(4), ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']))) 

# Color mapping 
color_palette = sns.cubehelix_palette(3) 
cmap = {k:color_palette[v-1] for k,v in zip(['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'],[2, 1, 3, 2])} 

# Draw 
nx.draw(G, node_color=[cmap[node] for node in G.nodes()], with_labels=True) 

Dabei sind sie alle mit matplotlib Farbpaletten: arbeiten http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut3.html Ich habe sogar versucht, sie zu einem ListedColormap Objekt konvertieren, aber es hat nicht.

Dies gilt nicht für meine Situation arbeiten entweder b/c matplotlib colormap: Seaborn regplot with colorbar?

Das Gleiche gilt für http://matplotlib.org/examples/pylab_examples/colorbar_tick_labelling_demo.html

war dies der nächste, die ich bekam, aber es hat ich eine automatische Skalierung Nonetype nicht funktioniert habe: How do I use seaborns color_palette as a colormap in matplotlib?

+0

Does not 'nx.draw' Rückkehr die Künstler kreiert? – tacaswell

+1

'nx.draw' gibt nichts zurück (zumindest nicht in diesem Fall), weshalb ich mit meiner Antwort gegangen bin. – lanery

Antwort

3

Ich denke, das beste, was Sie hier tun können, ist es nach this answer zu fälschen, da Sie kein "ScalarMappable" haben, um damit zu arbeiten.

Für eine diskrete colormap

from matplotlib.colors import ListedColormap 
sm = plt.cm.ScalarMappable(cmap=ListedColormap(color_palette), 
          norm=plt.Normalize(vmin=0, vmax=3)) 
sm._A = [] 
plt.colorbar(sm) 

Wenn Sie eine lineare (kontinuierlich) colormap wollen und nur ganze Zahl zeigen Zecken

sm = plt.cm.ScalarMappable(cmap=sns.cubehelix_palette(3, as_cmap=True), 
          norm=plt.Normalize(vmin=0, vmax=3)) 
sm._A = [] 
plt.colorbar(sm, ticks=range(4)) 

enter image description here

+0

Ist es möglich, ganzzahlige Werte zu erhalten und auf diese Weise kontinuierlich zu machen? –

+1

@ O.rka, aktualisierte Antwort, hast du das gemeint? – lanery

+0

hey @lanerry danke für die antwort/update. Ich werde das testen, wenn ich morgen früh zu meinem Computer komme und es genehmige! –

Verwandte Themen