Meningkatkan jumlah kutu sumbu

191

Saya membuat plot untuk beberapa data, tetapi jumlah kutu terlalu kecil, saya perlu lebih akurat dalam membaca.

Apakah ada cara untuk meningkatkan jumlah kutu sumbu di ggplot2?

Saya tahu saya bisa memberi tahu ggplot untuk menggunakan vektor sebagai kutu sumbu, tetapi yang saya inginkan adalah meningkatkan jumlah kutu, untuk semua data. Dengan kata lain, saya ingin nomor kutu dihitung dari data.

Mungkin ggplot melakukan ini secara internal dengan beberapa algoritma, tetapi saya tidak dapat menemukan cara melakukannya, untuk berubah sesuai dengan yang saya inginkan.

João Daniel
sumber

Jawaban:

188

Anda dapat mengabaikan skala default ggplots dengan memodifikasi scale_x_continuousdan / atau scale_y_continuous. Sebagai contoh:

library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))

ggplot(dat, aes(x,y)) +
  geom_point()

Memberi Anda ini:

masukkan deskripsi gambar di sini

Dan menimpa timbangan dapat memberi Anda sesuatu seperti ini:

ggplot(dat, aes(x,y)) +
  geom_point() +
  scale_x_continuous(breaks = round(seq(min(dat$x), max(dat$x), by = 0.5),1)) +
  scale_y_continuous(breaks = round(seq(min(dat$y), max(dat$y), by = 0.5),1))

masukkan deskripsi gambar di sini

Jika Anda hanya ingin "memperbesar" pada bagian tertentu plot, lihat xlim()dan ylim()masing - masing. Wawasan yang baik juga dapat ditemukan di sini untuk memahami argumen lain juga.

Mengejar
sumber
4
Sebenarnya intinya adalah untuk "menggeneralisasi" byargumen, ke skala angka yang berbeda, yaitu 0,5 adalah nilai yang baik untuk data ini yang rentangnya adalah c (-3,3), tetapi itu bukan rentang yang baik untuk data yang berkisar adalah c (0,5000). Apakah ada beberapa fungsi yang menghitungnya?
João Daniel
3
@ JoãoDaniel - Maksud saya ggplot melakukan pekerjaan yang layak secara otomatis. Jika tidak menghasilkan serangkaian hasil yang memuaskan, saya tidak yakin ada fungsi bawaan untuk memberikan sesuatu yang berbeda. Level detail yang Anda inginkan akan spesifik untuk plot Anda, tetapi mungkin pikirkan beberapa test case dan level detail Anda untuk mengidentifikasi sebuah pola ... jika ini adalah boxplot, sesuatu seperti max-min/30"ember" yang cukup umum ukuran ... tapi itu mungkin atau mungkin bukan titik awal yang baik untuk Anda.
Mengejar
4
Bagaimana dengan nilai kategorikal pada sumbu x seperti bulan dalam setahun untuk deret waktu?
Scott Davis
3
@ScottDavis melihat tautan . Anda dapat menggunakanscale_x_date(date_breaks = "5 months", date_minor_breaks = "1 months")
Markus Hauschel
Untuk zooming coord_cartesiansebaiknya digunakan xlim. stackoverflow.com/questions/25685185/…
qwr
167

Berdasarkan komentar Daniel Krizian , Anda juga dapat menggunakan pretty_breaksfungsi dari scalesperpustakaan, yang diimpor secara otomatis:

ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10))

Yang harus Anda lakukan adalah memasukkan jumlah kutu yang diinginkan n.


Solusi yang sedikit kurang berguna (karena Anda harus menentukan variabel data lagi), Anda dapat menggunakan prettyfungsi bawaan:

ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = pretty(dat$x, n = 10)) +
scale_y_continuous(breaks = pretty(dat$y, n = 10))
slhck
sumber
16
Ini jelas jawaban terbaik! Bg ggplot sudah mengimpor scalestetapi tidak menambahkan fungsi ke namespace Anda. Karena itu Anda dapat memanggil mereka tanpa impor sebagai scales::pretty_breaks(n = 10).
sedangkan
63

Anda dapat memberikan argumen fungsi scale, dan ggplot akan menggunakan fungsi itu untuk menghitung lokasi centang.

library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))
number_ticks <- function(n) {function(limits) pretty(limits, n)}

ggplot(dat, aes(x,y)) +
  geom_point() +
  scale_x_continuous(breaks=number_ticks(10)) +
  scale_y_continuous(breaks=number_ticks(10))
kesesakan
sumber
81
Tidak perlu membuat fungsi sendiri number_ticks. Ini sudah diterapkan di pretty_breaks {scales}. Oleh karena itu: ggplot(dat, aes(x,y)) + geom_point() + scale_x_continuous(breaks=pretty_breaks(n=10)) + scale_y_continuous(breaks=pretty_breaks(n=10))
Daniel Krizian
11
@Daniel Krizian: 1) perlu require(scales)2) ini tampaknya mencegah istirahat saya muncul dalam notasi ilmiah, maka 1e6 diubah menjadi 10.00000 ??
smci
6
Anda dapat menggunakan basis R prettytanpa scalespaket, cukup berikan nilai sebagai argumen. Misalnya:(breaks=pretty(dat$x, n=10))
Molx
@smci Jika ggplot2 berfungsi maka timbangan tersedia. ggplot2 tidak akan berfungsi tanpa skala.
Claus Wilke
7

Versi v3.3.0 yang ggplot2akan datang akan memiliki opsi n.breaksuntuk menghasilkan jeda untuk scale_x_continuousdanscale_y_continuous

    devtools::install_github("tidyverse/ggplot2")

    library(ggplot2)

    plt <- ggplot(mtcars, aes(x = mpg, y = disp)) +
      geom_point()

    plt + 
      scale_x_continuous(n.breaks = 5)

masukkan deskripsi gambar di sini

    plt + 
      scale_x_continuous(n.breaks = 10) +
      scale_y_continuous(n.breaks = 10)

masukkan deskripsi gambar di sini

Tung
sumber
4

Selain itu,

ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05))

Bekerja untuk data sumbu x diskalakan atau diskrit (Yaitu, pembulatan tidak perlu).

bmc
sumber