Paksa R untuk berhenti merencanakan label sumbu yang disingkat - misalnya 1e + 00 di ggplot2


111

Dalam ggplot2 bagaimana saya bisa menghentikan penyingkatan label sumbu - misalnya 1e+00, 1e+01sepanjang sumbu x setelah diplot? Idealnya, saya ingin memaksa R untuk menampilkan nilai aktual yang dalam kasus ini adalah 1,10.

Setiap bantuan sangat dihargai.

Jawaban:


134

Saya pikir Anda mencari ini:

require(ggplot2)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))
# displays x-axis in scientific notation
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p

# displays as you require
require(scales)
p + scale_x_continuous(labels = comma)

2
Ini berhasil. Terima kasih. Karena tertarik, opsi 'label' apa lagi yang tersedia untuk sumbu di ggplot2 dengan paket timbangan?
JPD

3
Silakan kunjungi juga halaman ggplot2.org ini , sangat membantu saya dengan masalah serupa.
Marta Karas

64

Apakah Anda mencoba sesuatu seperti:

options(scipen=10000)

sebelum merencanakan?


3
Ini bekerja dengan menetapkan hukuman yang lebih tinggi untuk memutuskan menggunakan notasi ilmiah. Penjelasan lebih lanjut dalam jawaban ini: stackoverflow.com/a/18600721/1080804
ecoe

35

Hanya pembaruan untuk apa yang dibuat @Arun, karena saya mencobanya hari ini dan tidak berhasil karena sudah diaktualisasikan

+ scale_x_continuous(labels = scales::comma)

2
@ Jawaban Arun harus berfungsi dengan baik sebagaimana adanya, mungkin Anda lalai untuk menyertakan require(scales)? Ini mengimpor paket yang berisi commaskala. Seperti yang telah Anda temukan, Anda juga dapat menentukan paket saat merujuknya daripada meminta sebelumnya.
cincodenada

17

Sebagai solusi yang lebih umum, Anda dapat menggunakan scales::format_formatuntuk menghilangkan notasi ilmiah. Ini juga memberi Anda banyak kendali tentang bagaimana tepatnya Anda ingin label Anda ditampilkan, sebagai lawan scales::commayang hanya melakukan pemisahan koma dari urutan besarnya.

Sebagai contoh:

require(ggplot2)
require(scales)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))

# Here we define spaces as the big separator
point <- format_format(big.mark = " ", decimal.mark = ",", scientific = FALSE)

# Plot it
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p + scale_x_continuous(labels = point)

8

Ada solusi yang tidak membutuhkan pustaka timbangan.

Anda dapat mencoba:

# To deactivate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = TRUE))

# To deactivate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = TRUE))

2

Bukankah solusi umum paling sederhana untuk menetapkan hukuman yang digunakan R untuk notasi ilmiah lebih tinggi?

yaitu set scipen()ke angka yang Anda rasa nyaman.

mis. Jika sumbu Anda maksimum pada grafik kemungkinan besar 100 000, pengaturan scipen(200000)akan memastikan bahwa R (dan ggplot) akan menggunakan notasi standar untuk semua angka di bawah 200000 dan tidak ada persyaratan untuk menambahkan baris apa pun ke fungsi ggplot.


0

Memperluas pertanyaan awal agar juga terdiri dari pecahan, yaitu 1, 0,1, 0,01, 0,001 dll. Dan menghindari nol tertinggal

p + scale_x_continuous(labels = function(x) sprintf("%g", x))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.