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实现从订阅源下载图片的方法
Mar 11 Python
详解Python中的各种函数的使用
May 24 Python
Python读取图片属性信息的实现方法
Sep 11 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
Python对多属性的重复数据去重实例
Apr 18 Python
Django实现支付宝付款和微信支付的示例代码
Jul 25 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
Apr 24 Python
Python过滤掉numpy.array中非nan数据实例
Jun 08 Python
python中super()函数的理解与基本使用
Aug 30 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
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
URL中“#” “?” &“”号的作用浅析
2017/02/04 Javascript
canvas实现钟表效果
2017/02/13 Javascript
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
Windows下安装Scrapy
2018/10/17 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
Python @property原理解析和用法实例
2020/02/11 Python
使用Tkinter制作信息提示框
2020/02/18 Python
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
保护动物倡议书
2014/04/15 职场文书
访谈节目策划方案
2014/05/15 职场文书
体育教师个人总结
2015/02/09 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server
Java实现二分搜索树的示例代码
2022/03/17 Java/Android
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL
Redis数据同步之redis shake的实现方法
2022/04/21 Redis