it-swarm-eu.dev

Come creare bande di intervalli di numeri per un campo?

Ho un campo in un sistema chiamato "Punteggio" che varia da un numero negativo indeterminato a un numero positivo indeterminato. Sto cercando di capire un'interfaccia utente per l'utente di creare "bande" di numeri che possono essere etichettati. (Esempio: basso, medio, alto)

La copertura delle bande deve essere completa (all'infinito negativo e positivo) e anche escludersi a vicenda (nessuna sovrapposizione).

Ho sperimentato cursori, ma questo è un problema difficile. Qualcuno l'ha già fatto?

3
Glen Lipka

Sono un po 'angosciato dal fatto che le persone che vivono in un mondo esposto a cose come Google Instant e StackExchange possano farlo forse ancora suggerendo qualsiasi approccio "rigido" e "simile a una forma"! : -/Parafrasando @ BobbyJack e Wendy's dicendo "Dov'è il manzo?"

Ad esempio, perché dovrei ordinare i numeri invece di lasciare che il computer lo faccia per me? Non posso semplicemente fornire un elenco di punti di divisione e fare in modo che facciano gli intervalli? Che cosa succede se i miei dati provengono da una fonte che ha già i numeri in un elenco: in che modo l'elaborazione automatizzata può essere d'aiuto?

Ma è meglio accendere una candela che maledire l'oscurità, no? :) Sono in vacanza ed è passato un po 'di tempo da quando ho aggiornato il mio blog, e Glen suggerisce che non ci fossero opere precedenti su questo. Quindi ho pensato di fare una pausa nel codificarlo che puoi effettivamente provare online (ovviamente "incompiuto"):

http://jquery-numband.hostilefork.com

( Aggiornamento: 20-Mar-2015 Ho aggiunto un breve video dimostrativo .) =

screenshot of the program in action

È possibile inserire un testo a mano libera. Seleziona tutto ciò che è un numero, elimina i duplicati e genera gli intervalli. Se vuoi aggiungere un nuovo numero, puoi semplicemente digitarlo lì (nulla ti impedisce di mettere anche più pulsanti, ma è abbastanza bello modificare l'elenco dei punti di divisione in modo indipendente).

Le frecce consentono di specificare i limiti inclusivi/esclusivi dell'intervallo. Fai clic su una freccia per saltare nel gruppo di bande adiacente e invertire la direzione. (Quindi nel diagramma sopra, "blah" è per qualcosa di maggiore di 20 ma inferiore a 40 ... mentre 20 andrà a "Default" e 40 andrà a "next".)

Ho fatto un semplice meccanismo storico, ma si può immaginare qualcosa di molto meglio. Fondamentalmente se aggiungi solo un nuovo punto di divisione e cancella una mappatura che hai inserito ... mantiene quel vecchio valore in giro insieme alla memoria dell'intervallo a cui era associato. Per il momento torno automaticamente indietro le voci della cronologia solo se ritorna un intervallo con gli stessi limiti numerici. Sarebbe anche possibile dare suggerimenti dalla storia o trascinarli da essa.

È open-source, MIT, e migliorarlo è lasciato come esercizio al lettore :)

https://github.com/hostilefork/jquery-numband

Prima di tutto, quanto conosceranno bene il simbolo dell'infinito per i tuoi utenti? È un piccolo punto, e immagino che saranno staranno bene, ma vale comunque la pena controllarlo.

In secondo luogo, non riesco a vedere come un dispositivo di scorrimento con infinito (positivo o negativo) ad una estremità possa mai funzionare. Il tuo esempio mostra 20 vicino al centro; quale valore verrebbe usato vicino ad una estremità? 1 milione? 1 trilione? 1 googol?

Se i valori sono veramente illimitati, è necessario un meccanismo rapido per immetterli e qualsiasi tipo di dispositivo di scorrimento o pulsanti "+"/"-" non sarà davvero adatto a numeri enormi. Il testo a mano libera inizia a sembrare l'unica opzione ed è sicuramente il più flessibile, se non il più attraente.

Puoi fare un esempio di un set di band? Voglio davvero avere un'idea del fatto che siano qualcosa del tipo:

-INFINTY - -100
-100 - 100
100 - INFINITY

o:

-INFINITY - -1,000,000,000,000
-1,000,000,000,000 - -500,000,000,000
...

o se davvero tutto è possibile.

2
Bobby Jack

Sono d'accordo al 100% con l'approccio di HostileFork di una voce in stile casella di testo. Quando stavo leggendo la domanda, mi è venuta subito in mente la classica interfaccia utente della finestra di dialogo di stampa per l'inserimento di quali pagine devono essere stampanti: è un problema simile e l'input della casella di testo è ancora la migliore soluzione che riesco a vedere.

Penso che ci siano anche alcune altre cose da considerare:

  • Gli utenti potrebbero voler suddividere in bande equidistanti, questo sarebbe abbastanza doloroso con un'interfaccia utente della casella di testo perché l'utente è costretto a inserire manualmente ogni limite del bucket (molto doloroso se le bande sono piccole rispetto all'intervallo di valori dei dati)
  • Penso che sia importante visualizzare le bande per aiutare l'utente a rendersi conto che stanno potenzialmente creando bande di dimensioni non uguali
  • Penso che nominare manualmente le bande sia un caso Edge, l'app può farlo usando una convenzione standard di denominazione delle bande (con l'utente che sceglie di rinominare solo se lo desidera)

Ecco un mockup: enter image description here

  • Puoi immaginare la visualizzazione dell'intervallo blu che anima le sottodivisioni mentre digiti i valori nella casella di testo
  • Poiché la visualizzazione dell'intervallo è in scala, esiste il problema della creazione di secchi troppo piccoli che non consentono spazio per le etichette. Le etichette appariranno dove possono ma verranno lasciate cadere se non c'è spazio; l'utente può passare con il mouse sui blocchi e ottenere queste informazioni (e altro) tramite una descrizione comandi.


Il problema delle unità miste:
Per dimensioni continue gerarchiche (come il tempo) c'è il problema dell'input da diversi livelli gerarchici. Ad esempio, nel caso del mandato, gli utenti potrebbero voler specificare le prime poche bande di possesso in termini di mesi e il resto in termini di anni; tuttavia, l'interfaccia utente della casella di testo richiede che tutti gli input siano nella stessa unità di tempo (ad es. anni). Un'opzione è quella di utilizzare un approccio decennale, con l'arrotondamento di input al mese più vicino (ad es. Se l'utente immette 0,27 si arrotonderà a 0,25, che equivale a 3 mesi). Naturalmente, questa non è una grande usabilità: posso solo vedere gli utenti seduti lì con una calcolatrice che cercano di capire quale è il formato decimale di 5 mesi in anni. Un altro approccio sarebbe quello di avere un'unità di tempo attiva/disattiva accanto alla casella di testo (modello di seguito). Indipendentemente da ciò, penso che il nome automatico delle bande dovrebbe fare la conversione di unità ed evitare i decimali! enter image description here

2
M.A.X

Una possibilità che un amico ha inventato.

alt text

1
Glen Lipka

Penso che tu sia sulla strada giusta per rappresentare graficamente gli intervalli. Il mio primo pensiero di testare è qualcosa del genere, con nomi di intervallo chiaramente tra i limiti di intervallo:

[img

Un pulsante più divide l'intervallo aggiungendo un limite predefinito (forse a metà strada) e un nome predefinito, con lo stato attivo posizionato sul nuovo limite per la regolazione. L'utente può fare clic o scheda per selezionare il nome dell'intervallo per modificarli, se lo si desidera.

alt text

Sono necessari due Elimina per intervallo, uno per eliminare il nome e il limite superiore e uno per eliminare il nome e il limite inferiore:

[ing

La spaziatura tra i confini può essere proporzionale alla loro separazione, nel qual caso probabilmente è necessario supportare anche lo zoom avanti e indietro. È inoltre possibile consentire agli utenti di trascinare e rilasciare un limite per modificarne il valore. Tuttavia, se i tuoi utenti riescono a percepire adeguatamente le dimensioni di un intervallo solo dai valori numerici, allora per semplicità potresti voler mettere insieme i confini (come ho fatto io) in modo da rappresentare solo il loro ordinamento . In tal caso, potresti voler creare i filatori dei controlli di confine (come ho fatto io) per consentire un'alternativa alla digitazione di un valore.

Il disegno sopra è abbastanza auto-documentato, anche se probabilmente devi giocherellare con il disegno grafico, in particolare per comunicare come i due pulsanti Elimina sono diversi (è improbabile che i miei disegni grezzi siano adeguati). Tuttavia, il design è anche relativamente ingombrante e ingombrante (sebbene, ancora una volta, una migliore progettazione grafica possa aiutare). Se lo spazio è un premio, potresti voler sacrificare un po 'di autocertificazione e prendere in considerazione un modello di azione di selezione di oggetti, in cui ciascun nome di intervallo ha un'icona per supportare la selezione e un menu (sia un menu a discesa che un contesto) per fornire le opzioni . Consente inoltre di includere come opzione la copia di intervalli in una riga di punteggio diversa:

[img

Ciò implica che supporti la selezione multipla attraverso i soliti modi di dire.

Posso pensare a due modi fattibili per gestire l'utente modificando un valore di confine in modo che salti fuori rana un altro confine:

  • Prevent. Semplicemente non permetterlo. Se l'utente digita un valore di frob-frogging, genera un messaggio di errore. Se l'utente trascina o gira su un altro limite, fornisci un feedback grafico che l'utente è a un limite (ad esempio, il limite limite diventa grassetto e rosso). Questo è meglio se i rospi tendono ad essere errori (ad esempio, l'utente ha digitato una cifra aggiuntiva). È facile recuperare da questo.

  • Squish. Modificare il limite (o i confini) aggirati dai salti in modo che siano uguali al limite. Questo è meglio se i rospi tendono a intenzionalmente - che l'utente ha intenzione di regolare o eliminare i limiti o gli intervalli aggirati dai salti quando sono buoni e pronti. È flessibile ma più difficile da recuperare se si tratta di un errore poiché modifica i valori di qualsiasi numero di confini, soprattutto se non si supporta Annulla (ma si avrà Annulla, non è vero?)

1
Michael Zuschlag

Suggerisco di etichettare l'asse con 0, - [numero grande] e + [numero grande] con una coda dopo ognuno di quelli che saliranno esponenzialmente

0
Schuyler