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实现监控windows服务并自动启动服务示例
Apr 17 Python
python追加元素到列表的方法
Jul 28 Python
Django学习笔记之ORM基础教程
Mar 27 Python
python指定写入文件时的编码格式方法
Jun 07 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
Python numpy多维数组实现原理详解
Mar 10 Python
python os模块常用的29种方法使用详解
Jun 02 Python
解决python 虚拟环境删除包无法加载的问题
Jul 13 Python
详解Python利用configparser对配置文件进行读写操作
Nov 03 Python
使用Python下载抖音各大V视频的思路详解
Feb 06 Python
python装饰器代码解析
Mar 23 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
在线增减.htpasswd内的用户
2006/10/09 PHP
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
php查看session内容的函数
2008/08/27 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
javascript String 对象
2008/04/25 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
使用SAE部署Python运行环境的教程
2015/05/05 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
python 链接和操作 memcache方法
2017/03/04 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
python实现烟花小程序
2019/01/30 Python
Python----数据预处理代码实例
2019/03/20 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
如何写一个自定义标签
2012/12/28 面试题
Servlet方面面试题
2016/09/28 面试题
通信工程毕业生求职信
2013/11/16 职场文书
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
大学计划书范文800字
2014/08/14 职场文书
学生实习证明范文
2014/09/28 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
Vue和Flask通信的实现
2021/05/19 Vue.js
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript
Golang 对es的操作实例
2022/04/20 Golang
Python 图片添加美颜效果
2022/04/28 Python
MySQL常用慢查询分析工具详解
2022/08/14 MySQL