Come aggiungere/personalizzare un bordo (contorno) ai grafici a barreCiao comunità JMP,
Vorrei aggiungere un contorno/bordo attorno a ogni barra di un grafico a barre e personalizzarne la larghezza. Come posso ottenere questo risultato in JMP?
Come mostrato nell'immagine sottostante, vorrei aggiungere un bordo o un contorno attorno a ciascuna barra.

Ho sentito parlare di una soluzione alternativa che consiste nel sovrapporre due grafici a barre per simulare un contorno. Tuttavia, questo metodo non sembra consentire la personalizzazione della larghezza del contorno.
Esiste un modo, tramite l'interfaccia di Graph Builder o modificando uno script, per applicare un contorno a ciascuna barra e modificarne in modo indipendente il colore e la larghezza?
Attualmente utilizzo JMP Student Edition 19.
Grazie in anticipo per il tuo aiuto!
Analisi e modellazione dei dati di baseEsplorazione e visualizzazione dei datiRe: Come aggiungere/personalizzare un bordo (contorno) ai grafici a barrePenso che usare un secondo grafico a barre dovrebbe essere una buona soluzione, ma richiederà un po' di lavoro, perché bisognerebbe creare una colonna extra per ottenere altezze corrette e poi modificare le proporzioni della larghezza. Questo è stato fatto con quel metodo.

Ecco uno script di esempio che puoi eseguire e poi esplorare come è stato costruito il grafico (l'ordine dei grafici a barre è stato modificato, la proporzione della larghezza è stata modificata, il colore è stato cambiato e così via...)
Scopri di più...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << New Column("Mean[height][age]",
Numeric,
"Continuous",
Formula(Col Mean(:height, :age) + 1)
);
gb = dt << Graph Builder(
Size(656, 549),
Show Control Panel(0),
Variables(
X(:age),
Y(:height),
Y(:"Mean[height][age]"n, Position(1)),
Overlay(:age)
),
Elements(
Bar(X, Y(1), Legend(6), Bar Style("Stacked")),
Bar(X, Y(2), Legend(7), Bar Style("Stacked"))
),
SendToReport(
Dispatch({}, "400", ScaleBox,
{Legend Model(
7,
Base(0, 0, 0, Item ID("12", 1)),
Base(1, 0, 1, Item ID("13", 1)),
Base(2, 0, 2, Item ID("14", 1)),
Base(3, 0, 3, Item ID("15", 1)),
Base(4, 0, 4, Item ID("16", 1)),
Base(5, 0, 5, Item ID("17", 1)),
Type Properties(0, "Bar", {Fill Color(0)}),
Properties(0, {Fill Color(0)}, Item ID("12", 1)),
Properties(1, {Fill Color(0)}, Item ID("13", 1)),
Properties(2, {Fill Color(0)}, Item ID("14", 1)),
Properties(3, {Fill Color(0)}, Item ID("15", 1)),
Properties(4, {Fill Color(0)}, Item ID("16", 1)),
Properties(5, {Fill Color(0)}, Item ID("17", 1))
)}
),
Dispatch({}, "Graph Builder", FrameBox,
{Reorder Segs({1, 2, 4}), DispatchSeg(
BarSeg(1),
{Set Width Proportion(0.7)}
)}
),
Dispatch({}, "400", LegendBox,
{Legend Position({6, [0, 1, 2, 3, 4, 5], 7, [-1, -1, -1, -1, -1, -1]})}
)
)
);
Re: Come aggiungere/personalizzare un bordo (contorno) ai grafici a barre@jthi ha una buona soluzione. Tendo a usare le primitive grafiche JMP che permettono di disegnare direttamente linee e rettangoli, con la possibilità di colorarli e definirne lo spessore.
Per la documentazione e gli esempi su come procedere, vedere Aggiungi script grafico nell'indice degli script e nella guida agli script.
Re: Come aggiungere/personalizzare un bordo (contorno) ai grafici a barreAltre (buone) opzioni sarebbero:
- Utilizzando Graphic Script. Devi sapere quante barre hai, e credo che non sia possibile ottenere questa informazione dall'oggetto BarSeg. Quindi, è più facile farlo aggiungendo un marcatore di supporto al grafico (può essere nascosto dal grafico finale).
- Utilizza l'espressione di disegno del marcatore. Richiede l'aggiunta di un marcatore, è più difficile da implementare, ma è probabilmente l'opzione più robusta.
Non ho tempo di elencare queste opzioni ora, ma esistono
Re: Come aggiungere/personalizzare un bordo (contorno) ai grafici a barreHo avuto il tempo di creare la sceneggiatura grafica
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(656, 549),
Show Control Panel(0),
Variables(X(:age), Y(:height)),
Elements(
Bar(X, Y, Legend(4)),
Points(X, Y, Legend(5), Summary Statistic("Mean"))
),
SendToReport(
Dispatch({}, "400", ScaleBox,
{Legend Model(
5,
Type Properties(0, "Marker", {Transparency(0)}),
Properties(0, {Transparency(0)}, Item ID("Mean", 1))
)}
)
)
);
fb = Report(gb)[FrameBox(1)];
fb << Add Graphics Script(Function({this}, // can be laggy as it is a graphic script with a loop
ms = this << Find Seg(MarkerSeg(1));
xs = ms << Get X Values;
ys = ms << Get Y Values;
sideshift = 0.27;
For(i = 1, i <= N Items(xs), i++,
Pen Size(10); // Width of the line
Pen Color("Black");
Rect(xs[i] - sideshift, ys[i], xs[i] + sideshift, -1, 0);
);
));

Ed ecco Marker Draw Expr
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(656, 549),
Show Control Panel(0),
Variables(X(:age), Y(:height)),
Elements(
Bar(X, Y, Legend(4)),
Points(X, Y, Legend(5), Summary Statistic("Mean"))
),
SendToReport(
Dispatch({}, "400", ScaleBox,
{Legend Model(
5,
Type Properties(0, "Marker", {Transparency(0)}),
Properties(0, Item ID("Mean", 1))
)}
)
)
);
fb = Report(gb)[FrameBox(1)];
seg = (fb << FindSeg(Marker Seg(1)));
seg << Set Marker Draw Expr(
Function({this seg, this row, x, y, size, row state},
Pen Size(10); // Width of the line
Pen Color("Black");
Rect(x - 0.27, y, x + 0.27, -1, 0);
)
);

Re: Come aggiungere/personalizzare un bordo (contorno) ai grafici a barre@jthi ,
L'esempio "Marker Draw Expr" non funziona correttamente nella mia installazione di JMP 19. Il valore predefinito di Trasparenza per il marcatore sembra essere impostato su 0. La semplice modifica seguente consente di visualizzare correttamente il rettangolo.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(656, 549),
Show Control Panel(0),
Variables(X(:age), Y(:height)),
Elements(
Bar(X, Y, Legend(4)),
Points(X, Y, Legend(5), Summary Statistic("Mean"))
),
SendToReport(
Dispatch({}, "400", ScaleBox,
{Legend Model(
5,
Type Properties(0, "Marker", {Transparency(0)}),
Properties(0, Item ID("Mean", 1))
)}
)
)
);
fb = Report(gb)[FrameBox(1)];
seg = (fb << FindSeg(Marker Seg(1)));
seg << Set Marker Draw Expr(
Function({this seg, this row, x, y, size, row state},
show(x,y);
Pen Size(10); // Width of the line
Pen Color("Black");
transparency(1); // Needed for JMP 19
Rect(x - 0.27, y, x + 0.27, -1, 0);
)
);
Re: Come aggiungere/personalizzare un bordo (contorno) ai grafici a barreSe per te va bene una linea sottile come bordo, è semplicissimo: aggiungi semplicemente un secondo grafico a barre con pattern = "none" e regola il colore, ad esempio in nero.

Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Graph Builder(
Size( 469, 365 ),
Summary Statistic( "Median" ),
Variables( X( :age ), Y( :height ), Overlay( :sex ), Color( :sex ) ),
Elements(
Bar( X, Y, Bar Style( "Stacked" ) ),
Bar( X, Y, Legend( 2 ), Bar Style( "Stacked" ) )
),
SendToReport(
Dispatch( {}, "400", ScaleBox,
{Legend Model(
2,
Properties(
0,
{Fill Color( 0 ), Fill Pattern( "none" )},
Item ID( "F", 1 )
),
Properties(
1,
{Fill Color( 0 ), Fill Pattern( "none" )},
Item ID( "M", 1 )
)
)}
)
)
);
Re: Come aggiungere/personalizzare un bordo (contorno) ai grafici a barre@txnelson
Grazie mille per le tue risposte dettagliate. Sono state molto utili. Ma c'è un'altra cosa che vorrei fare.
Quando utilizzo Set Marker Draw Expr per disegnare un bordo della barra, questo viene disegnato sullo strato superiore.
Di conseguenza, quando aggiungo barre di errore o singoli punti dati (tramite un grafico a punti), il bordo personalizzato viene disegnato sopra di essi.
Esiste un modo per controllare l'ordine di disegno (livello) del bordo in modo che appaia dietro i punti dati?
Per la creazione di grafici altamente personalizzati, in genere si utilizzano linguaggi di scripting come R o software dedicati come GraphPad Prism?
Re: Come aggiungere/personalizzare un bordo (contorno) ai grafici a barrepuoi regolare l'ordine del singolo elemento:
fare clic con il tasto destro del mouse sul grafico e modificare l'ordine:

Se è presente un solo tipo di trama, basta aggiungerne 20 e personalizzarli.
Graph Builder è di gran lunga più flessibile e potente di quanto si possa pensare a prima vista. Ecco il trucco:
una transizione graduale dal semplice trascinamento della selezione ai grafici altamente personalizzati.
Con Imposta marcatore Disegna Espr hai già avuto a che fare con una funzionalità molto elaborata, ma ce ne sono molte altre.
Non è necessario utilizzare un altro strumento di tracciamento.
Re: Come aggiungere/personalizzare un bordo (contorno) ai grafici a barreDisegna il grafico con i nuovi bordi e le barre di errore. Fai clic con il pulsante destro del mouse sul grafico e seleziona "Personalizza". Si aprirà una finestra di dialogo in cui puoi selezionare le barre di errore e spostarle in primo piano. Chiudi la finestra di dialogo, quindi vai al triangolo rosso e seleziona "Salva script". Puoi quindi esaminare lo script generato e vedere cosa è necessario per spostare le barre di errore in primo piano utilizzando JSL.