2012-01-12 3 views
10

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

Тот же вопрос был задан для R до (histogram without vertical lines), но я нахожусь в Mathematica.

Я искал варианты ChartStyle без успеха.

ответ

4

Возможно, есть способы сделать это, возившись с 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", и за исключением случаев, когда вы хотите автоматически выбирайте бункеры. Мне не нравится автоматическое бининг, потому что мне нравится контролировать ширину и экстенсивность моего бункера для предсказуемости и простого сравнения с другими графиками.

+0

Спасибо Йоду и Хайке за вашу помощь. Йода, ваша самодостаточная функция работает очень хорошо. – tos

5

Вы можете также использовать 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

+0

@tos Для версий старше 8 лет вы можете использовать 'BinCounts' (требуется небольшая дополнительная работа) – Szabolcs

+0

Спасибо Heike за ваш вклад. @Szabolcs, я не упоминал, что использую версию 8, но подсказка удобна для пользователей из версий до 8. – tos

1

Вот два способа, которые работают в 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

+0

Это очень близко к тому, что я использовал в v7, прежде чем обновить. Я не думаю, что они будут работать в v8, так как были внесены изменения в 'Histogram' – abcd

Смежные вопросы