2011-06-16 3 views
4

Construire sur la solution proposée par Bélisaire en "Manipulate custom Tabular".Liste dynamique de sélection dans une autre dynamique dans Mathematica

  • Tenir compte de la fonction suivante pour créer une représentation personnalisée tabulaires:

    DataSampleXX[data_, linesNumber_, columnsList_, color1_, color2_, color3_] := 
    
    Grid[ 
    Join[ 
        {columnsList}, {Map[Rotate[Text[#], 90 Degree] &, 
         data[[1, columnsList]]]}, data[[2 ;; linesNumber, columnsList]]], 
    Background -> {{{{color1, color2}}, {1 -> color3}}}, 
    Dividers -> {All, {1 -> True, 2 -> True, 3 -> True, 0 -> True}}, 
    ItemSize -> {1 -> Automatic, Automatic}, 
    Alignment -> Top, 
    Frame  -> True, 
    FrameStyle -> Thickness[2], 
    ItemStyle -> {Automatic, 
    Automatic, {{1, 1}, 
    {1, Length[data]}} -> Directive[FontSize -> 15, Black, Bold]} 
    ]; 
    
  • Et les données suivantes:

    soData = {{"col1", "col2", "col3", "col4", "col5", "col6", "col7", 
          "col8", "col9", "col10"}, Range[1, 10], Range[11, 20], 
          Range[21, 30], Range[31, 40]} 
    
    
    With[ 
        {columnsList = {1, 3}, 
         data = soData, 
         linesNumber = 3, 
         color1 = LightBlue, 
         color2 = LightRed, 
         color3 = LightGray}, 
         DataSampleXX[data, linesNumber, columnsList, color1, color2, color3]] 
    

Output

  • Je voudrais intégrer la dynamique suivante pour alimenter l'argument columnsList de la fonction DataSampleXX.

    Manipulate[[email protected][Sequence @@ {a, b}], 
          Evaluate[Sequence @@ MapThread[{{#1, {}, ""}, #2, 
          ControlType -> TogglerBar} &, {{a, b}, 
          Partition[Rule @@@ Transpose[{Range[10], soData[[1]]}], 5]}]], 
          ControlPlacement -> Top] 
    

What I want

  • Cela devrait me permettre de choisir dynamiquement les colonnes (VS une gamme de colonne dans ma question précédente) à afficher à l'aide DataSampleXX mais je figure encore Can`t comment fusionner les 2 mécanismes.

Répondre

7

Qu'est-ce que vous voulez faire quelques trucs a besoin.

Par exemple:

Maipulate[ f[ Array[ a, exp], ...], ...] 

et constructions similaires ne fonctionnent pas (et il est expliqué dans la documentation), parce que le a[_] ne sont pas explicitement dans l'expression, donc il est difficile d'avoir un nombre variable de contrôles . La solution que je trouve est:

Manipulate[ f[#,...], ... ] & @ Array[a, exp] 

Autre problème est que la construction

[email protected](.#.) &/@ _controls_ 

ne permet pas en soi deux partition dimensions, donc nous devons utiliser les deux options @ Control de syntaxe (@ Control et {...}), ce qui n'est pas documenté.

Autres nuisances que vous pouvez trouver dans le code ci-dessous.

Alors:

soData = {{"col01", "col02", "col03", "col04", "col05", "col06", 
      "col07", "col08", "col09", "col10"}, 
      Range[1, 10], Range[11, 20], Range[21, 30], Range[31, 40]}; 
perRow = 5; 
colsel = (# -> Graphics[{#, Disk[]}, ImageSize -> 15]) &/@ColorData[1, "ColorList"]; 
s[x_] := Style[x, Black, Bold, 12]; 
ct = ControlType -> PopupMenu; 

Manipulate[ 
    DataSampleXX[soData, linesNumber, [email protected][Sequence @@ #], color1, 
                   color2, color3], 
    Row[ 
    {Column[ 
     {[email protected]{{linesNumber, 2, [email protected]"Lines"}, 
     Range[2, [email protected][[All, 1]] - 1], ct}}], 
     Spacer[20], 
    Column[ 
     {[email protected]{{color1, colsel[[1, 1]], [email protected]"Color 1"}, colsel, ct}, 
     [email protected]{{color2, colsel[[2, 1]], [email protected]"Color 2"}, colsel, ct}, 
     [email protected]{{color3, colsel[[3, 1]], [email protected]"Color 3"}, colsel, ct}}]}], 
    Evaluate[ 
    Sequence @@ 
    MapThread[{{#1, {}, ""}, #2, ControlType -> TogglerBar} &, 
     {#, Partition[Rule @@@ Transpose[{Range[10], soData[[1]]}], perRow]}]]] &@ 
Array[a, Length[soData[[1]]]/perRow] 

enter image description here

+0

@Belisarius, il est! Maintenant, mon problème est que j'ai 100 colonnes, voilà pourquoi je me suis séparé dans le groupe 5, est-il un moyen d'ajuster votre code pour le faire? Aussi, j'ai essayé une fois de vous envoyer un e-mail à l'adresse que vous fournissez sur votre profil sans succès. Et je voudrais vous montrer ce que je suis venu à l'aide de certaines de vos solutions! – 500

+0

@ 500 laissez-moi voir si je peux trouver quelque chose pour les problèmes de cent cols. Re "mon email" ... ça marche. Ça a l'air idiot, mais ... Avez-vous remplacé le '[dot]' et le [at] 'par les symboles correspondants? –

+0

@Belisarius, vient de vous envoyer un e-mail au cas où il va dans votre boîte de courrier indésirable. J'espère que mon code ne sera pas laid à vos yeux experts.Merci beaucoup pour votre attention. – 500

Questions connexes