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集合用法实例分析
May 30 Python
Python中字符串的处理技巧分享
Sep 17 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 Python
对python中使用requests模块参数编码的不同处理方法
May 18 Python
Python中面向对象你应该知道的一下知识
Jul 10 Python
自定义django admin model表单提交的例子
Aug 23 Python
python元组和字典的内建函数实例详解
Oct 22 Python
python实现Oracle查询分组的方法示例
Apr 30 Python
keras的ImageDataGenerator和flow()的用法说明
Jul 03 Python
利用Python判断整数是否是回文数的3种方法总结
Jul 07 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与jquery设置和读取cookies
2013/08/08 PHP
PHP实现今天是星期几的几种写法
2013/09/26 PHP
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
PHP调用wsdl文件类型的接口代码分享
2014/11/19 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
Python使用urllib2获取网络资源实例讲解
2013/12/02 Python
十个Python程序员易犯的错误
2015/12/15 Python
python中文件变化监控示例(watchdog)
2017/10/16 Python
对python的输出和输出格式详解
2018/12/08 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
工会主席岗位责任制
2014/02/11 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
个人先进材料范文
2014/12/30 职场文书
团委工作总结2015
2015/04/02 职场文书
黄河绝恋观后感
2015/06/08 职场文书
团委副书记工作总结
2015/08/14 职场文书