6

以下のコードを使用して、データの一部の概要を取得します。

  • 以下のコードから関数を作成するための最良の方法は何でしょうか?

  • dataListといくつかのグラフィカルオプション(色など)を引数として取り、以下に示すようにカスタマイズされた表形式の表現を返します。

    overviewtheData=Text@Grid[{Map[Rotate[Text[#],
    90Degree]&,data[[1]]]}~Join~data[[2;;]],
    Background->{{{{White,Pink}},{1->White}}},
    Dividers->{All,{1->True,2->True,0->True}},
    ItemSize->{1->5,Automatic},
    Alignment->Top,
    Frame->True,
    FrameStyle->Thickness[2],
    ItemStyle->{Automatic,Automatic,{{1,1},
    {1,Length@data[[1]]}}->Directive[FontSize->15,Black,Bold]}]
    

ここに画像の説明を入力してください

4

2 に答える 2

7

ベリサリウスが基本的な方法を示しました。あなたは学びたがっているように見えるので、私は高度な方法を紹介します。

最初に、私が信じていたのはあなたのコードの単純化であると私が見たと言わせてください、そして私はそれらを、うまくいけば間違いではないように作りました。

このサンプルデータを以下の図で使用します。

data = Prepend[
         RandomInteger[99, {5, 12}], 
         DateString[{1, #}, "MonthName"] & /@ Range@12
       ];

目標

  1. 使用される主な機能はGrid、オプションを渡すことを許可することは理にかなっています。

  2. テーブルを定義する一連のオプションがあります。これらを便利に変更できるようにしたいと思います。

  3. が理解できないカスタムオプションの可能性が欲しいGrid


実装

目標#1

opts:OptionsPattern[]引数の任意のシーケンスに一致する引数パターンが追加され、Option -> Setting名前が付けられoptsます。(詳細については、 OptionsPatternを参照してください。)次に、optsのその他のオプションの前に、基本関数に挿入されますGrid。これにより、明示的に指定されたオプションでデフォルトをオーバーライドしたり、新しいオプションを指定したりできます。

customTabular[data_, opts : OptionsPattern[]] :=
  Grid[MapAt[Rotate[#, 90 Degree] & /@ # &, data, 1],
   opts,
   Background -> {{{White, Pink}}},
   Dividers -> {All, {2 -> True}},
   ItemSize -> {1 -> 5},
   Alignment -> {Center, {1 -> Top}},
   Frame -> True,
   FrameStyle -> Thickness[2],
   ItemStyle -> Directive[FontSize -> 15, Black, Bold]
  ] // Text

例:

customTabular[data]

ここに画像の説明を入力してください

customTabular[data, Background -> LightBlue]

ここに画像の説明を入力してください

目標#2

表形式を定義するオプションは、関数本体から分離できます。これにより、それらを便利に変更または参照できるようになります。まず、前の定義を。でクリアしClearAllます。Options次に、デフォルトを設定しcustomTabularます。

ClearAll[customTabular]

Options[customTabular] =
  {Background -> {{{White, Pink}}},
   Dividers -> {All, {2 -> True}},
   ItemSize -> {1 -> 5},
   Alignment -> {Center, {1 -> Top}},
   Frame -> True,
   FrameStyle -> Thickness[2],
   ItemStyle -> Directive[FontSize -> 15, Black, Bold]};

これで機能は適切になりました。Options@customTabular上記のルールを取得します。

customTabular[data_, opts : OptionsPattern[]] := 
 Grid[MapAt[Rotate[#, 90 Degree] & /@ # &, data, 1],
   opts, 
   Sequence @@ Options@customTabular
 ] // Text

これで、。を使用してデフォルトを簡単に変更できますSetOptions。例:

SetOptions[customTabular, 
  Background -> {{{LightMagenta, LightOrange}}}
];

customTabular[data]

ここに画像の説明を入力してください

目標#3

次に、に渡されないオプションを追加しますGrid"Rotation"タイトル行のテキストの回転を変更することにしました。

ここでも、以前の定義とデフォルトのオプションをクリアします。リストに含まれていることに注意"Rotation" -> 90 Degreeしてください。

ClearAll[customTabular]

Options[customTabular] =
  {Background -> {{{White, Pink}}},
   Dividers -> {All, {2 -> True}},
   ItemSize -> {1 -> 5},
   Alignment -> {Center, {1 -> Top}},
   Frame -> True,
   FrameStyle -> Thickness[2],
   ItemStyle -> Directive[FontSize -> 15, Black, Bold],
   "Rotation" -> 90 Degree};

ここで、この新しいオプションを使用する方法が必要です。また、このオプションが次の宛先に送信されないようにする方法が必要ですGrid

  • OptionValue明示的に指定されていない場合にデフォルトを提供するオプションにアクセスします。

  • を使用して有効なGridオプションのみを渡しますFilterRules

最初に、明示的なオプションをリストの先頭に結合して、Options@customTabularデフォルトをオーバーライドします。

customTabular[data_, opts : OptionsPattern[]] :=
 Grid[MapAt[Rotate[#, OptionValue["Rotation"]] & /@ # &, data, 1],
   Sequence @@ FilterRules[{opts} ~Join~ Options@customTabular, Options@Grid]
 ] // Text

例:

SetOptions[customTabular, Background -> {{{LightBrown, LightYellow}}}];

customTabular[data,
  Dividers -> All,
  "Rotation" -> -90 Degree,
  FrameStyle -> {Darker@Red, Thick}
]

ここに画像の説明を入力してください

于 2011-05-28T20:08:19.487 に答える
4

私はそれを通常の方法で行います

f[data_, color1_, color2_] := 
 Text@Grid[{Map[Rotate[Text[#], 90 Degree] &, data[[1]]]}~Join~
    data[[2 ;;]], Background -> {{{{color1, color2}}, {1 -> color1}}},
    Dividers -> {All, {1 -> True, 2 -> True, 0 -> True}},
    ItemSize -> {1 -> 5, Automatic}, Alignment -> Top, Frame -> True, 
    FrameStyle -> Thickness[2], 
    ItemStyle -> {Automatic, Automatic, {{1, 1}, {1, Length@data[[1]]}} -> 
                               Directive[FontSize -> 15, Black, Bold]}]

f[{{t1, t2, t3}, {1, 2, 3}, {4, 5, 6}}, LightBlue, Orange]

ここに画像の説明を入力してください

最後の部分であなたが何を求めようとしているのかわかりませんsuch a graph as an output...

于 2011-05-28T04:49:54.707 に答える