py 之xlsxwriter 操作生成柱状图,饼图。

  1 import xlsxwriter
  2 import time
  3 
  4 def charts(product_name, dict_data, crash_data_list, report_path):
  5     if len(dict_data) <= 0 or len(crash_data_list) <= 0:
  6         return

7 current_time = time.localtime(time.time()) 8 current_time = time.strftime("%Y%m%d%H%M%S", current_time) 9 10 plot_file_path = 'product_plot_{}.xlsx' 11 workbook = xlsxwriter.Workbook(plot_file_path) 12 worksheet = workbook.add_worksheet(product_name) 13 14 worksheet_date = workbook.add_worksheet('date') 15 worksheet_date_headings = ['date', 'date_count'] 16 bold = workbook.add_format({'bold': 1})       #设置格式 17 19 data = list() 20 date_list = list() 21 date_crash_list = list() 22 23 sort_dump_dict = {} 24 for i in sorted (dict_data): 25 sort_dump_dict[i] = dict_data[i] 26 27 for k, v in sort_dump_dict.items(): 28 date_list.append(k) 29 date_crash_list.append(len(v)) 30 31 data.append(date_list) 32 data.append(date_crash_list) 33 data.append([crash_data_list[0]]) 34 data.append([crash_data_list[1]]) 35 data.append([crash_data_list[2]]) 36 data.append([crash_data_list[3]]) 37 data.append([crash_data_list[4]]) 38 data.append([crash_data_list[5]]) 39 40 format = workbook.add_format() 41 format.set_text_wrap() 42 worksheet.set_column('A:A', 10, format) #上述构造数据 44 45 print('exlce_data: ', data) 46 worksheet.write_column('A100', data[0]) 47 worksheet.write_column('B100', data[1]) 48 49 worksheet_date.write_row('A1', worksheet_date_headings, bold) 50 worksheet_date.write_column('A2', data[0]) 51 worksheet_date.write_column('B2', data[1]) 52 53 data_format = { 54 'align': 'right', # 水平位置设置:右对齐 55 'valign': 'vcenter' # 垂直位置设置,居中 56 } 57 right_format = workbook.add_format(data_format) 58 worksheet.write_row('A1', ["product_name"], bold) 59 worksheet.write_row('A2', ["effective_data"], bold) 60 worksheet.write_row('A3', ["other_data"], bold) 61 worksheet.write_row('A4', ["count"], bold) 62 worksheet.write_row('A5', ["point"], bold) 63 worksheet.write_row('A6', ["DUA"], bold) 64 worksheet.write_row('A7', ["rate"], bold) 65
#行写入数据 注意第二参数是list,第三参数的格式需要添加进工作簿才能生效 66 worksheet.write_row('B1', [product_name], right_format) 67 worksheet.write_row('B2', [crash_data_list[0]], right_format) 68 worksheet.write_row('B3', [crash_data_list[1]], right_format) 69 worksheet.write_row('B4', [crash_data_list[2]], right_format) 70 worksheet.write_row('B5', [crash_data_list[3]], right_format) 71 worksheet.write_row('B6', [crash_data_list[4]], right_format) 72 worksheet.write_row('B7', [crash_data_list[5]], right_format) 73 74 # 创建一个图表,类型是column 75 columnar_chart = workbook.add_chart({'type': 'column'}) 76 line_chart = workbook.add_chart({'type': 'line'}) 77 78 # 配置series,这个和前面worksheet是有关系的。 79 # 指定图表的数据范围 80 columnar_chart.add_series({ 81 'name': '={}!$B$1'.format(product_name), 82 'categories': '={}!$A$100:$A${}'.format(product_name, 100 + len(date_list)), 83 'values': '={}!$B$100:$B${}'.format(product_name, 100 + len(date_crash_list)), 84 'data_labels': {'value': True}, 85 }) 86 #设置列宽 列宽自适应 像素点转磅 87 worksheet.set_column('A1:A{}'.format(len(date_list)), 33) 88 worksheet.set_column('B1:B{}'.format(len(date_crash_list)), 13) 89 worksheet_date.set_column('A1:A{}'.format(len(date_list)), 15) 90 worksheet_date.set_column('B1:B{}'.format(len(date_crash_list)), 24) 91 92 # 添加图表标题和标签 93 columnar_chart.set_title({'name': 'Results of datga analysis'}) 94 columnar_chart.set_x_axis({'name': 'datas analysis result'}) 95 columnar_chart.set_y_axis({'name': 'Sample length (mm)'}) 96 97 # 设置图表风格 98 columnar_chart.set_style(11) 99 columnar_chart.set_size({'width': 750, 'height': 400}) 100 columnar_chart.set_legend({'position': 'top'}) 101 columnar_chart.set_y_axis({ 102 'major_gridlines': { 103 'visible': False, 104 'line': {'none': True} 105 }, 106 'line': {'none': True}, 107 'num_font': {'color': '#FFFFFF'}, 108 109 }) 110 # 在D2单元格插入图表(带偏移) 111 columnar_chart.combine(line_chart) 112 worksheet.insert_chart('F1', columnar_chart) 113 114 pie_chart = workbook.add_chart({'type': 'pie'}) 115 pie_chart.set_style(3) 116 pie_chart.set_size({'width': 500, 'height': 420}) 117 pie_chart.set_legend({'position': 'bottom'}) 118 pie_chart.add_series({ 119 # "name":"饼形图", 120 "categories": "={}!$A$2:$A$3".format(product_name), 121 "values": "={}!$B$2:$B$3".format(product_name), 122 # 定义各饼块的颜色 123 "points": [ 124 {"fill": {"color": "red"}}, 125 {"fill": {"color": "green"}} 126 ], 127 'data_labels': { 128 # 显示数值 129 'value': True, 130 # 显示百分比 131 'percentage':True, 132 'leader_lines': True, 133 'category': True, 134 'separator': "\n", 135 'border': {'color': '#7F7F7F','transparency': 100}, #使用transparency关键字来设置透明度 136 }, #显示标签 137 }) 138 pie_chart.set_title({"name": "data_type"}) 139 worksheet.insert_chart('H21', pie_chart) 140 workbook.close()

 

posted on 2022-01-11 16:21  流若浅  阅读(101)  评论(0编辑  收藏  举报

导航