Я хотел бы воспроизвести график, приведенный ниже, с помощью ggplot2. Я могу подойти близко, но не могу удалить верхнюю и правую границы. Ниже я представляю несколько попыток использования ggplot2, включая несколько предложений, найденных в Stackoverflow или через него. К сожалению, мне не удалось заставить эти предложения работать.
Я надеюсь, что кто-то сможет исправить один или несколько фрагментов кода ниже.
Спасибо за любые предложения.
# desired plot
a <- seq(1,20)
b <- a^0.25
plot(a,b, bty = "l")
library(ggplot2)
df <- as.data.frame(cbind(a,b))
# 1. ggplot2 default
ggplot(df, aes(x = a, y = b)) + geom_point()
# 2. removes background color
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black'))
# 3. also removes gridlines
none <- theme_blank()
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none)
# 4. does not remove top and right border
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(panel.border = none)
# 5. does not remove top and right border
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(axis.line = theme_segment())
# 6. removes x and y axis in addition to top and right border
# http://stackoverflow.com/questions/5458409/remove-top-and-right-border-from-ggplot2
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(panel.background=theme_rect(colour=NA))
# 7. returns error when attempting to remove top and right border
# https://groups.google.com/group/ggplot2/browse_thread/thread/f998d113638bf251
#
# Error in el(...) : could not find function "polylineGrob"
#
theme_L_border <- function(colour = "black", size = 1, linetype = 1) {
structure(
function(x = 0, y = 0, width = 1, height = 1, ...) {
polylineGrob(
x=c(x+width, x, x), y=c(y,y,y+height), ..., default.units = "npc",
gp=gpar(lwd=size, col=colour, lty=linetype),
)
},
class = "theme",
type = "box",
call = match.call()
)
}
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts( panel.border = theme_L_border())
Ответы:
ИЗМЕНИТЬ Игнорировать этот ответ. Теперь есть ответы получше. См. Комментарии. Использовать
+ theme_classic()
РЕДАКТИРОВАТЬ
Это лучшая версия. Ошибка, упомянутая ниже в исходном посте, остается (я думаю). Но осевая линия проведена под панелью. Поэтому удалите оба символа
panel.border
и,panel.background
чтобы увидеть оси.Исходный пост Это близко. Произошла ошибка, из-за которой
axis.line
не работала ось Y ( см. Здесь ), которая, похоже, еще не исправлена. Следовательно, после удаления границы панели ось Y должна быть нарисована отдельно с помощьюgeom_vline
.Крайние точки обрезаются, но отсечение можно отменить, используя код baptiste .
Или используйте
limits
для перемещения границ панели.источник
В последних обновлениях ggplot (0.9.2+) был переработан синтаксис тем. В частности,
opts()
теперь устарел, будучи заменен наtheme()
. Ответ Сэнди по- прежнему (по состоянию на январь 2012 г.) генерирует диаграмму, но заставляет R выдавать кучу предупреждений.Вот обновленный код, отражающий текущий синтаксис ggplot:
генерирует:
источник
Альтернативой
theme_classic()
является тема, которая поставляется с пакетом cowplottheme_cowplot()
(загружается автоматически вместе с пакетом). Похоже наtheme_classic()
, с небольшими отличиями. Что наиболее важно, размеры этикеток по умолчанию больше, поэтому полученные цифры можно использовать в публикациях без дополнительных изменений (в частности, если вы сохраните их с помощьюsave_plot()
вместоggsave()
). Кроме того, фон прозрачный, а не белый, что может быть полезно, если вы хотите отредактировать рисунок в иллюстраторе. Наконец, на мой взгляд, граненые сюжеты выглядят лучше.Пример:
Вот как выглядит файл,
plot.png
созданный этим кодом:Отказ от ответственности: я автор пакета.
источник
Я последовал за ответом Эндрю , но мне также пришлось следить за https://stackoverflow.com/a/35833548 и устанавливать оси x и y отдельно из-за ошибки в моей версии ggplot (v2.1.0).
Вместо того
я использовал
источник
Вышеуказанные параметры не работают для карт, созданных с помощью
sf
иgeom_sf()
. Следовательно, я хочу добавитьndiscr
сюда соответствующий параметр. Это создаст красивую чистую карту, показывающую только функции.источник
Упрощение из приведенного выше ответа Эндрю приводит к этой ключевой теме для создания половинной границы.
источник
Вот очень простой ответ
Это так просто. Источник: конец этой статьи
источник