Вам нужно нормализовать строки версии, чтобы их можно было сравнить. Что-то вроде
import java.util.regex.Pattern; public class Main {public static void main (String ... args) {compare ("1.0", "1.1"); сравнить («1.0.1», «1.1»); сравнить («1.9», «1.10»); сравнить («1.a», «1.9»); } private static void compare (String v1, String v2) {String s1 = normalisedVersion (v1); Строка s2 = нормализованная версия (v2); int cmp = s1.compareTo (s2); Строка cmpStr = cmp & lt; 0? "& Л;" : cmp & gt; 0? "& GT;" : "=="; System.out.printf ("'% s'% s '% s'% n", v1, cmpStr, v2); } public static String normalizedVersion (String version) {return normalisedVersion (версия, ".", 4); } public static String normalizedVersion (String version, String sep, int maxWidth) {String [] split = Pattern.compile (sep, Pattern.LITERAL) .split (версия); StringBuilder sb = new StringBuilder (); for (String s: split) {sb.append (String.format ("%" + maxWidth + 's', s)); } return sb.toString (); }}
Печатает
blockquote>'1.0' & lt; '1.1' '1.0.1' & lt; '1,1' '1,9' '1.10' '1.a' & gt; '1.9'
Вы получаете его прямо из патчей осей:
In [35]: for p in ax.patches:
ax.annotate(str(p.get_height()), (p.get_x() * 1.005, p.get_height() * 1.005))
Вы хотите настроить форматирование строк и смещения, чтобы получить объекты по центру, возможно, используйте ширину от p.get_width()
, но это должно заставить вас начать. Может не работать со штабелями, если вы не отслеживаете смещения где-нибудь.
Решение, которое обрабатывает также отрицательные значения с формированием плавающего образца.
Все еще нуждается в настройках смещения.
df=pd.DataFrame({'A':np.random.rand(2)-1,'B':np.random.rand(2)},index=['val1','val2'] )
ax = df.plot(kind='bar', color=['r','b'])
x_offset = -0.03
y_offset = 0.02
for p in ax.patches:
b = p.get_bbox()
val = "{:+.2f}".format(b.y1 + b.y0)
ax.annotate(val, ((b.x0 + b.x1)/2 + x_offset, b.y1 + y_offset))
for p in ax.patches: ax.annotate(np.round(p.get_height(),decimals=2), (p.get_x()+p.get_width()/2., p.get_height()), ha='center', va='center', xytext=(0, 10), textcoords='offset points')
– leroygr 22 August 2014 в 15:34ax.annotate(str(p.get_width()), (p.get_x() + p.get_width(), p.get_y()), xytext=(5, 10), textcoords='offset points')
– ksindi 4 January 2016 в 21:00ax.annotate(str(int(p.get_width())), (p.get_x() + p.get_width(), p.get_y()), xytext=(-2, 4), textcoords='offset points', horizontalalignment='right')
+1 – DaveL17 14 December 2016 в 23:02