Я пытаюсь реализовать функцию DateListBarChart
, которая принимает датированные данные и выводит гистограмму с теми же местами размещения, что и DateListPlot
. Важно, чтобы они отображали данные в одном и том же горизонтальном положении, если им предоставлены одни и те же данные, чтобы их можно было объединить с помощью Show
. Мне трудно правильно настроить параметры BarSpacing
, чтобы горизонтальный диапазон графика не менялся, а полосы оставались практически на одном и том же месте.
Мне не удалось вывести правильное масштабирование, так что BarSpacing->{0.2,0.3}
приводит к тому, что 20% длины оси X, доступной для этой группы стержней, занимает расстояние между стержнями в этой группе, а 30 % - расстояние между группами стержней. По техническим причинам я делаю это, передавая вещи RectangleChart
. Согласно документации, BarSpacing
рассматривается как абсолютная величина в RectangleChart
. Очевидно, что абсолютные размеры разрывов должны быть меньше, если серий больше, а столбцы должны быть уже.
Некоторые примеры:
arList = FoldList[0.9 #1 + #2 &, 0.01, RandomReal[NormalDistribution[0, 1], 24]]
{0.01, 0.334557, 2.02709, 1.1878, 1.9009, 3.08604, 2.36652, 3.04111,
3.32364, 3.22662, 3.12626, 2.59118, 1.69334, 1.21069, 0.23171,
0.689415, -0.852649, -0.124624, 0.58604, -0.481886, 0.221074,
-0.300329, 2.36137, 0.427789, -1.47747}
dists = RandomChoice[{3, 4}, Length[arList]]
{4, 4, 4, 3, 4, 3, 4, 3, 4, 4, 3, 4, 4, 3, 4, 4, 4, 4, 3, 4, 3, 3, 3, 3, 3}
Результат:
RectangleChart[Transpose[{dists - 0 - 0/2, arList}],
PlotRange -> {{0, 100}, {-2, 4}}, ChartStyle -> EdgeForm[None],
Frame -> True, GridLines -> Automatic, BarSpacing -> {0, 0}]
RectangleChart[Transpose[{dists - 0.7 - 0.5/2, arList}],
PlotRange -> {{0, 100}, {-2, 4}}, ChartStyle -> EdgeForm[None],
Frame -> True, GridLines -> Automatic, BarSpacing -> {0.7, 0.5}]
Обратите внимание, что данные не охватывают то же расстояние по оси X, что и в предыдущем примере.
Это становится еще более запутанным, когда вы пытаетесь построить несколько серий (то же самое в этом примере, для иллюстрации).
RectangleChart[
Transpose[{{dists - i/2 - j/2, arList}, {dists - i/2 - j/2,
arList}}, {2, 3, 1}], PlotRange -> {{0, 180}, {-2, 4}},
ChartStyle -> EdgeForm[None], Frame -> True, Ticks -> None,
GridLines -> Automatic, BarSpacing -> {i, j}]
Я целую вечность пытался найти правильную формулу, чтобы настройки BarSpacing
для пользовательской функции (не показанной здесь) вызывали правильные интервалы и ширину полос, чтобы горизонтальный диапазон графика не менялся, как это делает BarSpacing
.
Что мне не хватает?
РЕДАКТИРОВАТЬ: В ответ на belisarius, это пример того, куда я направляюсь. Это вроде как работает (столбцы не совсем совпадают с линией, но это, вероятно, даты, которые я использую), но случаи со сложенными столбцами не отображаются на графике со столбцами там, где они должны быть, как и любой вид гистограмма сама по себе, где есть несколько серий. (Я очень горжусь алгоритмом размещения метки даты: власть имущие не хотят отказываться от этого взгляда.)
А вот один просто не работает. Данные должны заполнить горизонтальный диапазон. (Полосы разной ширины выбраны намеренно — это комбинация годовых и квартальных данных.)
ИЗМЕНИТЬ 2
Я помню, почему я не использовал Filling
в DateListPlot
для рисования столбцов, как в пакете Майка Ханичерча - если у вас есть что-то кроме очень тонких столбцов, их верхний край окажется не в том месте.
DateListPlot[{dateARList},
PlotStyle -> {AbsolutePointSize[6], Yellow}, Filling -> {1 -> 0},
FillingStyle -> {1 -> {{AbsoluteThickness[12], Darker[Red, 0.25]}}},
PlotRange -> All]
VolumePlot
Майка Ханичерча может оказаться полезной. Код можно найти здесь: library.wolfram.com/infocenter/MathSource/7526 Насколько я могу судить, этот код является предварительной версией новых графиков визуализации финансов в версии 8. Полезный? - person telefunkenvf14   schedule 03.09.2011DateListPlot
(хотя и безуспешно), может помочь мне понять проблему... - person Dr. belisarius   schedule 04.09.2011RectangleChart
. Это больше похоже на 30 строк кода, чем на 100, но я все еще не могу найти правильную формулу для правильного расстояния между полосами относительно делений. - person Verbeia   schedule 04.09.2011