można użyć annotate
dodać strzałkę:
import pandas as pd
import matplotlib.pyplot as plt
#import seaborn as sns
import numpy as np
fig, ax = plt.subplots()
series = pd.Series(np.random.normal(0, 100, 1000))
series.plot(kind='hist', bins=50, ax=ax)
ax.annotate("",
xy=(300, 5), xycoords='data',
xytext=(300, 20), textcoords='data',
arrowprops=dict(arrowstyle="->",
connectionstyle="arc3"),
)
W tym przykładzie dodałem strzałką, że idzie od współrzędnych (300, 20), (300, 5).
Aby automatycznie skalować strzałkę do wartości w koszu, można użyć matplotlib hist
, aby narysować histogram i uzyskać wartości z powrotem, a następnie użyć numpy where
, aby znaleźć pojemnik odpowiadający żądanej pozycji.
import pandas as pd
import matplotlib.pyplot as plt
#import seaborn as sns
import numpy as np
nbins = 50
labeled_bin = 200
fig, ax = plt.subplots()
series = pd.Series(np.random.normal(0, 100, 1000))
## plot the histogram and return the bin position and values
ybins, xbins, _ = ax.hist(series, bins=nbins)
## find out in which bin belongs the position where you want the label
ind_bin = np.where(xbins >= labeled_bin)[0]
if len(ind_bin) > 0 and ind_bin[0] > 0:
## get position and value of the bin
x_bin = xbins[ind_bin[0]-1]/2. + xbins[ind_bin[0]]/2.
y_bin = ybins[ind_bin[0]-1]
## add the arrow
ax.annotate("",
xy=(x_bin, y_bin + 5), xycoords='data',
xytext=(x_bin, y_bin + 20), textcoords='data',
arrowprops=dict(arrowstyle="->",
connectionstyle="arc3"),
)
else:
print "Labeled bin is outside range"
Dzięki za odpowiedź, aby dalej rozwijać to pytanie jest to można automatycznie ustawić pozycję y strzałki na podstawie wysokości zasobnika? – BML91
@ BML91 Tak, jest to możliwe ... pozwól mi edytować odpowiedź –
@ BML91 Zobacz moją edycję :-) –