гистограмма без вертикальных линий в Mathematica - PullRequest
11 голосов
/ 12 января 2012

Я пытаюсь сделать гистограмму без вертикальных линий. Я хотел бы иметь сюжет, который выглядит как функция. Как это: enter image description here

Тот же вопрос задавался ранее для R ( гистограмма без вертикальных линий ), но я нахожусь на Mathematica.

Я безуспешно изучаю варианты ChartStyle.

Ответы [ 3 ]

5 голосов
/ 12 января 2012

Вы также можете использовать ListPlot с InterpolationOrder->0:

(* example data *)
data = RandomVariate[NormalDistribution[], 10^3];

hist = HistogramList[data, {.5}];

ListPlot[Transpose[{hist[[1]], ArrayPad[hist[[2]], {0, 1}, "Fixed"]}],
  InterpolationOrder -> 0, 
  Joined -> True, 
  AxesOrigin -> {hist[[1, 1]], 0}]

histogram

4 голосов
/ 12 января 2012

Возможно, есть способы сделать это, поиграв с EdgeForm[] и FaceForm[] в Histogram, но я обнаружил, что проще свернуть один самостоятельно, когда мне это нужно.Вот очень простой и быстрый пример:

histPlot[data_, bins_, color_: Blue] := Module[{
        countBorder = 
    Partition[Riffle[Riffle[#1, #1[[2 ;;]]], Riffle[#2, #2]], 2] & @@ 
     HistogramList[data, bins, "PDF"]
    },
    ListLinePlot[countBorder, PlotStyle -> color]
    ]

Выполнение histPlot[RandomReal[NormalDistribution[],{1000}],{-3,3,0.1}] дает

enter image description here

Затем вы можете расширить это, чтобы использовать любой вариант вместо "PDF", и для случаев, когда вы хотите выбрать лотки автоматически.Мне не нравится автоматическое группирование, потому что мне нравится контролировать ширину и экстенты моего бина для предсказуемости и простого сравнения с другими графиками.

1 голос
/ 13 января 2012

Вот два метода, которые работают в версии 7, используя постобработку:

rdat = RandomReal[NormalDistribution[0, 1], 200];
MapAt[
  {Blue,
   Line[# /. {{Rectangle[{x_, y_}, {X_, Y_}]}} :> Sequence[{x, Y}, {X, Y}]] } &,
  Histogram[rdat, PerformanceGoal -> "Speed"],
  {1, 2, 2, 2}
]

Mathematica graphics

Cases[
  Histogram[rdat, PerformanceGoal -> "Speed"],
  Rectangle[{x_, y_}, {X_, Y_}] :> {{x, Y}, {X, Y}},
  \[Infinity]
];

Graphics[Line[Join @@ %], AspectRatio -> 1/GoldenRatio, Axes -> True]

Mathematica graphics

...