如何自动缩小图表的范围?

Posted

技术标签:

【中文标题】如何自动缩小图表的范围?【英文标题】:How to automatically reduce the range of a chart? 【发布时间】:2019-08-25 01:26:30 【问题描述】:

首先很抱歉我的英语不好,因为它不是第一语言。 我最近开始学习python,我正在尝试开发一个“简单”的程序,但是我遇到了一个问题。

我正在使用 xlwings 来修改 Excel 并与之交互。我想要实现(或知道是否可能)是:

我有 excel 查看数据并绘制图表。但是,此图有时例如有 20 个 X 轴值,而在其他情况下,假设 X 轴有 10 个值,因此留下 10 个#NA 空白空间。基于此,我想通过更改图形的范围来调整图形以仅显示 10 个值。

函数get_prod_hours()查看我想要X轴上有多少个值:

def get_prod_hours():
    """From the input gets the production hours to adapt the graphs"""
    dt = wb.sheets['Calculatrice']
    return dt.range('E24').value

根据从函数中得到的值,我必须修改图表上的值范围(通过减少它)。

解决方案,例如从头开始创建图表是不行的,因为我只想修改图表的范围,因为 Excel 文件是我公司的“标准”。

我希望是这样的:

Excel 中的 A 列的值:1, 2, 3, 4, 5 并从 get_prod_hours() 获得值 5,因此我的图表将只有 5 个点,而不是例如 6 个点,其中一个是 #NA。

非常感谢,对于文字墙感到抱歉。

【问题讨论】:

与其构建程序化解决方案,尤其是 Excel 外部解决方案,不如使用完善的协议来使用 Excel 函数使图表数据动态化。我在Dynamic Charts 上的教程中有一个简单的示例和一些链接。 【参考方案1】:

xlwings API 没有提供很多图表选项(请参阅https://docs.xlwings.org/en/stable/api.html?highlight=charts#xlwings.main.Charts)。

尝试在wb.sheets[0].charts中查找图表。

然后可以修改范围

range = xw.Range((1,1), (get_prod_hours(),1))
set_source_data(wb.sheets[0].range(range))

但是从查看 API 并知道 Excel 图表有多少选项来看,API 感觉太单薄了。

如果这不起作用,一个选项是添加一个 VBA 宏来修改图表并调用它。见How do I call an Excel macro from Python using xlwings?

【讨论】:

您好亚伦,首先,非常感谢您的回答。更改 ...range('A1') 的选项我试过了,但是,图表的数据来自不同的来源......有没有办法缩短折线图上的“水平轴值”方式? 您不会缩短值,而是将范围缩小到 A1:E1(如果您只需要 5 个值)。这将省略F1 中的值以及您没有的值。使用 xlwings,您甚至可以使用数值:xw.Range((1,1), (get_prod_hours(),1))

以上是关于如何自动缩小图表的范围?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用在单击按钮上创建的用户触发放大和缩小绘图图表?

每次我在前端放大/缩小时,如何以编程方式检查 Altair 图表的放大/缩小功能

echarts如何关闭鼠标滚动放大缩小图表

Android图表设计如图,各位请问如何实现呢?

怎样使canvas图表放大缩小

如何利用echarts图表获取条状图点击名称和值