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实现partial改变方法默认参数
Aug 18 Python
Python命令行参数解析模块optparse使用实例
Apr 13 Python
python实现TCP服务器端与客户端的方法详解
Apr 30 Python
Python实现通讯录功能
Feb 22 Python
详解用python写一个抽奖程序
May 10 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
Python3 执行系统命令并获取实时回显功能
Jul 09 Python
把django中admin后台界面的英文修改为中文显示的方法
Jul 26 Python
Pytorch 多维数组运算过程的索引处理方式
Dec 27 Python
tensorflow与numpy的版本兼容性问题的解决
Jan 08 Python
python 自动化偷懒的四个实用操作
Apr 11 Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 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
第十二节--类的自动加载
2006/11/16 PHP
php中看实例学正则表达式
2006/12/25 PHP
php htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
PHP实现变色验证码实例
2014/01/06 PHP
PHP数组和explode函数示例总结
2015/05/08 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
PHP实现的简单sha1加密功能示例
2017/08/27 PHP
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
JavaScript学习笔记之数组求和方法
2016/03/23 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
JavaScript中的函数式编程详解
2020/08/22 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
基于python时间处理方法(详解)
2017/08/14 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
Python内置异常类型全面汇总
2020/05/28 Python
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
外贸英语毕业生自荐信
2013/11/14 职场文书
旷课检讨书2000字
2014/01/14 职场文书
爷爷追悼会答谢词
2014/01/24 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
革命电影观后感
2015/06/18 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
排球赛新闻稿
2015/07/17 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
关于军训的感想
2015/08/07 职场文书
Linux安装Docker详细教程
2022/07/07 Servers