Bonjour,
J'ai écrit un script dans lequel j'ai pu ajouter un curseur pour la profondeur d'échantillonnage sur un contour de générateur de graphique. Cependant, la carte ne répond pas et change lorsque le curseur est utilisé.
Je crois que tout est référencé correctement et je n'ai pas d'erreur avec le journal, mais rien ne change lorsque je déplace le curseur.
Le script est joint.
Names Default to Here(1);
dt = Currentdatatable();
datacolumn=column(dt, "End Depth");
new window ("RFIS Contour Plot Depth Filtering",
window:gb = Graph Builder(
Size( 599, 514 ),
Show Control Panel( 0 ),
Variables(
X( :Longitude ),
Y( :Latitude ),
Color(
Transform Column( "Log[SUM TOC NORM]", Formula( Log( :SUM TOC NORM ) ) )
)
),
Elements(
Contour(
X,
Y,
Legend( 5 ),
Line( 1 ),
Boundary( 0 ),
Number of Levels( 10 ),
Alpha( 95.1827841988282 ),
Smoothness( 0.01 )
),
Points( X, Y, Legend( 6 ) )
),
Local Data Filter(
Add Filter(
columns( :Sample Code, :Area ),
Where( :Area == "AOI" ),
Display(
:Sample Code,
"Single Category Display",
Find( Set Text( "" ) )
)
)
),
SendToReport(
Dispatch(
{},
"Longitude",
ScaleBox,
{Scale( "Geodesic" ), Format( "Best", 15 ), Min( -122.777380897341 ),
Max( -122.674219621177 ), Inc( 0.025 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"Latitude",
ScaleBox,
{Scale( "Geodesic" ), Format( "Fixed Dec", 15, 2 ),
Min( 45.5156964729219 ), Max( 45.6018236979199 ), Inc( 0.05 ),
Minor Ticks( 0 )}
),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
5,
Properties(
0,
{gradient(
{Color Theme(
{"Green Yellow Red Copy", 16387, {"Green", "Yellow",
{252, 11, 11}}, {0.273504273504274, 0.5,
0.789173789173789}}
), Width( 12 )}
)},
Item ID( "Log[SUM TOC NORM]", 1 )
)
), Legend Model(
6,
Properties(
0,
{gradient(
{Color Theme(
{"Green Yellow Red Copy", 16387, {"Green", "Yellow",
{252, 11, 11}}, {0.273504273504274, 0.5,
0.789173789173789}}
), Width( 12 ), N Labels( 10 )}
)},
Item ID( "Log[SUM TOC NORM]", 1 )
),
Properties( 1, {Marker Size( 4 )}, Item ID( "Latitude", 1 ) )
)}
),
Dispatch(
{},
"graph title",
TextEditBox,
{Set Text( "RFIS Contour Plot Depth Filtering" )}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{Background Map(
Images(
"Web Map Service",
"http://wms2.mapsavvy.com/WMSService.svc/f8e454cf75bf41a882e5126809b56a45/WMSLatLon",
"Aerial"
)
), Grid Line Order( 2 ), Reference Line Order( 3 )}
),
Dispatch(
{},
"400",
LegendBox,
{Legend Position( {5, [0], 6, [-1, -1]} ), Position( {0, -1, -1} )}
)
),
),
H List Box(
Text Box("Depth"),
window:slmin = col min(datacolumn);
window:slmax = col max(data column);
window:slider1 = SliderBox(window:slmin, window:slmax, window:slmax,
scale=Matrix( {slmin,slmax} );
scale=scale`;
window:gb <<SENDTOREPORT></SENDTOREPORT>Merci
Le problème avec ceci est que la "profondeur de fin" n'est utilisée ni dans la légende ni dans l'axe. J'ai juste besoin d'un curseur qui filtre les données. Le filtre de données local n'a pas de curseur comme vous le verriez avec un graphique à bulles par exemple qui reste à une profondeur fixe, mais qui est une plage de valeurs.
Puis-je simplement changer le curseur sur le filtre de données local?
Voici un code qui utilise un curseur pour manipuler la limite inférieure du filtre de données local (je ne sais pas si je peux changer la valeur donc je la supprime et la recrée mais cela semble fluide - pour de petites quantités de données au moins).
names default to here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
minval = min(:height<<GETVALUES>= 51 & :height <= 70 ) ),
Close Outline(1)
);
// add a slider to control the minimum value of the data filter
vlb << append(
SliderBox(minval,maxval,::var,
df << delete(:height);
df <<ADDFILTER>= ::var ) )
)
)</ADDFILTER></GETVALUES>
Si vous souhaitez contrôler à la fois les limites inférieure et supérieure du filtre, vous pouvez utiliser un RangeSliderBox.
(ps: c'est du code légèrement bâclé - lorsque le curseur exécute le df la variable n'est plus dans la portée; le code fonctionne mais en pratique, je mettrais la variable dans un espace de noms et je reconstruirais une référence à l'espace de noms dans le script slider)