2017-07-27 2 views

Antwort

2

ax.boxplot gibt ein Wörterbuch aller Elemente im Boxplot zurück. Der Schlüssel, den Sie hier von diesem Diktat benötigen, ist 'fliers'.

In boxdict['fliers'] gibt es die Line2D Instanzen, die zum Plotten der Flyer verwendet werden. Wir können ihre x und y Standorte mit .get_xdata() und .get_ydata() greifen.

Sie können alle eindeutigen y-Standorte mit einem set suchen und dann die Anzahl der an dieser Position geplotteten Flyer mit .count() ermitteln.

Dann ist es nur ein Fall der Verwendung von Matplotlib ax.text, um eine Textbeschriftung der Handlung hinzuzufügen.

Betrachten Sie das folgende Beispiel:

import matplotlib.pyplot as plt 
import numpy as np 

# Some fake data 
data = np.zeros((10000, 2)) 
data[0:4, 0] = 1 
data[4:6, 0] = 2 
data[6:10, 0] = 3 
data[0:9, 1] = 1 
data[9:14, 1] = 2 
data[14:20, 1] = 3 

# create figure and axes 
fig, ax = plt.subplots(1) 

# plot boxplot, grab dict 
boxdict = ax.boxplot(data) 

# the fliers from the dictionary 
fliers = boxdict['fliers'] 

# loop over boxes in x direction 
for j in range(len(fliers)): 

    # the y and x positions of the fliers 
    yfliers = boxdict['fliers'][j].get_ydata() 
    xfliers = boxdict['fliers'][j].get_xdata() 

    # the unique locations of fliers in y 
    ufliers = set(yfliers) 

    # loop over unique fliers 
    for i, uf in enumerate(ufliers): 

     # print number of fliers 
     ax.text(xfliers[i] + 0.03, uf + 0.03, list(yfliers).count(uf)) 

plt.show() 

enter image description here

Verwandte Themen