数据可视化2---3D坐标轴

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import traceback
    
BJ = dict()
SH = dict()
GZ = dict()
SZ = dict()
ZB = dict() 
BJ_num = dict()
SH_num = dict()
GZ_num = dict()
SZ_num = dict()
ZB_num = dict()

hlist = list()
lbj = list()
lsh = list()
lsz = list()
lgz = list()
lzb = list()

def init():
    ulist = ['数据库管理员','网络工程师',
                 '网络管理员','系统工程师',
                 '信息主管','硬件工程师',
                 'ERP工程师','ERP实施顾问',
                 'erp实施顾问',
                 '软件实施工程师','实施工程师',
                 '项目实施工程师','数据库工程师',
                 '高级网络工程师','运维工程师']
    try:
        for i in range(len(ulist)):
            pos = ulist[i]
            BJ[pos]=SH[pos]=GZ[pos]=SZ[pos]=ZB[pos]=0
            BJ_num[pos]=SH_num[pos]=GZ_num[pos]=SZ_num[pos]=ZB_num[pos]=0
            hlist.append(pos)
    except:
        traceback.print_exc()
        print('ERROR1')

def BeiJing(pos,salary,area):
    try:
        BJ[pos] += salary
        BJ_num[pos] += 1
    except:
        print('ERROR2')
        
def ShangHai(pos,salary,area):
    try:
        SH[pos] += salary
        SH_num[pos] += 1
    except:
        print('ERROR3')
        
def GuangZhou(pos,salary,area):
    try:
        GZ[pos] += salary
        GZ_num[pos] += 1
    except:
        print('ERROR4')
        
def ShenZhen(pos,salary,area):
    try:
        SZ[pos] += salary
        SZ_num[pos] += 1
    except:
        print('ERROR5')
        
def ZiBo(pos,salary,area):
    try:
        ZB[pos] += salary
        ZB_num[pos] += 1
    except:
        print('ERROR6')

def chance(pos,salary,area):
    try:
        if(area == '北京'):
            BeiJing(pos,salary,area)
        elif(area == '广州'):
            ShangHai(pos,salary,area)
        elif(area == '深圳'):
            GuangZhou(pos,salary,area)
        elif(area == '上海'):
            ShenZhen(pos,salary,area)
        elif(area == '淄博'):
            ZiBo(pos,salary,area)
    except:
        print('ERROR7')

def search(pos):
    for i in range(len(hlist)):
        u = hlist[i]
        if(u == pos):
            j = 1
            break
        else:
            continue
    return j
    
def getData(count):
    num = 0
    fpath = "D:\数据\数据可视化\data.txt"
    with open(fpath,'r',encoding='utf-8') as f:
        for i in range(count):
            try:
                line = f.readline()
                pos = eval(line.split(',')[0])
                pos = pos.split('(')[0]
                pos = pos.split('-')[0]
                salary = eval(line.split(',')[2])
                if(salary == '面议'):
                    continue
                salary = salary.split('-')[1]
                salary = int(salary)
                area = eval(line.split(',')[3])
                area = area.split('-')[0]
                flag = search(pos)
                if(flag == 1):
                    num = num + 1
                    chance(pos,salary,area)
                else:
                    continue
            except:
                continue

def updateData():
    BJ['ERP实施顾问']+=BJ['erp实施顾问']
    BJ_num['ERP实施顾问']+=BJ_num['erp实施顾问']
    SH['ERP实施顾问']+=SH['erp实施顾问']
    SH_num['ERP实施顾问']+=SH_num['erp实施顾问']
    GZ['ERP实施顾问']+=GZ['erp实施顾问']
    GZ_num['ERP实施顾问']+=GZ_num['erp实施顾问']
    SZ['ERP实施顾问']+=SZ['erp实施顾问']
    SZ_num['ERP实施顾问']+=SZ_num['erp实施顾问']
    ZB['ERP实施顾问']+=ZB['erp实施顾问']
    ZB_num['ERP实施顾问']+=ZB_num['erp实施顾问']
    try:
        for k,v in BJ.items():
            if(BJ_num[k]!=0):
                v = int(v/BJ_num[k])
            else:
                v = 0
            lbj.append(v)
        for k,v in SZ.items():
            if(SZ_num[k]!=0):
                v = int(v/SZ_num[k])
            else:
                v = 0
            lsz.append(v)    
        for k,v in GZ.items():
            if(GZ_num[k]!=0):
                v = int(v/GZ_num[k])
            else:
                v = 0
            lgz.append(v)
        for k,v in SH.items():
            if(SH_num[k]!=0):
                v = int(v/SH_num[k])
            else:
                v = 0
            lsh.append(v)
        for k,v in ZB.items():
            if(ZB_num[k]!=0):
                v = int(v/ZB_num[k])
            else:
                v = 0
            lzb.append(v)
        lbj.pop(8)
        lsh.pop(8)
        lsz.pop(8)
        lgz.pop(8)
        lzb.pop(8)
        hlist.pop(8)
    except:
        print('ERROR8')

        
def draw_figure():
    wlist = [lbj,lsz,lgz,lsh,lzb]
    warea = ['北京','深圳','广州','上海','淄博']
    
    mpl.rcParams['font.size'] = 10
    mpl.rcParams['font.family'] = 'simHei'
    font = {'color':'orange',
            'size':12}
    font1 = {'color':'orange',
            'size':15}
    font2 = {'color':'cyan',
            'size':20}
    
    fig = plt.figure(figsize=(20,15))
    ax = fig.add_subplot(111,projection='3d')
    
    ind = np.arange(len(hlist))
    x = ind
    c = ['red','green','blue','yellow','purple']
    for i in range(5):
        y = wlist[i]
        ax.bar(x,y,i,zdir='y',color=c[i],alpha=0.8)
    ax.set_xticks(ind)
    ax.set_xticklabels(hlist,rotation=80)
    ax.set_yticks(np.arange(5))
    ax.set_yticklabels(warea,rotation=-10,fontdict = font)
    ax.set_xlabel('      职 业',fontdict = font1)
    ax.set_ylabel('    地区',fontdict = font1)
    ax.set_zlabel('工资',fontdict = font1)
    ax.set_title('各个地区对应职位的\'最高\'薪水统计',fontdict = font2)
    plt.savefig("D:\数据\hua.png")
    plt.show()
    
def main():
    init()
    getData(15710)
    updateData()
    draw_figure()
main()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值