Saya ingin segera mereproduksi plot di bawah ini dengan menggunakan ggplot2. Saya bisa mendekat, tetapi tidak bisa menghapus batas atas dan kanan. Di bawah ini saya menyajikan beberapa upaya menggunakan ggplot2, termasuk beberapa saran yang ditemukan di atau melalui Stackoverflow. Sayangnya saya belum bisa mendapatkan saran tersebut untuk bekerja.
Saya berharap seseorang dapat memperbaiki satu atau lebih potongan kode di bawah ini.
Terima kasih atas sarannya.
# 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())
Jawaban:
EDIT Abaikan jawaban ini. Sekarang ada jawaban yang lebih baik. Lihat komentarnya. Menggunakan
+ theme_classic()
EDIT
Ini adalah versi yang lebih baik. Bug yang disebutkan di bawah ini dalam postingan asli tetap ada (menurut saya). Tetapi garis sumbu digambar di bawah panel. Oleh karena itu, hapus
panel.border
danpanel.background
untuk melihat garis sumbu.Posting asli Ini semakin dekat. Ada bug dengan
axis.line
tidak bekerja pada sumbu y ( lihat di sini ), yang tampaknya belum diperbaiki. Oleh karena itu, setelah menghilangkan batas panel, sumbu y harus digambar secara terpisah menggunakangeom_vline
.Titik ekstrim dipotong, tetapi pemotongan dapat dibatalkan menggunakan kode oleh baptiste .
Atau gunakan
limits
untuk memindahkan batas panel.sumber
Pembaruan terkini untuk ggplot (0.9.2+) telah merombak sintaks untuk tema. Terutama,
opts()
sekarang sudah usang, telah diganti olehtheme()
. Jawaban Sandy akan tetap (per Jan '12) menghasilkan bagan, tetapi menyebabkan R memberikan banyak peringatan.Berikut kode yang diperbarui yang mencerminkan sintaks ggplot saat ini:
menghasilkan:
sumber
Alternatifnya
theme_classic()
adalah tema yang disertakan dengan paket cowplot ,theme_cowplot()
(dimuat secara otomatis dengan paket). Tampilannya miriptheme_classic()
, dengan sedikit perbedaan halus. Yang terpenting, ukuran label default lebih besar, sehingga gambar yang dihasilkan dapat digunakan dalam publikasi tanpa perlu modifikasi lebih lanjut (khususnya jika Anda menyimpannya dengansave_plot()
alih - alihggsave()
). Selain itu, latar belakangnya transparan, bukan putih, yang mungkin berguna jika Anda ingin mengedit gambar di ilustrator. Akhirnya, plot segi terlihat lebih baik, menurut saya.Contoh:
Seperti inilah file yang
plot.png
dihasilkan oleh kode ini:Penafian: Saya adalah pembuat paket.
sumber
Saya mengikuti jawaban Andrew , tetapi saya juga harus mengikuti https://stackoverflow.com/a/35833548 dan mengatur sumbu x dan y secara terpisah karena ada bug dalam versi ggplot saya (v2.1.0).
Dari pada
Saya dulu
sumber
Opsi di atas tidak berfungsi untuk peta yang dibuat dengan
sf
dangeom_sf()
. Karenanya, saya ingin menambahkanndiscr
parameter yang relevan di sini. Ini akan membuat peta bersih yang bagus hanya menampilkan fitur-fiturnya.sumber
Penyederhanaan dari jawaban Andrew di atas mengarah pada tema kunci ini untuk menghasilkan batas setengah.
sumber
Inilah jawaban yang sangat sederhana
Semudah itu. Sumber: akhir artikel ini
sumber