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中AND、OR的一个使用小技巧
Feb 18 Python
Python中的字符串查找操作方法总结
Jun 27 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 Python
Idea安装python显示无SDK问题解决方案
Aug 12 Python
Python 创建守护进程的示例
Sep 29 Python
Python中Selenium模块的使用详解
Oct 09 Python
python爬取微博评论的实例讲解
Jan 15 Python
Python plt 利用subplot 实现在一张画布同时画多张图
Feb 26 Python
python ConfigParser库的使用及遇到的坑
Feb 12 Python
Python学习之os包使用教程详解
Mar 21 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面向对象分析设计的61条军规小结
2010/07/17 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
JS input 数字验证代码
2009/07/30 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
JavaScript中this详解
2015/09/01 Javascript
Ionic如何实现下拉刷新与上拉加载功能
2016/06/03 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
Python中二维列表如何获取子区域元素的组成
2017/01/19 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
文员自我评价怎么写
2013/09/19 职场文书
2014升学宴答谢词
2014/01/26 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
会计岗位工作总结
2015/08/12 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书
Elasticsearch 索引操作和增删改查
2022/04/19 Python