Python openpyxl 插入折线图实例


Posted in Python onApril 17, 2020

我就废话不多说了,还是直接看代码吧!

import os
import openpyxl

from datetime import date
from openpyxl import Workbook

from openpyxl.chart import (
 Series,
 LineChart,
 Reference,
)
def add_line_chart(title, wss, min_col, min_row, max_col, max_row):
 c1 = LineChart()
 c1.title = title # 图的标题
 c1.style = 12 # 线条的style
 c1.y_axis.title = 'percent' # y坐标的标题
 if 'IDC' not in title:
  c1.x_axis.number_format = 'd-mmm' # 规定日期格式 这是月,年格式
  c1.x_axis.majorTimeUnit = "Months" # 规定日期间隔 注意days;Months大写
 c1.x_axis.title = "Date" # x坐标的标题
 data = Reference(wss, min_col=min_col, min_row=min_row, max_col=max_col, max_row=max_row) # 图像的数据 起始行、起始列、终止行、终止列
 c1.add_data(data, titles_from_data=True, from_rows=True)
 dates = Reference(wss, min_col=2, min_row=1, max_col=max_col)
 c1.set_categories(dates)
 wss.add_chart(c1, "A6") # 将图表添加到 sheet中


def save_data_to_excel(file_name, target_sheet_name):
 select_cursor = connect.cursor()
 select_sql = "select phone_company, record_date, record_percent from phone_statistics where record_company = '%s'" % target_sheet_name
 if target_sheet_name == "IDC":
  select_sql = "select phone_company, record_q, record_percent from phone_statistics where record_company = '%s'" % target_sheet_name
 select_cursor.execute(select_sql, ())

 data_dic = {}
 all_date = {}
 all_phone_company = {}
 for item in select_cursor:
  if target_sheet_name == "IDC":
   data_dic[item[0] + '_' + item[1]] = item[2]
  else:
   if type(item[1]) == str:
    data_dic[item[0] + '_' + item[1]] = item[2]
   else:
    data_dic[item[0] + '_' + item[1].strftime("%Y-%m-%d")] = item[2]
  all_date[item[1]] = 1
  all_phone_company[item[0]] = 1

 if os.path.exists(file_name):
  wb = openpyxl.load_workbook(file_name)
 else:
  wb = Workbook()

 try:
  wb.remove_sheet(wb['Sheet'])
 except Exception as e:
  pass
 try:
  wb.remove_sheet(wb[target_sheet_name])
 except Exception as e:
  pass

 try:
  sheet = wb[target_sheet_name]
 except Exception as e:
  sheet = wb.create_sheet()

 start_date_index = 'B'
 for each_date in all_date.keys():

  if target_sheet_name == "IDC":
   sheet['%s1' % start_date_index] = each_date
  else:
   if type(each_date) == str:
    sheet['%s1' % start_date_index] = each_date
   else:
    sheet['%s1' % start_date_index] = each_date.strftime("%Y-%m-%d")
  start_date_index = chr(ord(start_date_index) + 1)

 start_name_index = 2
 for each_name in all_phone_company.keys():
  sheet['A%d' % start_name_index] = each_name
  start_name_index += 1

 start_date_index = 'B'
 start_name_index = 2
 for each_date in all_date.keys():
  for each_name in all_phone_company.keys():

   if target_sheet_name == "IDC":
    key = each_name + '_' + each_date
    if key in data_dic:
     sheet['%s%d' % (start_date_index, start_name_index)] = data_dic[key]
   else:
    if type(each_date) == str:
     key = each_name + '_' + each_date
    else:
     key = each_name + '_' + each_date.strftime("%Y-%m-%d")
    if key in data_dic:
     sheet['%s%d' % (start_date_index, start_name_index)] = data_dic[key]
   start_name_index += 1
  start_date_index = chr(ord(start_date_index) + 1)
  start_name_index = 2

 sheet.title = target_sheet_name
 sheet.column_dimensions['A'].width = 20
 start_date_index = 'B'
 for each_date in all_date.keys():
  sheet.column_dimensions[start_date_index].width = 13
  start_date_index = chr(ord(start_date_index) + 1)

 add_line_chart(target_sheet_name.upper() + "'s Phone Statistics", sheet, 1, 2, len(all_date.keys()) + 1,
     min(15, len(all_phone_company.keys()) + 1))

 wb.save(file_name)
 pass

Python openpyxl 插入折线图实例

补充知识:python plotly line chart 折线图

我就废话不多说了,还是直接看代码吧!

# 1 折线图数据
# trace1 - 基本格式
# trace2 - 更多参数
trace1 = go.Scatter(
 x = x1,
 y = y2,
)
trace2 = go.Scatter(
 x = x2,
 y = y2,
 mode = 'lines', # 模式:lines 线,markers 点。可用“+”相连
 name = 'line2', # 折线名,显示于图例
 connectgaps = True # 连接缺失点两端 默认False
 line = dict(
  color = ('rgb(205, 12, 24)'), # 颜色
  width = 4, #线宽
  dash = 'dash') # 虚线: dash 一一,dot ···,dashdot 一·一
) 
)

# 2 打包数据
data = [trace1,trace2]

# 3 格式
layout = dict(title = '折线',
    xaxis = dict(title = '时间'), # 横轴坐标
    yaxis = dict(title = '数量'), # 总轴坐标
    legend=dict(x=1.1,y=1) # 图例位置 
    )

# 4 打包数据+格式
fig = dict(data=data, layout=layout)

# 5 画图
py.iplot(fig, filename='styled-line')

以上这篇Python openpyxl 插入折线图实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中用startswith()函数判断字符串开头的教程
Apr 07 Python
Python中Collections模块的Counter容器类使用教程
May 31 Python
python中的格式化输出用法总结
Jul 28 Python
python字典操作实例详解
Nov 16 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 Python
Python中asyncio模块的深入讲解
Jun 10 Python
使用python 写一个静态服务(实战)
Jun 28 Python
Python pip 安装与使用(安装、更新、删除)
Oct 06 Python
python3通过qq邮箱发送邮件以及附件
May 20 Python
通俗讲解python 装饰器
Sep 07 Python
pandas实现导出数据的四种方式
Dec 13 Python
python 画图 图例自由定义方式
Apr 17 #Python
关于python 的legend图例,参数使用说明
Apr 17 #Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 #Python
python matplotlib实现将图例放在图外
Apr 17 #Python
python 比较字典value的最大值的几种方法
Apr 17 #Python
Python3 selenium 实现QQ群接龙自动化功能
Apr 17 #Python
python plt可视化——打印特殊符号和制作图例代码
Apr 17 #Python
You might like
强烈推荐:php.ini中文版(1)
2006/10/09 PHP
十天学会php之第九天
2006/10/09 PHP
在Nginx上部署ThinkPHP项目教程
2015/02/02 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
面向对象的javascript(笔记)
2009/10/06 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
js字符串转成JSON
2013/11/07 Javascript
JavaScript动态改变表格单元格内容的方法
2015/03/30 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
简单了解python 邮件模块的使用方法
2019/07/24 Python
python配置文件写入过程详解
2019/10/19 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
Windows和Linux动态库应用异同
2016/07/28 面试题
模具设计与制造专业应届生求职信
2013/10/18 职场文书
军校本科大学生自我评价
2014/01/14 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
调解协议书范本
2016/03/21 职场文书
python实现会员信息管理系统(List)
2022/03/18 Python