Ось Y Проблемы с barp () - PullRequest
0 голосов
/ 20 мая 2018

Мне нужна помощь, чтобы понять, почему столбцы печатаются неправильно при использовании barp(), когда я вручную устанавливаю аргумент ylim.

По сути, у меня есть вектор значений (для аргумента высоты), который содержит только положительные числовые значения, но я хочу, чтобы у оси y barp () было задано ограничение по оси y, скажем, [-100500].Когда я установил y-предел, который переходит от отрицательного к положительному, barp() создает большие бары, которые начинаются с самого низа, даже если они должны начинаться только с нулевой линии.

Я попытался воспроизвести точныйбары, используя оригинальную функцию barplot(), и я получаю именно то, что хотел.Тем не менее, я предпочитаю использовать функцию plotrix barp(), потому что 1) она создает нулевую линию оси x (что я не знаю, как это сделать на barplot()) и 2) barp() позволяет мне наносить столбцы и линии натот же график, в то время как barplot() не выравнивает добавленные линии с полосами.

Ниже я написал некоторый код, вызывающий проблему.Сюжет рисунка 2 является проблематичным, на который я хочу обратить внимание.Я хочу создать изображение, как на рисунке 4, но с использованием barp().Если это невозможно, я бы согласился на использование barplot(), если бы было возможно создать линию оси x (где была бы нулевая линия).

Я пытался прочитать документацию, но не нашел ничего, что могло бы объяснить эту проблему.Может ли кто-нибудь помочь мне определить, почему одна функция барплота работает, а другая - нет?

Спасибо!


library(plotrix)

test.vector.mixed = as.numeric(c(-200,-20,50,170,200,250,200,220,205,230,350))
test.vector.positives = as.numeric(c(200,20,50,170,200,250,200,220,205,230,350))

months.index.abb = month.abb[c(8:12,1:6)]

# this displays correctly
barp(
  test.vector.mixed,
  names.arg = months.index.abb,

  col = ifelse(test.vector.mixed < 0, "red", "#108a4c"),
  main = "Figure 1: barp() test with Negatives",
  ylim = c(-500,400)
)

# this does not display correctly
barp(
  test.vector.positives,
  names.arg = months.index.abb,

  col = ifelse(test.vector.positives < 0, "red", "#108a4c"),
  main = "Figure 2: barp() test with Positives",
  ylim = c(-500,400)
)

# this displays correctly
barplot(
  test.vector.mixed,
  names.arg = months.index.abb,

  col = ifelse(test.vector.mixed < 0, "red", "#108a4c"),
  main = "Figure 3: barplot() test with Negatives",
  ylim = c(-500,400)
)

# this is what I want barp() to do
barplot(
  test.vector.positives,
  names.arg = months.index.abb,

  col = ifelse(test.vector.positives < 0, "red", "#108a4c"),
  main = "Figure 4: barplot() test with positives",
  ylim = c(-500,400)
)

enter image description here

enter image description here

...