Mathematica, несоответствие FrameTicks на разных типах участков - PullRequest
3 голосов
/ 02 декабря 2011

Я столкнулся с некоторыми неожиданными несоответствиями при дальнейшей разработке решения предыдущего вопроса:

Как показать% значений на оси Y графика?

Это выглядело достаточно по-другому, чтобы заслужить новый пост.

Начиная с тех же данных:

data = {{{2010, 8, 3}, 
0.}, {{2010, 8, 31}, -0.052208}, {{2010, 9, 30}, 
0.008221}, {{2010, 10, 29}, 0.133203}, {{2010, 11, 30}, 
0.044557}, {{2010, 12, 31}, 0.164891}, {{2011, 1, 31}, 
0.055141}, {{2011, 2, 28}, 0.114801}, {{2011, 3, 31}, 
0.170501}, {{2011, 4, 29}, 0.347566}, {{2011, 5, 31}, 
0.461358}, {{2011, 6, 30}, 0.244649}, {{2011, 7, 29}, 
0.41939}, {{2011, 8, 31}, 0.589874}, {{2011, 9, 30}, 
0.444151}, {{2011, 10, 31}, 0.549095}, {{2011, 11, 30}, 
0.539669}};

Я определил способ сделать FrameTicks с процентами, основанными на вкладах и идеях, предложенных в последнем посте:

myFrameTicks = 
Table[
  {k/10., ToString@(10 k) <> "%"}, 
  {
    k, 
    IntegerPart[Floor[Min@data[[All, 2]], .1]*10], 
    IntegerPart[Ceiling[Max@data[[All, 2]], .1]*10]
   }
 ];

Теперь посмотрите на два графика с одинаковыми данными, используя один и тот же FrameTicks:

DateListPlot[data, FrameTicks -> {{myFrameTicks, None}, {Automatic, None}}]

Mathematica graphics

ListPlot[data[[All, 2]], FrameTicks -> {{myFrameTicks, None}, {Automatic, None}}]

Mathematica graphics

Итак, почему на обоих графиках тики кадров не отображаются в процентах (например, 60%), как на первом?

Я мог пропустить что-то очевидное (не в первый раз). Кроме того, этот подход не работает при использовании с ListLinePlot или BarChart, оба из которых, кажется, принимают атрибут FrameTicks.

Ответы [ 2 ]

7 голосов
/ 02 декабря 2011

DateListPlot по умолчанию Frame->True. ListPlot по умолчанию Frame->False. Отображает тики, а не фреймы.

Попробуйте установить для Frame значение true:

DateListPlot[data, 
  FrameTicks -> {{myFrameTicks, None}, {Automatic, None}}]

ListPlot[data[[All, 2]], 
  Frame -> True, 
  FrameTicks -> {{myFrameTicks, None}, {Automatic, None}}]
2 голосов
/ 02 декабря 2011

У нас есть FrameTicks для Frame и Ticks для Axes, поэтому в дополнение к решению Дэвида включить рамку для ListPlot вы могли бы вместо этого указать свою функцию для Ticks:

ListPlot[data[[All, 2]], Ticks -> {Automatic, myFrameTicks}]

(обратите внимание на разницу в заказе.)

...