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.

JPD
sumber

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)
Arun
sumber
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?

juba
sumber
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)
Derek Corcoran
sumber
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)
pengguna2739472
sumber
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))
Willian Adamczyk
sumber
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.

Andrew Fraser
sumber
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))
mdeleeuw.dll
sumber