python学习之柱状图

需求背景

最近需要分析数据,之前画过折线图,这一次需要画柱状图。做项目的同时学习一点其他的小技能。
现在需要将固定格式的数据,画成柱状图,将同一个点的数据,求出最大值,和最小值使用柱状图显示出来。
实际的数据

 test_down_id:1061, y:5
test_down_id:1061, y:5
test_down_id:1061, y:5
test_down_id:1062, y:-2
test_down_id:1062, y:-3
test_down_id:1062, y:-3
test_down_id:1062, y:-4
test_down_id:1063, y:6
test_down_id:1063, y:8

画柱状图还是很简单的,使用plt的bar属性就可以了。需要注意的是,怎样显示柱状图上的数字,这个是需要使用plt.txt属性显示的,单独使用bar没法显示出来

代码

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
import sys
import io

tag_cnt = 50

tag_list = []
tag_list_print = [0 for x in range(0, tag_cnt)]
max_list = [0 for x in range(0, tag_cnt)] 
min_list = [0 for x in range(0, tag_cnt)] 

f = io.open(sys.argv[1],'r',encoding='utf-8')

# find the every id max value
while 1:
    line = f.readline()
    if not line:
        break;
    value1 = line.split(",", 1)[0]
    tag = int(value1.split(":", 1)[1])
    value2 = line.split(",", 1)[1]
    y = int(value2.split(":", 1)[1])

    #find the max value 
    if ( y >= 0) :
        if(1 == tag_list.count(tag)) :
            pos = tag_list.index(tag)
            if (pos >= tag_cnt) :
                break;
            if (y > max_list[pos]) :
                max_list[pos] = y
        else :
            tag_list.append(tag)
            pos = tag_list.index(tag)
            if (pos >= tag_cnt) :
                break;
            max_list[pos] = y

    #find min value
    if ( y < 0) :
        if(1 == tag_list.count(tag)) :
            pos = tag_list.index(tag)
            if (pos >= tag_cnt) :
                break;
            if (y < min_list[pos]) :
                min_list[pos] = y
        else :
            tag_list.append(tag)
            pos = tag_list.index(tag)
            if (pos >= tag_cnt) :
                break;
            min_list[pos] = y

# the num of x and y must be the same
for i in range(len(tag_list)):
    tag_list_print[i] = tag_list[i];

tag_list_print2 = tag_list_print
print("min_list", len(min_list))
print(min_list)
print("max_list", len(max_list))
print(max_list)
print("print_list", len(tag_list_print))
print(tag_list_print)

plt.title("the max diff in every tags")
plt.ylabel("max_diff (uint mm)")
plt.xlabel("tags num")
# param :x_list, y_list , width, x_show, color,plt.bar(range(tag_cnt), max_list, width = 1, tick_label=tag_list_print, facecolor='red' ,label = '+y_predict')

plt.bar(range(tag_cnt), max_list, width = 1, tick_label=tag_list_print, facecolor='red' ,label = '+y_predict')
plt.bar(range(tag_cnt), min_list, width = 1, tick_label=tag_list_print, facecolor='green', label = '-y_predict')

for xx, yy in zip(range(tag_cnt), max_list):
    plt.text(xx, yy+0.1, str(yy), ha = "left", va = 'bottom', fontsize = 9)

for xx, yy in zip(range(tag_cnt), min_list):
    plt.text(xx, yy+0.1, str(yy), ha = "right", va = 'top', fontsize = 9)

plt.legend()
plt.show()

显示效果如下:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值