R: Двойная ось Y panel.grid.major не выравнивается

Я пытаюсь следовать инструкциям здесь о том, как создать график с двойной осью Y (да, я знаю). Мой код здесь.

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

введите здесь описание изображения

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


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

Я попытался запустить здесь исходный код без изменений. , и я столкнулся со следующей ошибкой в ​​​​строке 130.

> ticks$grobs[[1]]$x <- ticks$grobs[[1]]$x - unit(1, "npc") + tml
Error in Ops.unit(ticks$grobs[[1]]$x, unit(1, "npc")) : 
  both operands must be units

Таким образом, я не могу проверить, является ли проблема ошибкой, которую я внес во время транскрипции.


person tchakravarty    schedule 18.08.2016    source источник


Ответы (1)


Ваш код в gist не запускается (и это тоже немного сложно).

Чтобы понять, почему строки не выровнены, рассмотрим следующий пример:

  • ось 1: диапазон: 0–1. Значение 0,5 находится посередине между 0 и 1.
  • ось 2: диапазон: 0–10. Значение 5 находится посередине между 0 и 10.

Теперь на вашем графике у вас есть (что-то вроде)

  • ось 1: диапазон: 0 - 1,1. Значение 0,5 равно 0,5/1,1 = 0,45 между 0 и 1.
  • ось 2: диапазон: 0 - 10,1. Значение 5 равно 5/10,1 = 0,495 между 0 и 10.
  • Результат: неправильно выровненные линии.

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

person csgillespie    schedule 18.08.2016
comment
Можете ли вы указать, в какой момент код в сути не работает для вас? - person tchakravarty; 18.08.2016
comment
Вы пропускаете пакеты (dplyr`) и не даете цвета. - person csgillespie; 18.08.2016
comment
Обновил код. Дайте мне знать, если у вас возникнут дополнительные проблемы с запуском кода. - person tchakravarty; 18.08.2016
comment
nop, ´ticks$grobs[[1]]$x ‹- ticks$grobs[[1]]$x - unit(1, npc) + tml Ошибка в Ops.unit(ticks$grobs[[1]]$x , unit(1, npc)) : оба операнда должны быть единицами. - person Captain Tyler; 20.02.2020