2016-12-04 1 views
2

Ich versuche also, ein gestapeltes Balkendiagramm zu erstellen, in dem alle Segmente des Diagramms während des gesamten Programms konstant bleiben, aber ich kann nicht herausfinden, wie df.plot abgerufen werden kann um eine benutzerdefinierte Palette zu verwenden.Verwenden einer benutzerdefinierten Farbpalette im gestapelten Balkendiagramm (Python)

Ich möchte sicherstellen, dass wenn ich 20 verschiedene Berichte aus diesem Programm mache, Freeze wird immer zum Beispiel blau und Hail wird immer weiß sein.

Bitte werfen Sie einen Blick auf das folgende Beispiel - zuerst erstelle ich eine benutzerdefinierte Palette für alle Wetterwerte.

Wenn ich das Plotten tun, um die „gepaart“-Palette, es funktioniert gut und sieht wie folgt aus:

enter image description here

Und das ist im Grunde, was ich will, es sei denn mit der benutzerdefinierten Palette

Allerdings, wenn ich

df.plot(kind='bar', stacked=True,colormap=pal_weather) 

bekomme ich einen Fehler, der mit endet:

C:\Anaconda3\lib\site-packages\pandas\tools\plotting.py in _get_standard_colors(num_colors, colormap, color_type, color) 
157    if colormap is None: 
158     raise ValueError("Colormap {0} is not recognized".format(cmap)) 
--> 159   colors = lmap(colormap, np.linspace(0, 1, num=num_colors)) 
    160  elif color is not None: 
    161   if colormap is not None: 

C:\Anaconda3\lib\site-packages\pandas\compat\__init__.py in lmap(*args, **kwargs) 
    116 
    117  def lmap(*args, **kwargs): 
--> 118   return list(map(*args, **kwargs)) 
    119 
    120  def lfilter(*args, **kwargs): 

TypeError: 'dict' object is not callable 

Jede Hilfe viel apopreciated

würde

Vielen Dank!

Beispielcode folgt:

weather=('Day','Freeze', 'Wind', 'Flood', 'Quake', 'Hail') 

pal_weather = dict(zip(weather, sns.color_palette("cubehelix", n_colors=len(weather)))) 

data1 = [[ "M", 66386, 174296, 75131, 577908, 32015], 
    [ "T", 58230, 381139, 78045, 99308, 160454], 
    [ "W", 89135, 80552, 152558, 497981, 603535], 
    [ "T", 78415, 81858, 150656, 193263, 69638], 
    [ "F", 139361, 331509, 343164, 781380, 52269]] 


df = DataFrame(data=data1) 
df.columns = ('Day','Freeze', 'Wind', 'Flood', 'Quake', 'Hail') 
df.plot(kind='bar', stacked=True,colormap='Paired') 

Antwort

1

Versuchen mit meiner Lösung:

import matplotlib.pyplot as plt 
import matplotlib 
import seaborn as sns 
from matplotlib.colors import LinearSegmentedColormap 

matplotlib.style.use('ggplot') 
from pandas import DataFrame 

weather = ('Day', 'Freeze', 'Wind', 'Flood', 'Quake', 'Hail') 
colors = sns.color_palette("cubehelix", n_colors=len(weather)) 
cmap1 = LinearSegmentedColormap.from_list("my_colormap", colors) 

data1 = [["M", 66386, 174296, 75131, 577908, 32015], 
     ["T", 58230, 381139, 78045, 99308, 160454], 
     ["W", 89135, 80552, 152558, 497981, 603535], 
     ["T", 78415, 81858, 150656, 193263, 69638], 
     ["F", 139361, 331509, 343164, 781380, 52269]] 


df = DataFrame(data=data1) 
df.columns = weather 
df = df.set_index('Day') 
df.plot(kind='bar', stacked=True, colormap=cmap1) 
plt.show() 

Ausgang:

enter image description here

+0

Dies scheint zu funktionieren, aber ein bisschen verwirrt, wie die Farben werden tatsächlich mit den Wetterwerten in Verbindung gebracht. Würden Sie das bitte erklären? Würde es wirklich zu schätzen wissen. –

+0

@StumblingThroughDataScience Wenn es funktioniert, markieren Sie die Antwort als richtig, bitte – eyllanesc

+0

Markt ... ein bisschen verwirrt, warum .. würde sehr zu schätzen wissen, Hilfe –

Verwandte Themen