我有2系列数据。为了简单起见,假设数据如下所示,
设置1:
1 3
2 3.5
3 4
4 4.5
5 5
6 5.5
7 6
8 6.5
9 7
10 7.5
设置2:
1.5 2
2.8 4.5
3.5 8
4.5 6
5.5 4.8
6.5 4
7.5 6.5
8.5 9
9.5 3
10.5 4
在绘制了这两组数据后,我想获得数据较高的行。我要黑线,在所附的图片中。我怎么得到的?我的实际数据有成千上万个数据点,因此无法手动进行。
稍后添加:我忘记提及的另一件事,在我的实际数据中,一组有大约500 x,y值,另一组有大约50个值。尽管端点具有相同/相似的x值。 感谢您的帮助。
答案 0 :(得分:2)
鉴于您有关图表和表格的信息,我将执行以下操作:
新系列将基于两个公式:
在H列中,我有最大值的公式(在两个系列之间):
=MAX(B2,E2)
在G列中,我有一个基于最大值(上面的公式)的公式,我应该使用该X值(系列1或2的X值)。
=IF(H2=B2,A2,D2)
然后我可以绘制图形:
系列1,B列
系列2,E栏
系列3,H列。
所有系列均使用G列的X值。
答案 1 :(得分:1)
简介
关于我的解决方案的一些假设/评论/陷阱/约束:
为了更好地理解以下描述的解决方案,请根据问题中的数据集参阅结果图(尽管我添加了一个数据点[2.5; 3.75]以避免完全拥有Set 1和Set 2的数据点交替):
一般解决方案概述/方法
详细信息和公式
对于公式,我假设第1行包含标题,数据从第2行开始。所有公式都应在第2行输入,除了少数公式外,我提到将其放在第3行(因为它们需要数据)从上一行开始)。结果在E列(x值)和F列(y值)中,从G到AG为辅助列)。
=INDEX(AH$2:AH$30;MATCH(ROWS(AH$2:AH2);$AJ$2:$AJ$30;0))
这是实际结果。获取AH中的所有x值,并根据索引列AJ对它们进行排序;这实际上应该是逻辑流中的最后一列,但是出于演示目的,将其放在输入数据集旁边更为干净; =INDEX(AF$2:AF$30;MATCH(ROWS(AF$2:AF2);$AG$2:$AG$30;0))
与y值相同; =IF(ISNA(H2);NA();COUNTIF($H$2:$H$30;"<="&H2))
创建索引以对两个数据集的组合x值进行排序。您也可以在没有此类帮助程序列的情况下进行动态排序,但是随后您需要使用VLOOKUP
或INDEX/MATCH
并使用十进制长数字,我对此有一些不好的经验; =IF(ROW()-1<=COUNT($A$2:$A$30);A2;IF((ROW()-1)<=(COUNT($A$2:$A$30)+COUNT($C$2:$C$30));INDEX($C$2:$C$30;ROW()-COUNT($A$2:$A$30)-1;1);NA()))
合并两个数据集的x值,即在A和C列中; =IF(ROW()-1<=COUNT($B$2:$B$30);B2;IF((ROW()-1)<=(COUNT($B$2:$B$30)+COUNT($D$2:$D$30));INDEX($D$2:$D$30;ROW()-COUNT($B$2:$B$30)-1;1);NA()))
与y值相同; =IF(ROW()-1<=COUNT($A$2:$A$30);"S1";IF((ROW()-1)<=(COUNT($A$2:$A$30)+COUNT($C$2:$C$30));"S2";NA()))
为每个数据点分配“ S1”或“ S2”,以指示它们来自哪个数据集。 =IF(J2=J3;INTERCEPT(I2:I3;H2:H3);NA())
确定从该数据点开始的线段的截距; =IF(J2=J3;SLOPE(I2:I3;H2:H3);NA())
斜率相同; =INDEX(H$2:H$30;MATCH(ROWS(H$2:H2);$G$2:$G$30;0))
对所有x值进行排序; =INDEX(I$2:I$30;MATCH(ROWS(I$2:I2);$G$2:$G$30;0))
与y值相同=INDEX(J$2:J$30;MATCH(ROWS(J$2:J2);$G$2:$G$30;0))
与相应的“ S1 / S2”值相同,以指示它们来自哪个数据集; =INDEX(K$2:K$30;MATCH(ROWS(K$2:K2);$G$2:$G$30;0))
与拦截相同; =INDEX(L$2:L$30;MATCH(ROWS(L$2:L2);$G$2:$G$30;0))
斜率相同; =IF(O2="S1";"S2";"S1")
S1和S2之间的反转。 {=IFERROR(INDEX($O$2:$Q2;MAX(IF($O$2:$O2=$R3;ROW($O$2:$O2)-ROW(INDEX($O$2:$O2;1;1))+1));2);NA())}
要放入单元格S3中的数组公式(因此按ctrl + shift + enter),该公式将搜索 other的前一个数据点的截距数据集。 {=IFERROR(INDEX($O$2:$Q2;MAX(IF($O$2:$O2=$R3;ROW($O$2:$O2)-ROW(INDEX($O$2:$O2;1;1))+1));3);NA())}
斜率相同; =IF(OR(ISNA(N2);NOT(ISNUMBER(S2)));NA();M2*T2+S2)
计算另一个数据集的线段上的y值; =MAX(IFNA(U2;N2);N2)
在另一个数据集的相应线段上的原始y值和计算的y值之间的最大值; =(V2=N2)
检查y值是否来自原始数据集; =IF(O2="S1";IF(W2;"S1";"S2");IF(W2;"S2";"S1"))
确定y值位于哪个数据集(行)上(S1或S2); =IFERROR(AND((X2<>X3);COUNTIF(X3:$X$30;X2)>0);FALSE)
确定数据集何时交叉(即图形上的线相交); =IF(Y2;(S2-P2)/(Q2-T2);NA())
计算交集的x值; =IF(Y2;Z2*Q2+P2;NA())
计算交点的y值; =COUNTIF($Z$2:$Z$30;"<="&Z2)
索引用于对新计算的交叉点进行排序(之所以对它们进行排序,是因为与其他数据集的组合非常简单,只需重新使用H列的公式即可; =INDEX(Z$2:Z$30;MATCH(ROWS(Z$2:Z2);$AB$2:$AB$30;0))
交点的排序x值; =INDEX(AA$2:AA$30;MATCH(ROWS(AA$2:AA2);$AB$2:$AB$30;0))
与y值相同; =IF(ROW()-1<=COUNT(M$2:M$30);M2;IF((ROW()-1)<=(COUNT(M$2:M$30)+COUNT(AC$2:AC$30));INDEX(AC$2:AC$30;ROW()-COUNT(M$2:M$30)-1;1);NA()))
组合集合1,集合2和交点的x值; =IF(ROW()-1<=COUNT(V$2:V$30);V2;IF((ROW()-1)<=(COUNT(V$2:V$30)+COUNT(AD$2:AD$30));INDEX(AD$2:AD$30;ROW()-COUNT(V$2:V$30)-1;1);NA()))
与y值相同; =IF(ISNA(AE2);NA();COUNTIF($AE$2:$AE$30;"<="&AE2))
创建索引以对结果数据集进行排序(这用于计算E和F列中的最终结果; 所有公式都排到第30行,但这当然需要根据实际数据集进行更改。想法是将这些公式添加到一个工作表中,然后可以将列E> AG复制到所有其他工作表中。显然有很多#NA
值,但这是有目的的,不是错误或错误。根据要求,我可以共享实际的电子表格,因此您不必重新输入所有公式。
一些其他评论
=TEXT(J2;"0000.00000000000")&L2
。这将以与文本相同的方式设置所有数字的格式,并附加S1或S2。因此,这应该给出唯一的排序值,该排序值的排序方式与相应的数字相同。