Hallo zusammen,
Ich möchte einige Balken für bestimmte Variablen automatisch mit vordefinierten Füllmustern füllen. Die Anzahl der Variablen ändert sich jedoch, und ich möchte dies in Iteration tun, je nachdem, welche Variablen derzeit in einer Datentabelle gespeichert sind. In diesem Fall muss ich Fill Pattern () entweder als Index (was anscheinend nicht funktioniert hat) oder als Referenz aus einer Liste argumentieren, aber dafür würde ich eine Liste von Füllmustern benötigen. Dann könnte ich den Index des Elements in einer Liste verwenden. Ich würde mich über Hilfe freuen, wie das geht.
Freundliche Grüße
Graph Builder(
Size( 734, 660 ),
Variables( //that would be good to have it in iteration
X( :Run ),
Y( :Param0 ),
Y( :Param1, Position( 2 ) ),
Y( :Param2, Position( 2 ) ),
Y( :Param3, Position( 2 ) ),
// there is much more of such variables to be displayed
),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 455 ) ) ),
Elements( //that would be good to have it in iteration
Position( 1, 2 ),
Bar(
X,
Y( 3 ),
Y( 5 ),
Y( 6 ),
Y( 7 ),
Legend( 454 ),
Bar Style( "Stacked" )
)
),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
455,
Properties( 0, {Line Color( 25 )}, Item ID( "Param0", 1 ) )
), Legend Model(
454,
//that would be good to have it in iteration
Properties(
0,
{Fill Pattern( "left slant light" )},
Item ID( "Mittelwert(Param1)", 1 )
),
Properties(
2,
{Fill Pattern( "right slant light" )},
Item ID( "Mittelwert(Param2)", 1 )
),
Properties(
3,
{Fill Pattern( "grid heavy" )},
Item ID( "Mittelwert(Param3)", 1 )
),
// there is much more of such properties
)}
),
Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ),
Dispatch(
{},
"400",
LegendBox,
{Legend Position(
{455, [0], 454, [10, -1, 1, 11]}
), Position(
{0, 10, -1, 1, 11}
)}
)
)
);
BEARBEITEN:
Ich begann das obige Problem zu lösen, indem ich Ausdrücke verwendete, an die Daten übergeben werden können.
Ich wollte die Eigenschaften einer Legende eines Balkendiagramms in "for-loop" festlegen und in legend_model_expr einfügen, das vor der for-Schleife definiert wurde. Dann würde ich diesen Ausdruck an einer geeigneten Stelle in Graph Builder ersetzen. In diesem Fall traten zwei Probleme auf. Erstens tritt ein Fehler auf, wenn beide "Einfügen in" -Empfehlungen kommentiert werden:
Name nicht aufgelöst: Eigenschaften beim Zugriff auf oder bei der Auswertung von Eigenschaften. Benutze ich das richtig? Zweitens, wenn ich beide "Einfügen in" (oder sogar einen von ihnen) auskommentiere, wird ein weiterer Fehler angezeigt: Zu viele Argumente beim Zugriff auf oder bei der Auswertung von For.
Ich würde mich über Hinweise freuen, was mir fehlt. Freundliche Grüße.
//pattern list
fill_patterns_shuffled = {"left slant light", "horizontal light", "right slant light", "vertical light"};
//list of parameters, it can change depending on data available
list2 = {"Param1", "Param2", "Param3"};
legend_model_expr = Expr( Legend Model (53) );
For( c = 1, c <= N Items( list2 ), c++,
y_expr3 = Eval(Parse( "Properties( " || char(c-1) || ", {Fill Pattern( \!"" || fill_patterns_shuffled[ c ] || "\!") }, Item ID( \!"Mittelwert(" || char(list2[ c ]) || ")\!", 1 ) ),"
),
),
//write(y_expr3);
//Insert Into( y_expr3, 1 );
//Insert Into( legend_model_expr, Name Expr( y_expr3) );
);BEARBEITEN:
Ok, bei Verwendung von Eval sucht JMP nach der Funktion "Eigenschaften", die tatsächlich nicht vorhanden ist. Wahrscheinlich tritt deshalb ein Fehler auf. Der zweite Fehler bleibt jedoch bestehen.
Ok, ich habe es geschafft. Unten habe ich einen korrekten Code eingefügt. Freundliche Grüße
//legend
legend_model_expr = Expr( Legend Model (26) );
For( c = 1, c <= N Items( list2 ), c++,
y_expr3 = substitute(expr( Properties( c1, {Fill Pattern( fill ) }, Item ID( "Mittelwert(" || name || ")" , 1 ), ), ), expr(c1), c, expr(fill), char(fill_patterns_shuffled[c]), expr(name), list2[c]);
//show(y_expr3);
Insert Into( y_expr3, "");
Insert Into( legend_model_expr, Name Expr( y_expr3) );
);