当有数据想要进行横向纵向同步比较时,三维柱状图是最好的选择,目前基础的word和excel还不具备此功能,可以使用专业画图软件origin pro来做,python也是很多人首先想到的。网上搜了一下关于python绘制三维柱状图,没有找到可用的,偶然间发现一个第三方库pyecharts,不仅可以绘制三维图,还能动态展示,生成的是html文件。
中文文档地址:http://pyecharts.herokuapp.com/;github项目源码
仅以下方数据示例,更复杂的操作请参看GitHub
我的原始数据都是按100算的,所以在函数中有用除以100计算,如果数据正好是1以内,可以不做除以100处理
import random
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar3D
import pandas as pd
import numpy as np
def 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,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018]
data_pre=[]
num=1
N=0
for st in data_tip:
ofr=0
for dy in data_year:
fuck = [st,dy,float(init_data[ofr][num]/100)] # 原始数据做除以100处理,使其位于0-1之间
data_pre.append(fuck)
N = N+1
ofr = ofr+1
num = num+1
return data_pre
def bar3d_base() -> Bar3D:
data = read_do()
data_tip=['GDP增速','常住人口城镇化率','第二产业占GDP比重','第三产业占GDP比重','城市恩格尔系数','公园绿地建成区绿化覆盖率', '居民消费价格指数','商品零售价格指数','工业生产者出厂价格指数']
data_year=[2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018]
c = (
Bar3D()
.add(
"",
data,
xaxis3d_opts = opts.Axis3DOpts(data_tip,type_="category",max_=9),
yaxis3d_opts = opts.Axis3DOpts(data_year,type_="time",max_=2019),
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 c
abc = bar3d_base()
abc.render("青岛指标.html")