2017-02-02 8 views
3

Ich hoffe, es geht dir gut.Python Matplotlib Boxplot Farbe

Ich versuche, zwei Sätze von Box-Plots mit Matplotlib zu machen. Ich möchte, dass jeder Satz von Boxplots (und Punkte und Whiskers) in einer anderen Farbe gefüllt wird. Also im Grunde gibt es zwei Farben auf dem Grundstück

Mein Code ist unten, wäre toll, wenn Sie helfen können, diese Plots in Farbe zu machen. d0 und d1 sind jede Liste von Datenlisten. Ich möchte die Menge der Boxplots, die mit Daten in d0 in einer Farbe erstellt wurden, und die Menge der Boxplots mit Daten in d1 in einer anderen Farbe. Dank

plt.boxplot(d0, widths = 0.1) 
    plt.boxplot(d1, widths = 0.1) 

Antwort

7

Sie die Farbe eines Box Plot ändern setp auf dem zurückgegebenen Wert von boxplot() wie folgt verwendet:

import matplotlib.pyplot as plt 

def draw_plot(data, edge_color, fill_color): 
    bp = ax.boxplot(data, patch_artist=True) 

    for element in ['boxes', 'whiskers', 'fliers', 'means', 'medians', 'caps']: 
     plt.setp(bp[element], color=edge_color) 

    for patch in bp['boxes']: 
     patch.set(facecolor=fill_color)  

example_data1 = [[1,2,0.8], [0.5,2,2], [3,2,1]] 
example_data2 = [[5,3, 4], [6,4,3,8], [6,4,9]] 

fig, ax = plt.subplots() 
draw_plot(example_data1, 'red', 'tan') 
draw_plot(example_data2, 'blue', 'cyan') 
ax.set_ylim(0, 10) 
plt.show() 

Dies würde zeigen, wie folgt: box plot demo

+0

Sie haben die Markierung der Flieger verpasst. ;-) – ImportanceOfBeingErnest

+0

Danke fürs Helfen :-) – user58925

3

einfärben das Boxplot, müssen Sie zuerst das patch_artist=True Schlüsselwort verwenden, um es zu sagen, dass die Kästchen Patches und nicht nur Pfade sind. Dann haben Sie zwei Hauptoptionen hier:

  1. setzen Sie die Farbe über ...props Schlüsselwort Argument, z.
    boxprops=dict(facecolor="red"). Informationen zu allen Schlüsselwortargumenten finden Sie unter the documentation
  2. Verwenden Sie die plt.setp(item, properties)-Funktionalität, um die Eigenschaften der Kästen, Whisker, Flieger, Mediane, Caps festzulegen.
  3. erhalten Sie die einzelnen Elemente der Boxen aus dem zurückgegebenen Wörterbuch und verwenden item.set_<property>(...) auf ihnen einzeln. Diese Option wird in einer Antwort auf die folgende Frage ausführlich beschrieben: python matplotlib filled boxplots, wo es ermöglicht, die Farbe der einzelnen Boxen separat zu ändern.

Das vollständige Beispiel zeigt die Optionen 1 und 2:

import matplotlib.pyplot as plt 
import numpy as np 
data = np.random.normal(0.1, size=(100,6)) 
data[76:79,:] = np.ones((3,6))+0.2 

plt.figure(figsize=(4,3)) 
# option 1, specify props dictionaries 
c = "red" 
plt.boxplot(data[:,:3], positions=[1,2,3], notch=True, patch_artist=True, 
      boxprops=dict(facecolor=c, color=c), 
      capprops=dict(color=c), 
      whiskerprops=dict(color=c), 
      flierprops=dict(color=c, markeredgecolor=c), 
      medianprops=dict(color=c), 
      ) 


# option 2, set all colors individually 
c2 = "purple" 
box1 = plt.boxplot(data[:,::-2]+1, positions=[1.5,2.5,3.5], notch=True, patch_artist=True) 
for item in ['boxes', 'whiskers', 'fliers', 'medians', 'caps']: 
     plt.setp(box1[item], color=c2) 
plt.setp(box1["boxes"], facecolor=c2) 
plt.setp(box1["fliers"], markeredgecolor=c2) 


plt.xlim(0.5,4) 
plt.xticks([1,2,3], [1,2,3]) 
plt.show() 

enter image description here

-1

Diese Frage scheint, dass man ähnlich zu sein (Face pattern for boxes in boxplots) Ich hoffe, dass dieser Code Ihr Problem löst

import matplotlib.pyplot as plt 

# fake data 
d0 = [[4.5, 5, 6, 4],[4.5, 5, 6, 4]] 
d1 = [[1, 2, 3, 3.3],[1, 2, 3, 3.3]] 

# basic plot 
bp0 = plt.boxplot(d0, patch_artist=True) 
bp1 = plt.boxplot(d1, patch_artist=True) 

for box in bp0['boxes']: 
    # change outline color 
    box.set(color='red', linewidth=2) 
    # change fill color 
    box.set(facecolor = 'green') 
    # change hatch 
    box.set(hatch = '/') 

for box in bp1['boxes']: 
    box.set(color='blue', linewidth=5) 
    box.set(facecolor = 'red') 

plt.show() 

enter image description here

Verwandte Themen