Могу ли я отдельно управлять осями x и y с помощью ggplot?
Вот ggplot из ggplot wiki:
baseplot <- ggplot(data.frame(x=1:10, y=10:1)) +
geom_point(aes(x = x, y = y))
baseplot
![enter image description here]()
Вопрос
Можно ли управлять этими осями отдельно, например. сделать только ось х черным? Похоже, что axis.line.x
и axis.line.y
относятся к числу опций.
Что я пробовал
-
Вики демонстрируют, что, например, можно управлять цветом оси
baseplot + opts(axis.line = theme_segment(colour = 'black', size = 2))
![enter image description here]()
-
с помощью geom_segment
работает, но имеет ограничение на то, что строки должны быть сопоставлены с номерами сюжетов.
Есть ли способ получить, например. ось max и min и тики от объекта baseplot
? Это уменьшит потенциальные ошибки. обновить ответ на этот вопрос, "нет, еще нет", был ранее закрыт .
baseplot + geom_segment(aes(x = c(0,0), y = c(0,0),
yend = c(0, max(y)), xend = c(max(x), 0),
size = c(0.5, 0.1))) +
geom_segment(aes(x = 0, y = y,
xend = -1,
yend = y,
size = 0.1))
![enter image description here]()
Ответы
Ответ 1
Кажется, вы также можете легко достичь этого, адаптировав тему:
mytheme <- theme_classic()
mytheme$axis.line.x <- mytheme$axis.line.y <- mytheme$axis.line
mytheme$axis.line.x$colour <- 'red'
ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_point() + mytheme
![enter image description here]()
Ответ 2
Не поддерживается управление осью линии отдельно.
Вы можете удалить или отредактировать строку после рисования:
> baseplot + opts(axis.line = theme_segment(colour = 'black', size = 2))
> grid.remove(gPath("axis_v", "axis.line.segments"), grep=TRUE)
> baseplot + opts(axis.line = theme_segment(colour = 'black', size = 2))
> grid.edit(gPath("axis_v", "axis.line.segments"), grep=TRUE, gp=gpar(col="red"))
> grid.edit(gPath("axis_h", "axis.line.segments"), grep=TRUE, gp=gpar(col="blue"))
ОБНОВЛЕНО
В 0.9.1- это может измениться следующим образом:
grid.edit(gPath("axis-l", "axis.line.segments"), grep=TRUE, gp=gpar(col="red"))
grid.edit(gPath("axis-b", "axis.line.segments"), grep=TRUE, gp=gpar(col="blue"))
Ответ 3
Я подозреваю, что вы правы в своем анализе.
Однако существует еще одно потенциальное обходное решение: geom_hline
и geom_vline
:
baseplot +
geom_hline(yintercept=0, colour="red", size = 3) +
geom_vline(xintercept=0, colour="blue", size = 2)
Опять не идеальный, так как линии охватывают всю область графика, а не просто обрамляют ось, если вы знаете, что я имею в виду.
![enter image description here]()
Ответ 4
В этой статье указывается, что вы можете включить обе строки, а затем отключить одну из них: https://github.com/hadley/ggplot2/issues/778. Я нашел эту стратегию простой и эффективной.