如何在python中调整条形图中的条形值位置?

时间:2018-08-24 06:50:11

标签: python matplotlib bar-chart

我想移动条形图中的条形值,以使它们不会彼此合并。我的代码如下。

 final ObjectMapper objectMapper = new 
 ObjectMapper().enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);

 objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
 try {
      String jsonInString = objectMapper.writeValueAsString(products.get(j));
      InventoryParser inventoryParser = objectMapper.readValue(jsonInString, 
                                       InventoryParser.class);

      System.out.println(inventoryParser.getId());

     } 
     catch (IOException e) 
     {
       e.printStackTrace();
     }

下面给出了这段代码的结果。

bar values are merged.

我想要在图像中显示的内容如下所示,在该位置上,我可以以不被合并且清晰可见的方式来放置条形值。

注意:应注意,我希望我的图像宽度相同。

my desired ouput

1 个答案:

答案 0 :(得分:1)

由于您不想增加图形大小,因此这里提供了一种廉价的手动黑客工具,以获取所需的内容。我只是粘贴修改后的代码。其余的一切都与您的代码相同。最后,我也缩短了您的set_color部分。附注:由于某些可视化/保存了图形,因此条形的宽度看起来有所不同。在我的屏幕上,它们看起来都一样宽。

def autolabel(rects):
    for i, rect in enumerate(rects):
        height = rect.get_height()
        if i == 2 or i ==7:
            ax.text(rect.get_x() + rect.get_width()/1., 1.07*height,
                '%.2f' %(height), ha='center', va='bottom')
            ax.vlines(rect.get_x() + rect.get_width()/3., 1.005*height, 1.07*height, lw=1, color='gray')
        else:    
            ax.text(rect.get_x() + rect.get_width()/1., 1.01*height,
                '%.2f' %(height), ha='center', va='bottom')

autolabel(rects1)

c = 7*['r'] + 5*['g'] + ['b'] 
for i, r in enumerate(rects1):
    r.set_color(c[i])

输出

enter image description here