openpyxl 图表误差线样式

2024-04-27

我被分配了一项“简单”的任务,即将一系列数据列收集到结果工作簿中。结果工作簿包含分析结果所需的公式和图表。这些数据是由我用 python 编写的图像分析应用程序生成的,作为一系列 Excel 工作簿。

现在的问题是 openpyxl 会删除 Excel 工作簿中的任何现有图表。我花了一天时间弄清楚如何使用 openpyxl 图表,其中有一些文档和图表错误栏,但没有任何示例。有一个来源,其中有简洁的评论..

使用 win32com 扩展将允许直接与 Excel 交互,但这显然无法工作,除非在 Windows 中并且安装了 Excel。情况可能并非如此。另外,尝试弄清楚如何以这种方式与 Excel 交互可能需要一段时间,而不是通过 VBA 宏进行交互。

..

对于设置图表样式,有一个相对较好的方法,其工作原理如下:

valuewidth=openpyxl.utils.units.points_to_pixels(2.25)
valuewidth=openpyxl.utils.units.pixels_to_EMU(valuewidth)
redcolor=openpyxl.drawing.colors.ColorChoice(prstClr="red")
bluecolor=openpyxl.drawing.colors.ColorChoice(prstClr="blue")

xvalues = openpyxl.chart.Reference(exceldata.sheetrep, min_col=exceldata.seriesx['column'], min_row=exceldata.seriesx['row'], max_row=exceldata.seriesx['row']+exceldata.seriesx['rows'])
values = openpyxl.chart.Reference(exceldata.sheetrep, min_col=exceldata.seriesy['column'], min_row=exceldata.seriesy['row'], max_row=exceldata.seriesy['row']+exceldata.seriesy['rows'])
series = openpyxl.chart.Series(values, xvalues, title_from_data=True)
series.graphicalProperties.line.width=valuewidth
series.graphicalProperties.line.solidFill=bluecolor
chart.series.append(series)

现在要使用误差线,必须像这样定义和创建它们:

errorwidth=openpyxl.utils.units.points_to_pixels(1)
errorwidth=openpyxl.utils.units.pixels_to_EMU(errorwidth)
errorlinetype=openpyxl.drawing.line.LineProperties(w=errorwidth, solidFill=redcolor)
errorline=openpyxl.chart.shapes.GraphicalProperties(ln=errorlinetype)
values = openpyxl.chart.Reference(exceldata.sheetrep, min_col=exceldata.lowerlim['column'], min_row=exceldata.lowerlim['row'])
xvalues = openpyxl.chart.Reference(exceldata.sheetrep, min_col=exceldata.lower['column'], min_row=exceldata.lower['row'])
chart.title="LL"
errorbar=openpyxl.chart.error_bar.ErrorBars(errBarType="minus",errValType="percentage",val=100.0, spPr=errorline)
errorbar.NumDataRef="LL"
series = openpyxl.chart.Series(values, xvalues, title=None, title_from_data=False)
series.errBars=errorbar
chart.series.append(series)

现在我想知道是否有一种方法可以通过首先定义用于创建 GraphicalProperties 对象的 LineProperties 来跳过构建 spPr 对象,然后在实例化期间将其馈送到 ErrorBars 方法。

NumDataRef 似乎没有做任何事情。这没有记录。

EDIT无论如何,对 NumDataRef 的调用可能是错误的。 plus 和 minus 参数需要 NumDataSource,其中 NumDataRef 是其中的一部分。正确的语法可能又是一个两步过程,首先创建

foo = openpyxl.chart.data_source.NumRef(f="bar") 

然后跟进

minus = openpyxl.chart.data_source.NumDataSource(numRef="foo")

我不确定 numRef 实际指的是什么,如果它是一个单元格、系列名称或其他名称。 如果任何人都可以贡献“plus”、“minus”和“val”参数的作用,那将会很有帮助。


它似乎NumVal, NumData and NumDataSource需要创建ErrorBars从头开始:

# References for X and Y
xvalues = Reference(<worksheet>, min_col=<xcol>, min_row=<min>, max_row=<max>)
yvalues = Reference(<worksheet>, min_col=<ycol>, min_row=<min>, max_row=<max>) 
plus = [<list of error values for plus>]
minus = [<list of error values for minus>]

# Convert lists of error values to ErrorBars object
errorbars = list2errorbars(plus, minus, errDir='y')

# Create series data and set error bar
series = SeriesFactory(yvalues, xvalues, title="y direction error")
series.errBars = errorbars

def list2errorbars(plus, minus, errDir='y', errValType='cust'):
    "Returns ErrorBar from lists of error values"

    #Convert to list of NumVal
    numvals_plus = [NumVal(i, None, v=x) for i,x in enumerate(plus)]
    numvals_minus = [NumVal(i, None, v=x) for i,x in enumerate(minus)]

    # Convert to NumData
    nd_plus = NumData(pt=numvals_plus)
    nd_minus = NumData(pt=numvals_minus)

    # Convert to NumDataSource
    nds_plus = NumDataSource(numLit=nd_plus)
    nds_minus = NumDataSource(numLit=nd_minus)

    return ErrorBars(plus=nds_plus, minus=nds_minus, errDir=errDir, errValType=errValType)

完整示例代码:https://github.com/uskysd/openpyxl-errorbar https://github.com/uskysd/openpyxl-errorbar

由于我也找不到好的文档,所以我从源代码中找出来。让我知道是否有更简单的方法可以做到这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openpyxl 图表误差线样式 的相关文章

  • Celery计划任务中的打印语句不会出现在终端中

    当我跑步时celery A tasks2 celery worker B我想看到每秒打印 芹菜任务 目前没有打印任何内容 为什么这不起作用 from app import app from celery import Celery from
  • 需要 python 接口将机器移动到另一个文件夹

    我正在尝试寻找代码支持python为了在数据中心的文件夹之间移动机器但没有成功 我看到pysphere您可以在克隆阶段定义文件夹 而不是在机器克隆之后定义文件夹 This https jackiechen org 2011 11 01 mo
  • 美丽的汤从谷歌搜索中提取href

    谷歌搜索给出了以下 HTML 的第一个结果 h3 class r a href https rads stackoverflow com amzn click com 0470284889 class l vst em Quantitati
  • 帮助需要在可选条件下编写正则表达式[关闭]

    我有一个日志文件包含如下内容 log Using data from yyyy mm dd 2011 8 3 0 files queued for scanning Warning E test H ndler pdf File not F
  • Python 小数.InvalidOperation 错误

    当我运行这样的东西时 我总是收到此错误 from decimal import getcontext prec 30 b 2 3 Decimal b Error Traceback most recent call last File Te
  • 我怎样才能在python cgi中找到上传的文件名

    我制作了如下简单的网络服务器 import BaseHTTPServer os cgi import cgitb cgitb enable html
  • excel中的多轴折线图

    我正在寻找类似于下图中的多轴折线图 这是由 amcharts 制作的 JavaScript 图表 excel有没有可以绘制图表的选项 请注意 有 3 个 Y 轴和 3 个折线图 可让您比较数据 是否有可能获得超过 3 个数据点 每个数据点在
  • 在 Python 3 中动态导入模块的问题

    我遇到的情况是 在我的 Python 3 项目中 在运行时必须包含某些模块 我在用着importlib import module为了这 第二次更新 我确实找到了一种方法来做一些接近我想要的事情 一些额外的代码可能会使我的一些链接稍微偏离一
  • Python 使用 M2Crypto 通过 S/MIME 对消息进行签名

    我现在花了几个小时 但找不到我的错误 我想要一个简单的例程来创建 S MIME 签名消息 稍后可以与 smtplib 一起使用 这是我到目前为止所拥有的 usr bin python2 7 coding utf 8 from future
  • 可移植的非关系数据库

    我想尝试 尝试非关系数据库 最好的解决方案是 便携式 这意味着它不需要安装 理想情况下 只需将目录复制粘贴到某个地方即可使其工作 我不介意第一次使用时是否需要编辑一些配置文件或运行配置工具 可从 python 访问 适用于 Windows
  • Pandas Pivot_Table :非数字值的行计算百分比

    这是我在数据框 df 中的数据 Document Name Time SPS2315511 A 1 HOUR SPS2315512 B 1 2 HOUR SPS2315513 C 2 3 HOUR SPS2315514 C 1 HOUR S
  • 使用sklearn进行多标签特征选择

    我希望使用 sklearn 对多标签数据集执行特征选择 我想要获得最终的功能集across标签 然后我将在另一个机器学习包中使用它 我打算使用我看到的方法here https stackoverflow com questions 1640
  • 提交表格并上传带有请求的文件

    我正在努力提交特定的表格蟒蛇请求 http www python requests org 我想使用它的网站上的其他表单工作正常 我可以提交登录表单等 这只是我遇到问题的文件上传 显然 提交表单效果很好 因为我从网站收到一条消息 说 请返回
  • 管理文件字段当前 url 不正确

    在 Django 管理中 只要有 FileField 编辑页面上就会有一个 当前 框 其中包含指向当前文件的超链接 但是 此链接会附加到当前页面 url 因此会导致 404 因为不存在这样的页面 例如 http 127 0 0 1 8000
  • 为 Python 2.4 改进“with”语句的直接替换

    您能否建议一种方法来编写可在 Python 2 4 中使用的 with 语句的直接替换代码 这将是一个 hack 但它可以让我更好地将我的项目移植到 Python 2 4 EDIT 删除了不相关的元类草图 只需使用 try finally
  • Flask SQLAlchemy 与 MyPy - 模型类型错误

    我遇到了以下组合问题flask sqlalchemy and mypy 当我定义一个新的 ORM 对象时 例如 class Foo db Model pass where db是使用创建的数据库SQL炼金术应用于flask app mypy
  • 网页抓取 - 如何识别网页上的主要内容

    给定一个新闻文章网页 来自任何主要新闻来源 例如时报或彭博社 我想识别该页面上的主要文章内容 并丢弃其他杂项元素 例如广告 菜单 侧边栏 用户评论 在大多数主要新闻网站上都可以使用的通用方法是什么 有哪些好的数据挖掘工具或库 最好是基于Py
  • 从 C 线程调用 Python 代码

    我对从 C 或 C 线程调用 Python 代码时如何确保线程安全感到非常困惑 The Python 文档 http docs python org c api init html non python created threads似乎是
  • 如何动态创建 Luigi 任务

    我正在为 Luigi Tasks 构建一个包装器 但遇到了一个障碍Register http luigi readthedocs io en stable modules luigi task register html Register该
  • 在Python中从列表中获取n个项目组的惯用方法? [复制]

    这个问题在这里已经有答案了 给定一个列表 A 1 2 3 4 5 6 是否有任何惯用的 Pythonic 方式来迭代它 就好像它是 B 1 2 3 4 5 6 除了索引之外 这感觉像是 C 的遗留物 for a1 a2 in A i A i

随机推荐

  • Android getExternalFilesDir 与 getFilesDir() 对于大文件

    getExternalFilesDir 和 getFilesDir 之间的区别对我来说很清楚并且有很好的解释here https developer android com reference android content Context
  • 输入类型=“文件”接受=“图像/*”在手机间隙不起作用?

    我尝试使用 HTML PhoneGap 2 6 0 制作一个 Android 应用程序 它支持
  • parse.com 用户注册无法正常工作的问题

    使用 parse com 和 javaScript SDK 1 6 7 下面的代码用于在我的网站上注册新用户 它有效 真正奇怪的是 如果我注册一个用户 他们就会登录并转发到预期的页面 如果我随后将它们注销并立即注册另一个用户 则它们是在后端
  • 如何旋转矢量?

    如果我有 1 0 我旋转它90 degrees 1 2PI radians 我应该得到 0 1 我该如何实现这一目标 我在看这一页 http en wikipedia org wiki Rotation matrix并实现了这个 var r
  • 如何使用此 Linq2Sql 减少数据库往返次数?

    我有以下 Linq2Sql 它为我的 SELECT 语句执行不止一次往返 我不知道为什么 首先是代码 然后是解释 from p in db Questions select new Models Question Title p Title
  • 为什么 Google 使用内联 JavaScript 和 CSS? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何通过 CSharp 以编程方式设置输入元素的值?

    你好 我正在尝试让 IE 自动登录网站 但问题是输入元素没有 HTML ID 属性 例如
  • Grid.Mvc.Ajax扩展网格初始化

    您好 我对使用 JQuery 和 Ajax 的 Web GUI 开发非常陌生 我正在尝试让 nuget 包 Grid MVC Ajax 正常工作 自述文件指出以下内容 Follow thse steps to use Grid Mvc Aj
  • Eclipse CDT 内置包含目录

    Under Eclipse CDT gt Project Settings gt C C General gt Paths and Symbols gt Includes gt GNU C 有一个包含路径的列表 有些是粗体的并且是特定于项目
  • 迁移到 Qt6/PyQt6:Qt5 中所有已弃用的短格式名称是什么?

    我正在尝试从以下位置迁移代码库PyQt5 to PyQt6 我读过这篇文章 参见https www pythonguis com faq pyqt5 vs pyqt6 https www pythonguis com faq pyqt5 v
  • 一个电子邮件地址中可以有多少个@符号?

    是否有任何规则要求在任何电子邮件 ID 中包含指定数量的 符号 如果我们要使用 PHP 检查电子邮件 ID 是否有效 我就会想到 如果引用多个 被允许 我必须问你为什么需要这些信息 拜托拜托please不要尝试编写正则表达式 函数或其他任何
  • 最好的分布式暴力对抗措施是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 首先 有一点背景知识 众所周知 我正在为 CodeIgniter 实现一个 auth auth 系统 并且到目前为止我正在获胜 可以这么说 但我
  • 请解释为什么以及如何 +new Date();在 IE8 或更低版本中作为 Date.now() 的“解决方法”

    我正在看书 面向 Web 开发人员的专业 JavaScript 给出有关此问题的背景信息 特别是有关引用类型的第 5 章 我想知道为什么以及如何var start new Date 用于获取 now 的当前毫秒表示 作为不支持 ECMASc
  • 从 Google AppEngine 切换到另一台服务器

    目前 我正在 Google AppEngine GAE 上构建我的 Java Web 应用程序 但由于它们有很多限制 我担心我必须从 GAE 切换到运行 Glassfish 或如果需要 我可以设置任何其他服务器 我还计划运行 Oracle
  • 为什么我不能返回通用“T”来满足 Partial

    我用 TypeScript 写了一些代码 type Point x number y number function getThing
  • 所有原始包装类都是不可变对象吗?

    Java 中的所有原始包装类都是不可变对象吗 字符串是不可变的 其他不可变对象是什么 Any type which doesn t give you any means to change the data within it is imm
  • 使用 Bash 比较 PHP 版本号?

    我有这个脚本 应该确保用户当前的 PHP 版本在某个范围内 尽管它应该可以工作 但某个地方有一个错误 使它认为版本超出范围 有人可以看一下并告诉我我能做什么来解决它 function version echo gawk F printf d
  • SVG 元素绕圆旋转

    所以我有一个 SVG 元素 大圆圈 和里面的一组元素 我想围绕这个大圆圈旋转这些元素 代码非常简单 但我已经开始担心如何在正确的路径 大圆圈 上设置这个圆圈 graph skils 正如您在下面的链接中看到的 这个小圆圈在大圆圈上旋转不正确
  • 调试严重的 SIGILL 崩溃:文本段损坏

    我们的系统是基于 PowerPC 的运行 Linux 的嵌入式系统 我们遇到了随机的 SIGILL 崩溃 这种情况在各种应用程序中都会出现 崩溃的根本原因是将要执行的指令归零 这表明内存中的文本段已损坏 由于文本段是以只读方式加载的 因此应
  • openpyxl 图表误差线样式

    我被分配了一项 简单 的任务 即将一系列数据列收集到结果工作簿中 结果工作簿包含分析结果所需的公式和图表 这些数据是由我用 python 编写的图像分析应用程序生成的 作为一系列 Excel 工作簿 现在的问题是 openpyxl 会删除