python plot函数label_如何调整matplotlib中的autolabel函数,使其正确显示负值?

mathplotlib在那个部门没有很好的文档记录。尝试使用dir()函数来显示您正在处理的容器上的可用选项。我发现有一个.get_y()函数在这种情况下返回负数

请尝试此代码import pandas as pd

import matplotlib.pyplot as plt

from builtins import list

import matplotlib

matplotlib.style.use('ggplot')

import numpy as np

n_groups = 2

# create plot

fig, ax = plt.subplots()

fig.canvas.set_window_title('Mindestlohn Bundesweit')

index = np.arange(n_groups)

bar_width = 0.20

opacity = 0.8

list_reallohn_week_vollzeit = [-8.159698443426123, 11.395025597733763]

list_reallohn_week_teilzeit = [-1.048913873322391, 28.99318154295449]

list_reallohn_week_mini = [-7.552596893170488, 7.959096278017519]

rects1 = plt.bar(index + 0.00, list_reallohn_week_vollzeit, bar_width,

alpha=opacity,

color='b',

label='Vollzeit')

rects2 = plt.bar(index + bar_width, list_reallohn_week_teilzeit, bar_width,

alpha=opacity,

color='g',

label='Teilzeit')

rects3 = plt.bar(index + bar_width * 2,list_reallohn_week_mini, bar_width,

alpha = opacity,

color='c',

label='Mini Job')

label_week_lists = ('2015 Nicht MdL berechtigt', '2015 mit MdL')

plt.ylabel('EUR')

plt.title('Reallöhne pro Woche')

plt.xticks(index + bar_width, label_week_lists)

plt.legend(bbox_to_anchor=(1, 1),

bbox_transform=plt.gcf().transFigure)

def autolabel(rects, ax):

# Get y-axis height to calculate label position from.

(y_bottom, y_top) = ax.get_ylim()

y_height = y_top - y_bottom

for rect in rects:

# print(dir(rect))

height = 0

if rect.get_y() < 0:

height = rect.get_y()

else:

height = rect.get_height()

print(rect.get_height())

print( str(rect.get_y()) )

# Fraction of axis height taken up by this rectangle

p_height = (height / y_height)

# If we can fit the label above the column, do that;

# otherwise, put it inside the column.

if p_height > 0.95: # arbitrary; 95% looked good to me.

label_position = height - (y_height * 0.05)

else:

label_position = height + (y_height * 0.01)

ax.text(rect.get_x() + rect.get_width() / 2., label_position,

'%d' % int(height),

ha='center', va='bottom')

autolabel(rects1, ax)

autolabel(rects2, ax)

autolabel(rects3, ax)

plt.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值