点击查看【bilibili】
全代码
#数据大屏.pyfrom pyecharts.options import ComponentTitleOptsfrom pyecharts.charts import Bar, Grid, Line, Liquid, Page, Pie, Geo, Radarfrom pyecharts.components import Tablefrom pyecharts import options as optsfrom pyecharts.commons.utils import JsCodefrom pyecharts.globals import ChartType, SymbolTypefrom pyecharts.globals import ThemeTypefrom pyecharts.faker import Fakerimport xlwings as xwimport pandas as pddef read_excel(path, sheet_number): pd.set_option('display.max_columns', None) #解决表格多列时中间省略显示问题(本程序用不到) pd.set_option('display.max_rows', None) #解决表格多行时中间省略显示问题(本程序用不到) pd.set_option('display.width', 5000) #解决表格打印换行 #读取excel文件中的数据 app = xw.App(visible = False, add_book = False) #path = r"C:\Users\admin\Desktop\xlwings\时间轮播图\CDE化药各类注册申请接收情况.xlsx" workbook = app.books.open(path) worksheet = workbook.sheets[sheet_number] values = worksheet.range("A1").expand().options(pd.DataFrame, index = False).value print(values) workbook.close() app.quit() return valuesdef table_base() -> Table: table = Table() #构造符合要求的数据 path = "大屏数据.xlsx" sheet_number = 0 values = read_excel(path, sheet_number) row1 = values["治疗领域"] #读取列数据 row2 = values["创新品种"] row3 = values["靶点/机理"] row4 = values["项目进度"] headers_values = ["治疗领域", "创新品种", "靶点/机理", "项目进度"] data = [] for i in range(len(row1)): line = [row1[i], row2[i], row3[i], row4[i]] data.append(line) print(data) #绘制表格 #table = Table() headers = headers_values rows = data table.add(headers, rows) table.set_global_opts( title_opts=ComponentTitleOpts(title="创新项目进度", #subtitle="数据只是模拟-穿云蟒" ) ) return tabledef Geo_line() -> Geo: c = ( Geo() .add_schema(maptype="china", #label_opts=opts.LabelOpts(is_show=True) #显示各省名字 ) .add( "", [("广州", 55), ("北京", 66), ("杭州", 77), ("重庆", 88), ("新疆", 35)], type_=ChartType.EFFECT_SCATTER, color="white", ) .add( "geo", [("广州", "新疆"),("广州", "北京"), ("广州", "杭州"), ("广州", "重庆")], type_=ChartType.LINES, effect_opts=opts.EffectOpts( symbol=SymbolType.ARROW, symbol_size=6, color="blue" #移动箭头的参数 ), linestyle_opts=opts.LineStyleOpts(curve=0.4), #线条的弯曲度 ) #.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) .set_series_opts(label_opts=opts.LabelOpts(is_show=True,formatter='{b}',color='black')) #显示点标签为省名称 .set_global_opts(title_opts=opts.TitleOpts(title="Geo-Lines"), visualmap_opts=opts.VisualMapOpts(),) ) return cdef bar_line() : path = "大屏数据.xlsx" sheet_number = 2 values = read_excel(path, sheet_number) values = values.sort_values(by = "采购量",ascending = False) #数据按指定维度排序 x_data = values['项目'].tolist() yvalues1 = values['使用量'].tolist() yvalues2 = values['库存量'].tolist() yvalues3 = values['长期未用量'].tolist() yvalues4 = values['预算量'].tolist() bar = ( Bar(init_opts=opts.InitOpts(width="1176px", height="560px")) .add_xaxis(xaxis_data=x_data) .add_yaxis( series_name="使用量", y_axis = yvalues1, stack="stack1", #设置堆叠 label_opts=opts.LabelOpts(is_show=False), ) .add_yaxis( series_name="库存量", y_axis= yvalues2, stack="stack1", #设置堆叠 label_opts=opts.LabelOpts(is_show=False), ) .add_yaxis( series_name="长期未用量", y_axis= yvalues3, gap="0%", category_gap=20, label_opts=opts.LabelOpts(is_show=False), ) .extend_axis( yaxis=opts.AxisOpts( name="金额", type_="value", min_=0, max_=400, interval=50, axislabel_opts=opts.LabelOpts(formatter="{value} 万元"), #°C ) ) .set_global_opts( title_opts=opts.TitleOpts(title="CYM 2020年研发项目物料采购使用图(demo)", subtitle="数据更新时间:2021-9-11"), legend_opts=opts.LegendOpts( pos_top="10%", pos_left="50%"), #设置图例 tooltip_opts=opts.TooltipOpts( is_show=True, trigger="axis", axis_pointer_type="cross" ), xaxis_opts=opts.AxisOpts( type_="category", axislabel_opts=opts.LabelOpts(rotate=-30), #设置X轴标签倾斜 axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"), ), yaxis_opts=opts.AxisOpts( name="", type_="value", min_=0, max_=400, interval=50, axislabel_opts=opts.LabelOpts(formatter="{value} 万元"), axistick_opts=opts.AxisTickOpts(is_show=True), splitline_opts=opts.SplitLineOpts(is_show=True), ), ) ) line = ( Line() .add_xaxis(xaxis_data=x_data) .add_yaxis( series_name="预算量", yaxis_index=1, y_axis = yvalues4, label_opts=opts.LabelOpts(is_show=False), ) ) c = bar.overlap(line) return cdef pie_K() : path = "大屏数据.xlsx" sheet_number = 3 values = read_excel(path, sheet_number) #构造数据 x_data = values['名称'].tolist() y_data = values['数量'].tolist() data = [[x_data[i], y_data[i]] for i in range(len(x_data))] print(data) print(len(data)) #饼图的绘制 c = ( Pie() .add( "", #设置系列名称 data, #设置数据 center=["43%", "50%"], #设置图形所在的位置左右距离 radius=["40%", "75%"], #设置环形饼图 #rosetype="area" #设置为玫瑰图 radius 半径 area 面积 ) #.set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"]) #设置颜色 .set_global_opts( title_opts=opts.TitleOpts(title="Pie系列图的绘制"), #设置标题 #legend_opts=opts.LegendOpts( pos_top="10%", pos_left="80%",orient="vertical"), #设置图例 legend_opts=opts.LegendOpts( is_show=False,pos_top="90%"), #设置图例 ) .set_series_opts( label_opts=opts.LabelOpts(formatter="{b}: {c} \n({d}%)"), #设置显示标签 tooltip_opts=opts.TooltipOpts( #设置鼠标触发显示标签 trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)" ) ) ) return cdef liquid_data_precision() -> Liquid: c = ( Liquid() .add( "lq", [0.3254], label_opts=opts.LabelOpts( font_size=50, formatter=JsCode( """function (param) { return (Math.floor(param.value * 10000) / 100) + '%'; }""" ), position="inside", ), ) .set_global_opts(title_opts=opts.TitleOpts(title="销售完成率")) ) return cdef page_draggable_layout(): page = Page(layout=Page.DraggablePageLayout) page.add( pie_K(), Geo_line(), table_base(), liquid_data_precision(), bar_line(), ) page.render("page_draggable_layout.html")if __name__ == "__main__": #page_draggable_layout() Page.save_resize_html("page_draggable_layout.html", cfg_file="chart_config.json", dest="my_new_charts.html")