避免 Excel 图表在系列变平后拉伸线直到结束
Avoid Excel Chart streching line till end after series flattens
我有一个 table 总共 12 列和 30 行。 table 如下所示。请注意,真实数据与此有很大不同,但遵循此模式 - 值上升到某个数字并在所有行中不断重复。
我想绘制一个如下所示的折线图-
但我得到这个-
我可以通过手动删除 table 中的重复值来获得预期的图表。我正在寻找一种自动执行此操作的方法。
1-Select 一列(或多列)查找重复数据。
2-打开功能区顶部的“数据”选项卡。
3-找到“数据工具”菜单,然后单击“删除重复项”。
4-按确定按钮
这是你想要的吗?
替换零。
使用 na()
因为没有绘制。
见:
额外的好处:如果在蓝色系列上将重叠设置为 100%,那么看起来第一个系列中的值被“突出显示”了 - 在讨论数据时,这是一种集中注意力的好方法。
编辑,无论前面的值增加还是减少,这都有效:
假设你的数据是这样排列的:
您可以使用以下公式创建另一个 table 引用第一个:
所以基本上,H4 中的这个公式 =IF(B3-B2=0,NA(),B3)
复制粘贴到除第一行以外的所有单元格中。
这会给出:
并且绘制第二个 table 会给你想要的结果,因为没有绘制 NA(正如 Solar Mike 提到的那样)。
警告
只有当每行的值都严格增加或减少时,这才有效。如果在系列结束之前的 2 个数据点之间没有变化,它永远变平,那么你的线中就会有缺失点。
例如,如果 2020.Q2 以连续两个零开头,您会在需要之前出现 NA。
因此,您仍然需要手动替换这些 NA。
但是如果你想使整个过程自动化,你可以添加另一个 table 检查 NA 之后是否有非 NA 值,如果有则将其更改回以前的数字。
像这样:
在此解决方案中,O3 中的公式必须为:=IF(AND(ISNA(I3),PRODUCT(IF(NOT(ISNA(I4:I)),0,1))=0),I2,I3)
解释:
I4:I
是当前单元格之后的值范围。我们使用 $
以便范围锚定到最后一行。
IF(NOT(ISNA(I4:I)),0,1)
returns 一个数组,当存在非 NA 值时用 0 填充,当值为 NA 时用 1 填充。
PRODUCT(IF(NOT(ISNA(I4:I)),0,1))=0
检查数组中元素的乘积是否为 0。由于乘积的值为零只需要一个零,因此这实质上检查是否至少有一个非 NA当前值之后的值。
编辑: 如果数据集中的系列不可能在结束前达到最大值,那么 就简单多了。但是,我建议的方法更通用,因为无论该系列是在最大值、最小值还是介于两者之间的任何位置变平,它都有效。
所以为了解决我的问题,我又创建了一个 table 并应用了公式 =IF(MAX(B:B)=H1,NA(),B2)
。此公式计算源 table 列的最大值,并将其与较高的立即值进行比较。新 table 看起来像这样-
这个 table 的范围来自 G1:K8
我有一个 table 总共 12 列和 30 行。 table 如下所示。请注意,真实数据与此有很大不同,但遵循此模式 - 值上升到某个数字并在所有行中不断重复。
我想绘制一个如下所示的折线图-
但我得到这个-
我可以通过手动删除 table 中的重复值来获得预期的图表。我正在寻找一种自动执行此操作的方法。
1-Select 一列(或多列)查找重复数据。
2-打开功能区顶部的“数据”选项卡。
3-找到“数据工具”菜单,然后单击“删除重复项”。
4-按确定按钮
这是你想要的吗?
替换零。
使用 na()
因为没有绘制。
见:
额外的好处:如果在蓝色系列上将重叠设置为 100%,那么看起来第一个系列中的值被“突出显示”了 - 在讨论数据时,这是一种集中注意力的好方法。
编辑,无论前面的值增加还是减少,这都有效:
假设你的数据是这样排列的:
您可以使用以下公式创建另一个 table 引用第一个:
所以基本上,H4 中的这个公式 =IF(B3-B2=0,NA(),B3)
复制粘贴到除第一行以外的所有单元格中。
这会给出:
并且绘制第二个 table 会给你想要的结果,因为没有绘制 NA(正如 Solar Mike 提到的那样)。
警告
只有当每行的值都严格增加或减少时,这才有效。如果在系列结束之前的 2 个数据点之间没有变化,它永远变平,那么你的线中就会有缺失点。
例如,如果 2020.Q2 以连续两个零开头,您会在需要之前出现 NA。
因此,您仍然需要手动替换这些 NA。
但是如果你想使整个过程自动化,你可以添加另一个 table 检查 NA 之后是否有非 NA 值,如果有则将其更改回以前的数字。
像这样:
在此解决方案中,O3 中的公式必须为:=IF(AND(ISNA(I3),PRODUCT(IF(NOT(ISNA(I4:I)),0,1))=0),I2,I3)
解释:
I4:I
是当前单元格之后的值范围。我们使用$
以便范围锚定到最后一行。IF(NOT(ISNA(I4:I)),0,1)
returns 一个数组,当存在非 NA 值时用 0 填充,当值为 NA 时用 1 填充。PRODUCT(IF(NOT(ISNA(I4:I)),0,1))=0
检查数组中元素的乘积是否为 0。由于乘积的值为零只需要一个零,因此这实质上检查是否至少有一个非 NA当前值之后的值。
编辑: 如果数据集中的系列不可能在结束前达到最大值,那么
所以为了解决我的问题,我又创建了一个 table 并应用了公式 =IF(MAX(B:B)=H1,NA(),B2)
。此公式计算源 table 列的最大值,并将其与较高的立即值进行比较。新 table 看起来像这样-
这个 table 的范围来自 G1:K8