Kısaltılmış eksen etiketlerini çizmeyi durdurmak için R'yi zorlayın - örneğin ggplot2'de 1e + 00


111

Ggplot2'de eksen etiketlerinin kısaltılmasını nasıl durdurabilirim - örneğin çizildikten 1e+00, 1e+01sonra x ekseni boyunca? İdeal olarak, R'yi bu durumda olabilecek gerçek değerleri göstermeye zorlamak istiyorum 1,10.

Herhangi bir yardım çok takdir edilir.

Yanıtlar:


135

Sanırım bunu arıyorsun:

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
Bu işe yaradı. Teşekkür ederim. İlgi dışı olarak, ölçek paketi ile ggplot2'deki eksenler için başka hangi 'etiket' seçenekleri var?
JPD

3
Lütfen bu ggplot2.org sayfasını da ziyaret edin , benzer bir sorunla benim için çok yardımcı oldu.
Marta Karas

64

Şunun gibi bir şey denediniz mi:

options(scipen=10000)

planlamadan önce?


3
Bu, bilimsel gösterimi kullanmaya karar vermek için daha yüksek bir ceza belirleyerek çalışır . Bu cevapta daha fazla açıklama: stackoverflow.com/a/18600721/1080804
ecoe

35

@Arun'un yaptıklarıyla ilgili bir güncelleme, bugün denediğimden ve işe yaramadı çünkü

+ scale_x_continuous(labels = scales::comma)

2
@ Arun'un cevabı olduğu gibi iyi çalışmalı, belki de require(scales)? Bu, commaölçeği içeren paketi içe aktarır . Keşfettiğin gibi, önceden istemek yerine paketi atıfta bulunurken de belirtebilirsin.
cincodenada

17

Daha genel bir çözüm olarak, scales::format_formatbilimsel gösterimi kaldırmak için kullanabilirsiniz . Bu aynı zamanda size etiketlerinizin tam olarak nasıl görüntülenmesini istediğiniz konusunda çok fazla kontrol sağlar; bunun aksine, scales::commayalnızca büyüklük sıralarında virgülle ayırma yapar.

Örneğin:

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

Terazi kütüphanesi gerektirmeyen bir çözüm var.

Deneyebilirsin:

# 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

R'nin bilimsel gösterim için kullandığı cezayı daha yüksek ayarlamanın en basit genel çözümü değil mi?

yani scipen()kendinizi rahat hissettiğiniz bir sayıya ayarlayın .

Örneğin, çizelgelerdeki eksen maksimumunuz 100 000 olacaksa, ayarlama scipen(200000)R'nin (ve ggplot'un) 200000'ün altındaki tüm sayılar için standart gösterimi kullanmasını sağlar ve ggplot işlevine herhangi bir satır eklemeye gerek kalmaz.


0

Orijinal soruyu kesirleri de içerecek şekilde genişletmek, yani 1, 0.1, 0.01, 0.001 vb. Ve sondaki sıfırlardan kaçınmak

p + scale_x_continuous(labels = function(x) sprintf("%g", x))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.