Изобразите различные условия и предметы сразу в Mathematica - PullRequest
3 голосов
/ 22 сентября 2011

Обратите внимание:

Needs["ErrorBarPlots`"];

fixNumberF1F6 = {{{7.11`, 7.51`, 11.14`, 8.19`, 6.58`}, 
                  {2.14`, 2.33`,2.25`, 1.53`,1.71`}},               
                  {{4.69`, 4.79`, 3.78,4.34`, 4.8`}, 
                   {2.22`, 2.71`, 3.18`, 2.29`, 1.93`}}}

fixNumberF1F6 [[1,1]] относится к среднему числу фиксации для каждого субъекта для условия 1, fixNumberF1F6 [[1,2]] стандартное отклонение этих средств. fixNumberF1F6 [[2]] ссылается на условие 2.

plotOptionsXX[title_, yName_, xName_, colors_: Black] :=

  {Frame -> {{True, False}, {True, False}},
   PlotStyle -> colors,
   PlotLabel -> 
   Style[title, Bold, 14, Opacity[1], FontFamily -> "Helvetica"],
   PlotStyle -> Directive[Black, PointSize[Medium]],
   PlotRangePadding -> 0,
   Frame -> {{True, False}, {True, False}},
   LabelStyle -> Directive[Black, Bold, 12],
   FrameLabel -> {{Style[yName, Opacity[1]], 
   None}, {Style[xName, Opacity[1]], None}},
   FrameStyle -> Opacity[0],
   FrameTicksStyle -> Opacity[1],
   AxesStyle -> Directive[Black, 12],
   ImageSize -> laTaille};

ErrorListPlot[fixNumberF1F6[[#]] // Transpose,
              PlotRange -> {{0, 6}, {0, 15}},
              ImageSize -> 300,
              FrameTicks ->{{Range[1, 13, 2], None},{{1, 2, 3, 4, 5}, None}},
              PlotStyle -> Directive[Black, AbsolutePointSize[10], AbsoluteThickness[2]],
              plotOptionsXX["Mean Fixation number", "Fixation Nuber", "SubNo"]] & /@ Range[2]

enter image description here

График слева представляет средний номер фиксации каждого субъекта вместе со стандартным отклонением для условия 1. Справа для условия 2.

Как я мог построить их обоих на 1 участке?

Если это:

fixNumberF1F6across = {{8.10, 1.99}, {4.48, 2.46}}

было среднее значение и SD по предмету. Как я мог показать оба?

-Как я могу показать 2 условия на одном сюжете для разных предметов -Как я могу показать среднее группы и SD на ней.

Ответы [ 4 ]

5 голосов
/ 22 сентября 2011

Для любого количества серий:

plotseries[a_] := 
 Module [{col = ColorData[22, "ColorList"]}, 
  Plot[Evaluate@(Piecewise[{#[[2]], #[[1]] - 1/3 <= x <= #[[1]] + 1/3} & /@ 
           Thread[List[Range@Length@#, #]]] & /@ 
              ({a[[#, 1]] + a[[#, 2]], a[[#, 1]] - a[[#, 2]]}) & /@ 
                (Range@Length@a)), {x, 0, 1 + Length@(a[[1, 1]])}, 
   ClippingStyle -> None,
   PlotStyle -> {None},
   Exclusions -> False,
   Filling -> ({2 # - 1 -> {{2 #}, Directive[col[[#]], Opacity[.2]]}} & /@ 
             Range@Length@a),
   Ticks -> {Range@Length[a[[1, 1]]], Range@#2 &},
   AxesLabel -> {Style["Subject", Medium, Bold], Style["Fixation Time", Medium, Bold]},
   Epilog -> 
    MapIndexed[{Directive[col[[#2[[1]]]], PointSize[.03]], 
       Point@Thread[List[Range@Length[#1[[1]]], #1[[1]]]]} &, a]
   ]
  ]
  b = Table[{Table[j^(i/3) + i, {j, 6}], Table[1, {j, 6}]}, {i, 1, 3}];
  plotseries[b]

enter image description here

5 голосов
/ 22 сентября 2011

Редактировать

Я начал заново. Учитывая, как данные просты и чисты, может быть проще всего использовать ListPlot и добавить бары через Epilog.

Вы все еще можете немного его настроить - например, поместите небольшое расстояние между синими и красными точками данных и столбцами, добавьте легенду и т. д., но основная идея есть.

data = {{{7.11`, 7.51`, 11.14`, 8.19`, 6.58`}, {2.14`, 2.33`, 2.25`,   1.53`, 1.71`}}, {{4.69`, 4.79`, 3.78, 4.34`, 4.8`}, {2.22`,  2.71`, 3.18`, 2.29`, 1.93`}}};

ListPlot[{data[[1, 1]], data[[2, 1]]},
   PlotStyle -> {{PointSize[.025], Red}, {PointSize[0.025], Blue}},
   Frame -> True, 
   PlotRange -> {{0.5, 5.5}, {0, 14}},
   FrameTicks -> {{Automatic, Automatic}, {Range[5], None}},
   FrameLabel -> {{"Fixation (ms)", None}, {"Subject", None}},
   Epilog -> {{Red, Thickness[0.003], Dashed, 
      Line[{{0, m1 = Mean@data[[1, 1]]}, {5.5, m1}}],
      Blue, Line[{{0, m1 = Mean@data[[2, 1]]}, {5.5, m1}}]},
      Thickness[0.005], Red, 
      Line[{{#[[1]], #[[2, 1]]}, {#[[1]], #[[2, 2]]}}] & /@ 
      Transpose@{Range[5], ({#[[1]] + #[[2]], #[[1]] - #[[2]]} & /@ 
      Transpose@data[[1]])},
      Thickness[0.005], Blue, 
      Line[{{#[[1]], #[[2, 1]]}, {#[[1]], #[[2, 2]]}}] & /@ 
      Transpose@{Range[5], ({#[[1]] + #[[2]], #[[1]] - #[[2]]} & /@ 
      Transpose@data[[2]])},
      }]

whisker1

Ниже BoxWhiskerChart от ваших данных. Если это выглядит неопределенно как то, что вас интересует, его можно изменить так, чтобы спред от 25-го процентиля до 75-процентного процентиля был изменен, чтобы отразить спрэд в один день выше и ниже среднего.

И, да, легко наложить групповые средства (N = 5) на Диаграмму.

[Причина, по которой нет идеальной симметрии в отношении среднего значения, заключается в том, что я использовал ваши средние значения и стандартные отклонения для генерации необработанных данных, предполагая нормальное распределение. Я использовал только 100 точек данных на пробу, поэтому небольшое искажение естественно. Этого бы не произошло, если бы мы настроили график так, чтобы он отражал стандартные отклонения, которые являются симметричными.]

BoxWhiskerChart

4 голосов
/ 22 сентября 2011

Я не очень много работаю с графиками ошибок, поэтому вполне может быть, что это нестандартная форма отображения данных и поспешно составленная на основе примера в документации для ErrorBarFunction.

(*split it up so it's easier to follow*)
meanCond1 = fixNumberF1F6[[1, 1]];
stdCond1 = fixNumberF1F6[[1, 2]];
meanCond2 = fixNumberF1F6[[2, 1]];
stdCond2 = fixNumberF1F6[[2, 2]];

x1 = Transpose@{meanCond1, meanCond2};
x2 = ErrorBar @@@ Transpose@{stdCond1, stdCond2};

Show@(ErrorListPlot[{#1},
     ErrorBarFunction -> 
      Function[{coords, errs}, {Opacity[0.2], EdgeForm[{#2}], 
        Rectangle[coords + {errs[[1, 1]], errs[[2, 1]]}, 
         coords + {errs[[1, 2]], errs[[2, 2]]}]}], PlotStyle -> #2, 
     Axes -> False, Frame -> True, 
     FrameLabel -> {"Condition 1", "Condition 2"}] & @@@ 
   Transpose@{Transpose@{x1, x2}, {Blue, Yellow, Green, Gray, Red}})

enter image description here

Каждая точка - это отдельная тема. Координата x - это среднее значение для условия 1, а координата y - это среднее значение для условия 2. Длины сторон прямоугольников представляют собой соответствующие стандартные отклонения. Так что, хотя это и перекрывает друг друга, если вы предусмотрительны в выборе цветов (и если предметов не слишком много), возможно, это сработает.

3 голосов
/ 22 сентября 2011
ErrorListPlot[Transpose /@ fixNumberF1F6, 
   PlotRange -> {{0, 6}, {0, 15}}, ImageSize -> 300, 
   FrameTicks -> {{Range[1, 13, 2], None}, {{1, 2, 3, 4, 5}, None}}, 
   PlotStyle -> 
       {
        Directive[Opacity[0.6],Black, AbsolutePointSize[10], AbsoluteThickness[2]], 
        Directive[Opacity[0.6],Gray, AbsolutePointSize[10], AbsoluteThickness[2]]
       }, 
   plotOptionsXX["Mean Fixation number", "Fixation Number", "SubNo"]
]

enter image description here

ErrorListPlot[fixNumberF1F6across, PlotRange -> {{0, 3}, {0, 15}}, 
    ImageSize -> 300, 
    FrameTicks -> {{Range[1, 13, 2], None}, {{1, 2}, None}}, 
    PlotStyle -> Directive[Black, AbsolutePointSize[10], AbsoluteThickness[2]], 
    plotOptionsXX["Mean Fixation number", "Fixation Number", "Condition Number"]
]

enter image description here

Что касается 3-го. Я не понимаю, как можно говорить о групповых средствах, если вы хотите показать данные отдельных предметов. 4-й (5-й?) Вопрос совершенно неясен. Я предлагаю вам удалить эти вопросы, так как они не относятся к программированию в Mathematica.

...