변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법안녕,
아래 예와 같이 변동성 차트에서 데이터 범주별로 사양 한계(빨간색 선)를 어떻게 그릴 수 있습니까? 빨간색 선은 pptx에서 수동으로 그렸습니다.
참조용으로 jmp 파일 데이터를 첨부합니다. 답변 감사합니다. 고맙습니다.

자동화 및 스크립팅기본 데이터 분석 및 모델링윈도우Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법변동성 차트에서 데이터 범주에 따른 다양한 사양 한계가 어떤 아이디어를 제공합니까?
Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법안녕하세요, jthi,
확인하고 단계를 따랐지만, 첨부 파일과 스크립트를 직접 사용한 경우에도 여전히 작동하지 않았습니다.
Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법귀하의 데이터를 사용하고(+ 제한 추가) 해당 스레드에서 스크립트에 작은 수정을 가합니다.

Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법안녕하세요, jthi,
당신은 실제로 내가 원했던 차트를 그렸지만, 나는 여전히 스크립트를 수정하는 방법을 모릅니다. 어쨌든, 답변 감사합니다
Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법Names Default To Here(1);
dt1 = Open("$DOWNLOADS/sample data.jmp");
dt = dt1 << Stack( // stack to get proper data format
columns(:A10, :A20, :A30),
Source Label Column("SampleGroup"),
Output Table("Stack")
);
// Add limits as they were not provided
dt << New Column("LSL", Numeric, Continuous, Values([10, 10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20]));
dt << New Column("Target", Numeric, Continuous, Values([20, 20, 20, 20, 20, 20, 20, 20, 20, 40, 40, 40, 40, 40, 40, 40, 40, 40]));
dt << New Column("USL", Numeric, Continuous, Values([30, 30, 30, 30, 30, 30, 30, 30, 30, 50, 50, 50, 50, 50, 50, 50, 50, 50]));
var = dt << Variability Chart(Y(:Data), X(:Phase, :SampleGroup));
dt_summary = dt << Summary(
Group(:Phase),
Max(:LSL),
Mean(:Target),
Min(:USL),
N Categories(:SampleGroup),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
// We need access to the framebox
fb = Report(var)[Outline Box("Variability Chart for Data"), Frame Box(1)];
//Get phases count (this was missing)
Summarize(dt, phases = By(:Phase));
// Using graphic scripts most likely easiest option
xidx = 0;
For(i = 1, i <= N Items(phases), i++,
curphase = dt_summary[i, "Phase"];
curlsl = dt_summary[i, "LSL"];
curusl = dt_summary[i, "USL"];
curtarget = dt_summary[i, "Target"];
curcount = dt_summary[i, "SampleGroup"];
xend = xidx + curcount;
lslstart = Eval List({xidx, curlsl});
lslend = Eval List({xend, curlsl});
uslstart = Eval List({xidx, curusl});
uslend = Eval List({xend, curusl});
targetstart = Eval List({xidx, curtarget});
targetend = Eval List({xend, curtarget});
xidx = xend;
Eval(EvalExpr(
fb << Add Graphics Script(
Pen Color("Red");
Pen Size(1);
Line(Expr(lslstart), Expr(lslend)); // {x1, y1}, {x2, y2}
Line(Expr(uslstart), Expr(uslend)); // {x1, y1}, {x2, y2}
Pen Color("Blue");
Line(Expr(targetstart), Expr(targetend)); // {x1, y1}, {x2, y2}
);
));
);
fb << Y Axis(Max(1.1*Max(Col Max(Column(dt, "Data")), Col Max(Column(dt_summary, "USL"))))); // adjust yaxisRe: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법안녕하세요,
귀하의 스크립트에 감사드립니다. 성공적으로 작동했습니다.
아래의 제한 설정과 관련하여, 최대 100개의 데이터가 있고 전용 "Phase"에만 제한선을 추가하면 다음 스크립트를 최적화할 수 있는 솔루션이 있습니까? 감사합니다.
// Add limits as they were not provided
dt << New Column("LSL", Numeric, Continuous, Values([10, 10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20]));
dt << New Column("Target", Numeric, Continuous, Values([20, 20, 20, 20, 20, 20, 20, 20, 20, 40, 40, 40, 40, 40, 40, 40, 40, 40]));
dt << New Column("USL", Numeric, Continuous, Values([30, 30, 30, 30, 30, 30, 30, 30, 30, 50, 50, 50, 50, 50, 50, 50, 50, 50]));Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법사양 제한 테이블을 만들거나 매개변수가 너무 많지 않은 경우 해당 테이블에 대한 연관 배열을 만들 수 있습니다.
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/sample data.jmp");
dt = dt1 << Stack( // stack to get proper data format
columns(:A10, :A20, :A30),
Source Label Column("SampleGroup"),
Output Table("Stack")
);
aa_specs = [
"L1" => ["LSL" => 10, "USL" => 30, "Target" => 20],
"L2" => ["LSL" => 30, "USL" => 50, "Target" => 40]
];
// Add limits as they were not provided
dt << New Column("LSL", Numeric, Continuous);
dt << New Column("Target", Numeric, Continuous);
dt << New Column("USL", Numeric, Continuous);
For Each Row(dt,
:LSL = aa_specs[:Phase]["LSL"];
:USL = aa_specs[:Phase]["USL"];
:Target = aa_specs[:Phase]["Target"];
);
또는 spec table을 사용하세요
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/sample data.jmp");
dt = dt1 << Stack( // stack to get proper data format
columns(:A10, :A20, :A30),
Source Label Column("SampleGroup"),
Output Table("Stack")
);
dt_specs = New Table("Specs",
Add Rows(2),
Compress File When Saved(1),
New Column("Variable", Character, "Nominal", Set Values({"L1", "L2"})),
New Column("LSL", Numeric, "Continuous", Format("Best", 12), Set Values([10, 30])),
New Column("Target", Numeric, "Continuous", Format("Best", 12), Set Values([20, 40])),
New Column("USL", Numeric, "Continuous", Format("Best", 12), Set Values([30, 50]))
);
dt << Update(
With(dt_specs),
Match Columns(:Phase = :Variable)
);
Close(dt_specs, no save);Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법안녕하세요,
방법 1을 사용하니까 작동하더군요.
L2에 USL/LSL이 없기를 원한다고 가정할 때, 어떻게 최적화할 수 있나요?
값을 0으로 설정하려고 했지만 Y-0 위치에 빨간색 선이 표시됩니다.
I put //"L2" => ["LSL" => 0, "USL" => 0, //"Target" => 40], it's not work.
aa_specs = [
"L1" => ["LSL" => 10, "USL" => 30, "Target" => 20],
"L2" => ["LSL" => 0, "USL" => 0, //"Target" => 40]
];
Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법해당 값이 필요하지 않으면 값을 누락으로 설정하면 스크립트에서 제대로 작동할 것으로 보입니다.
더 보기...
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/sample data.jmp");
dt = dt1 << Stack( // stack to get proper data format
columns(:A10, :A20, :A30),
Source Label Column("SampleGroup"),
Output Table("Stack")
);
aa_specs = [
"L1" => ["LSL" => 10, "USL" => 30, "Target" => 20],
"L2" => ["LSL" => 30, "USL" => ., "Target" => .]
];
// Add limits as they were not provided
dt << New Column("LSL", Numeric, Continuous);
dt << New Column("Target", Numeric, Continuous);
dt << New Column("USL", Numeric, Continuous);
For Each Row(dt,
:LSL = aa_specs[:Phase]["LSL"];
:USL = aa_specs[:Phase]["USL"];
:Target = aa_specs[:Phase]["Target"];
);
var = dt << Variability Chart(Y(:Data), X(:Phase, :SampleGroup));
dt_summary = dt << Summary(
Group(:Phase),
Max(:LSL),
Mean(:Target),
Min(:USL),
N Categories(:SampleGroup),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
// We need access to the framebox
fb = Report(var)[Outline Box("Variability Chart for Data"), Frame Box(1)];
//Get phases count (this was missing)
Summarize(dt, phases = By(:Phase));
// Using graphic scripts most likely easiest option
xidx = 0;
For(i = 1, i <= N Items(phases), i++,
curphase = dt_summary[i, "Phase"];
curlsl = dt_summary[i, "LSL"];
curusl = dt_summary[i, "USL"];
curtarget = dt_summary[i, "Target"];
curcount = dt_summary[i, "SampleGroup"];
xend = xidx + curcount;
lslstart = Eval List({xidx, curlsl});
lslend = Eval List({xend, curlsl});
uslstart = Eval List({xidx, curusl});
uslend = Eval List({xend, curusl});
targetstart = Eval List({xidx, curtarget});
targetend = Eval List({xend, curtarget});
xidx = xend;
Eval(EvalExpr(
fb << Add Graphics Script(
Pen Color("Red");
Pen Size(1);
Line(Expr(lslstart), Expr(lslend)); // {x1, y1}, {x2, y2}
Line(Expr(uslstart), Expr(uslend)); // {x1, y1}, {x2, y2}
Pen Color("Blue");
Line(Expr(targetstart), Expr(targetend)); // {x1, y1}, {x2, y2}
);
));
);
fb << Y Axis(Max(1.1*Max(Col Max(Column(dt, "Data")), Col Max(Column(dt_summary, "USL"))))); // adjust yaxis
스크립트를 약간 수정하여 누락된 값이 있는 항목을 무시하도록 할 수도 있지만 반드시 그럴 필요는 없습니다.
Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법안녕하세요, Jarmo,
라인에서 그래프 상자로 변경하려고 했는데, 아래 수정된 스크립트로는 작동하지 않습니다. 어떻게 수정할 수 있을까요?
Eval(EvalExpr(
fb << Add Graphics Script(
Fill Color("Green");
Transparency( 0.3 );
Graph Box(Expr(lslstart), Expr(lslend)); // {x1, y1}, {x2, y2}
Graph Box(Expr(uslstart), Expr(uslend)); // {x1, y1}, {x2, y2}Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법Graphic Script 내에서 Graph Box를 수정하려고 하는 특별한 이유가 있나요?
Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법안녕하세요, Jarmo,
X축 위상/그룹이 여러 세트인 경우 이 선은 상자 그림 데이터 포인트를 가릴 수 있습니다. 대신 다음 이미지를 사용하고 싶습니다.

Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법그러면 Line() 대신 Rect를 사용할 수 있고, 그래프 상자는 필요 없습니다(그래프 상자는 기본적으로 이미 있습니다). 이 옵션을 사용하면 누락된 값을 어떻게든 관리해야 합니다. 누락된 점은 Rect()에 문제를 일으킬 것입니다.

Eval(EvalExpr(
fb << Add Graphics Script(
Transparency(0.2);
Pen Color("Green");
Fill Color("Green");
Rect(Expr(lslstart), Expr(uslend), 1);
);
));Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법안녕하세요, Jarmo님.
신속한 답변 감사합니다.
X축 값을 추가하는 것에 대한 질문이 하나 더 있습니다.
다른 X 값(SampleA)을 입력했을 때 아래 스크립트를 수정했습니다. 그런데 한계선 결과가 잘못되었습니다. 어떻게 수정해야 하나요?
var = dt << Variability Chart(Y(:Data), X(:Phase, :SampleGroup, :SampleA));
dt_summary = dt << Summary(
Group(:Phase),
Max(:LSL),
Mean(:Target),
Min(:USL),
N Categories(:SampleGroup, :SampleA),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
// We need access to the framebox
fb = Report(var)[Outline Box("Variability Chart for Data"), Frame Box(1)];
//Get phases count (this was missing)
Summarize(dt, phases = By(:Phase));
// Using graphic scripts most likely easiest option
xidx = 0;
For(i = 1, i <= N Items(phases), i++,
curphase = dt_summary[i, "Phase"];
curlsl = dt_summary[i, "LSL"];
curusl = dt_summary[i, "USL"];
curtarget = dt_summary[i, "Target"];
curcount = dt_summary[i, "SampleGroup", "SampleA"];
xend = xidx + curcount;
lslstart = Eval List({xidx, curlsl});
lslend = Eval List({xend, curlsl});
uslstart = Eval List({xidx, curusl});
uslend = Eval List({xend, curusl});
targetstart = Eval List({xidx, curtarget});
targetend = Eval List({xend, curtarget});
xidx = xend;
Eval(EvalExpr(
fb << Add Graphics Script(
Pen Color("Red");
Pen Size(1);
Line(Expr(lslstart), Expr(lslend)); // {x1, y1}, {x2, y2}
Line(Expr(uslstart), Expr(uslend)); // {x1, y1}, {x2, y2}
Pen Color("Blue");
Line(Expr(targetstart), Expr(targetend)); // {x1, y1}, {x2, y2}
);
));
);
fb << Y Axis(Max(1.1*Max(Col Max(Column(dt, "Data")), Col Max(Column(dt_summary, "USL"))))); // adjust yaxisRe: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법한도는 어떻게 설정되나요(그룹 기준)? 무엇이 문제인가요? 요약, 요약, 그리고 현재 계산 값을 조정해야 할 가능성이 높습니다.
Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법네, 그 점을 확인해서 요약 및 현재 값 스크립트를 수정했습니다. 하지만 한계선은 단계 아래의 모든 조건을 완전히 포괄할 수 없습니다. 한계선은 여전히 "단계"를 기준으로 합니다. (새로운 SampleA X축이 없다는 점은 무시해 주세요.)

Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법기본 테이블에 SampleGroup과 SampleA를 연결하여 새 열을 만들 수 있습니다. 그런 다음 이 열을 Summary의 N개 범주와 curcount에 사용하여 정확한 개수를 구할 수 있습니다.
Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법var = dt << Variability Chart(Y(:Data), X(:Phase, :SampleGroup, :SampleA));
dt_summary = dt << Summary(
Group(:Phase),
Max(:LSL),
Mean(:Target),
Min(:USL),
N Categories(:SampleGroup, :SampleA),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
// We need access to the framebox
fb = Report(var)[Outline Box("Variability Chart for Data"), Frame Box(1)];
//Get phases count (this was missing)
Summarize(dt, phases = By(:Phase));
// Using graphic scripts most likely easiest option
xidx = 0;
For(i = 1, i <= N Items(phases), i++,
curphase = dt_summary[i, "Phase"];
curlsl = dt_summary[i, "LSL"];
curusl = dt_summary[i, "USL"];
curtarget = dt_summary[i, "Target"];
curcount = dt_summary[i, "N Rows"];
위 스크립트를 수정했는데, 제한선이 생성되지 않습니다. 어떻게 수정해야 하나요?
Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법무엇이 문제일까요?(데이터가 없어서 확인할 수 없습니다)
Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법테스트 데이터와 스크립트는 첨부 파일을 참조하세요.
Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법앞서 말씀드렸듯이 가장 쉬운 방법은 새 그룹화 열을 만들어 요약 표에 사용하는 것입니다. 여러 그룹에 대한 n개 범주의 합계를 구하는 것만으로도 충분할 수 있습니다.
curcount = Sum(dt_summary[i, {"Leg", "Layer"}]);Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법안녕하세요,
스크립팅이 필요 없는 솔루션을 찾고 있고 Graph Builder를 사용해도 괜찮다면 Graph Builder는 실제로 범주별로 다중 레벨 사양 제한을 처리합니다. 사양 제한이 그에 맞게 구조화되어 있는지 확인하세요(예: 열 속성을 통해).
변동성 차트를 그대로 사용하고 싶은 경우, 이 기능은 JMP 코어에 내장되어 있지 않지만, 테스트 데이터 분석을 위해 개발된 플러그인인 YieldOptiX에서 지원 됩니다 . 이 플러그인은 변동성 차트에서 범주 기반 사양 한계를 직접 지원합니다.
따라서 두 옵션(그룹화된 한계가 있는 그래프 빌더 또는 변동성 차트)은 선호하는 인터페이스에 따라 지원됩니다. 다만 프로세스에 가장 적합한 것이 무엇인지에 따라 달라집니다.
Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법안녕, 자르모
여러 데이터를 입력할 때 사양 제한이 스크립트 내용을 따르지 않습니다. 스크립트를 어떻게 수정할 수 있나요?
Re: 변동성 차트에서 데이터 범주별로 사양 한계를 정의하는 방법그룹 개수를 계산하는 방법은 여러 가지가 있습니다. 아주 간단한 방법 중 하나는 dt에 leg와 layer를 결합하는 새 열을 추가하는 것입니다.
dt << new column("LEGLAYER", Character, Nominal, Formula(:Leg ||:Layer));
그런 다음 요약에 사용하세요
dt_summary = dt << Summary(
Group(:SampleGroup),
Max(:LSL),
//Mean(:Target),
Min(:USL),
N Categories(:LEGLAYER),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
그리고 거기서 현재값을 구해라
curcount = Sum(dt_summary[i, {"LEGLAYER"}]);

제목: 변동성 차트에서 데이터 범주별로 사양 한계를 어떻게 정의하나요?공유해주신 스크립트를 사용했는데 사양 제한이 표시되지 않습니다.
첨부된 스크립트를 확인하고 수정 방법을 알려주세요.