web-gelistirme-sc.com

Bir eksen üzerindeki sayıların ggplot ile biçimlendirmesini nasıl değiştiririm?

Bazı verilerin saçılma grafiğini çizmek için R ve ggplot kullanıyorum, y ekseni üzerindeki sayılar bilgisayar tarzı üs format biçimlendirme, yani 4e + 05, 5e + 05, vb. kabul edilemez, bu yüzden onları 500.000, 400.000 vb. olarak göstermesini istiyorum. Uygun bir üs notu almak da kabul edilebilir.

Arsa için kod aşağıdaki gibidir:

p <- ggplot(valids, aes(x=Test, y=Values)) +
  geom_point(position="jitter") +
  facet_grid(. ~ Facet) +
  scale_y_continuous(name="Fluorescent intensity/arbitrary units") +
  scale_x_discrete(name="Test repeat") +
  stat_summary(fun.ymin=median, fun.ymax=median, fun.y=median, geom="crossbar")

Herhangi bir yardım çok takdir etmek.

111
Jack Aidley

Bunu yapmanın başka bir yolunu da, eksenlerde uygun 'x10 (üst simge) 5' gösterimini veren buldum. Bazıları için faydalı olacağı umuduyla buraya gönderiyorum. Kodu burada 'dan aldım, bu yüzden kredi için hak talebinde bulunmadım, bu doğru Brian Diggs'a gidiyor.

fancy_scientific <- function(l) {
     # turn in to character string in scientific notation
     l <- format(l, scientific = TRUE)
     # quote the part before the exponent to keep all the digits
     l <- gsub("^(.*)e", "'\\1'e", l)
     # turn the 'e+' into plotmath format
     l <- gsub("e", "%*%10^", l)
     # return this as an expression
     parse(text=l)
}

Hangisini daha sonra kullanabilirsiniz

ggplot(data=df, aes(x=x, y=y)) +
   geom_point() +
   scale_y_continuous(labels=fancy_scientific) 
55
Jack Aidley

Diğer bir seçenek de, eksen işaret etiketlerinizi virgüllerle biçimlendirmek, scales paketini kullanmak ve

 scale_y_continuous(name="Fluorescent intensity/arbitrary units", labels = comma)

ggplot ifadenize.

Paketi yüklemek istemiyorsanız, şunu kullanın:

scale_y_continuous(name="Fluorescent intensity/arbitrary units", labels = scales::comma)
107
Jim M.
x <- rnorm(10) * 100000
y <- seq(0, 1, length = 10)
p <- qplot(x, y)
library(scales)
p + scale_x_continuous(labels = comma)
41
DiscreteCircle

Buradaki oyuna geç kaldım, ancak diğerleri kolay bir çözüm istiyorsa, şöyle adlandırılabilecek bir dizi işlev oluşturdum:

 ggplot + scale_x_continuous(labels = human_gbp)

bu size x veya y eksenleri için okunabilir numaralar verir (veya genel olarak herhangi bir sayı).

İşlevleri burada bulabilirsiniz: Github Repo İşlevleri betiğinize kopyalayın, böylece onları çağırabilirsiniz.

15
Feargal Ryan

Jack Aidley'in önerdiği cevabı yararlı bir cevap olarak buldum.

Başka bir seçenek atmak istedim. Diyelim ki çok sayıda küçük sayılar içeren bir diziniz var ve eksen etiketlerinin tam ondalık basamağı yazmasını (örneğin, 5e-05 -> 0.0005), ardından:

NotFancy <- function(l) {
 l <- format(l, scientific = FALSE)
 parse(text=l)
}

ggplot(data = data.frame(x = 1:100, 
                         y = seq(from=0.00005,to = 0.0000000000001,length.out=100) + runif(n=100,-0.0000005,0.0000005)), 
       aes(x=x, y=y)) +
     geom_point() +
     scale_y_continuous(labels=NotFancy) 
8
EconomiCurtis