创建用于自定义表格表示的功能

| 我使用下面的代码来概述部分数据。 用下面的代码制作函数的最佳方法是什么? 它需要一个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]}]
    
已邀请:
        贝利撒留提出了基本方法。我将介绍一种高级方法,因为您似乎渴望学习。 首先让我说,我看到了我认为是您的代码的简化,然后我做了,希望不会出错。 我将在以下插图中使用此样本数据:
data = Prepend[
         RandomInteger[99, {5, 12}], 
         DateString[{1, #}, \"MonthName\"] & /@ Range@12
       ];
目标 由于使用的主要功能是“ 2”,因此允许将选项传递给它很有意义。 您具有定义表的一系列选项。我希望能够方便地更改这些。 我希望the2ѭ无法理解自定义选项。 实作 目标1 添加了自变量模式“ 4”,该模式与“ 5”自变量的任何序列匹配,并将其命名为“ 6”。 (有关更多信息,请参见:OptionsPattern。)然后,将
opts
插入到基本功能中,再将options2ѭ的其他选项插入。这允许任何显式给定的选项覆盖默认值或要给定的新选项。
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 可以将定义表格格式的选项与功能主体分开。这将使它们可以方便地进行更改或引用。我先用ѭ12清除前面的定义。然后我将默认值
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
现在,您可以使用ѭ18easily轻松更改默认值。例:
SetOptions[customTabular, 
  Background -> {{{LightMagenta, LightOrange}}}
];

customTabular[data]
目标3 现在,我想添加一个未传递给
Grid
的选项。选择
\"Rotation\"
更改标题行的文本旋转。 我再次清除先前的定义和默认选项。请注意,列表中包括了“ 22”。
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
访问该选项,如果未明确给出任何选项,它将提供默认值。 我通过使用
FilterRules
仅传递了有效的
Grid
选项。 我首先将所有显式选项加入
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}
]
    
        我会按照通常的方式做
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
要求什么...     

要回复问题请先登录注册