目录
1. 原始数据2. 代码3. 结果当有数据想要进行横向纵向同步比较时,三维柱状图是最好的选择,目前基础的word和excel还不具备此功能,可以使用专业画图软件origin pro来做,python也是很多人首先想到的。网上搜了一下关于python绘制三维柱状图,没有找到可用的,偶然间发现一个第三方库pyecharts,不仅可以绘制三维图,还能动态展示,生成的是html文件。
中文文档地址:/;github项目源码
仅以下方数据示例,更复杂的操作请参看GitHub
1. 原始数据
我的原始数据都是按100算的,所以在函数中有用除以100计算,如果数据正好是1以内,可以不做除以100处理
2. 代码
import randomfrom pyecharts.faker import Fakerfrom pyecharts import options as optsfrom pyecharts.charts import Bar3Dimport pandas as pdimport numpy as npdef read_do(): #负责数据的读取和整理init_data=pd.read_excel(r"D:\python\pra\画图\青岛指标.xlsx")init_data=np.array(init_data)data_tip=['GDP增速','常住人口城镇化率','第二产业占GDP比重','第三产业占GDP比重','城市恩格尔系数','公园绿地建成区绿化覆盖率','居民消费价格指数','商品零售价格指数','工业生产者出厂价格指数']data_year=[2000,2001,2002,,,,,,,,,,,,,,,,]data_pre=[]num=1N=0for st in data_tip:ofr=0for dy in data_year:fuck = [st,dy,float(init_data[ofr][num]/100)] # 原始数据做除以100处理,使其位于0-1之间data_pre.append(fuck)N = N+1ofr = ofr+1num = num+1return data_predef bar3d_base() -> Bar3D:data = read_do()data_tip=['GDP增速','常住人口城镇化率','第二产业占GDP比重','第三产业占GDP比重','城市恩格尔系数','公园绿地建成区绿化覆盖率', '居民消费价格指数','商品零售价格指数','工业生产者出厂价格指数']data_year=[2000,2001,2002,,,,,,,,,,,,,,,,]c = (Bar3D().add("",data,xaxis3d_opts = opts.Axis3DOpts(data_tip,type_="category",max_=9),yaxis3d_opts = opts.Axis3DOpts(data_year,type_="time",max_=),zaxis3d_opts = opts.Axis3DOpts(type_="value",max_=1), # 此处最大值为1,也可以自行设置,不过值过大颜色都是红色grid3d_opts = opts.Grid3DOpts(width="280",height="100")).set_global_opts(visualmap_opts = opts.VisualMapOpts(max_=1),title_opts = opts.TitleOpts(title = "青岛指标"),))return cabc = bar3d_base()abc.render("青岛指标.html")
3. 结果
可以看到,图片左侧有一个颜色条,表示0-1的数值,故要将数据处理为0-1之间。
可以旋转查看,是动态的。