Eksen kenelerinin sayısını artırın


191

Bazı veriler için grafikler oluşturuyorum, ancak kenelerin sayısı çok az, okumada daha fazla hassasiyete ihtiyacım var .

Ggplot2'deki eksen kenesi sayısını artırmanın bir yolu var mı?

Ben ggplot eksen keneler olarak bir vektör kullanmayı söyleyebilir biliyorum, ama istediğim tüm veri için keneler sayısını artırmaktır. Başka bir deyişle, kene sayısının verilerden hesaplanmasını istiyorum.

Muhtemelen ggplot bunu dahili olarak bazı algoritmalarla yapıyor, ancak ne istediğimi değiştirmek için nasıl yaptığını bulamadım.

Yanıtlar:


188

Ggplots varsayılan ölçeklerini scale_x_continuousve / veya değiştirerek geçersiz kılabilirsiniz scale_y_continuous. Örneğin:

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

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

Size bunu verir:

resim açıklamasını buraya girin

Ve ölçekleri geçersiz kılmak size böyle bir şey verebilir:

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))

resim açıklamasını buraya girin

Bir grafiğin belirli bir bölümünü "yakınlaştırmak" istiyorsanız, sırasıyla xlim()ve ylim()öğelerine bakın. Diğer argümanları anlamak için burada iyi bir fikir de bulunabilir .


4
Aslında mesele, byargümanı farklı sayı ölçeklerine "genelleştirmek" olacaktır , yani 0.5, bu veri aralığı için c (-3,3) olan iyi bir değerdir, ancak bu, c, (0,5000) 'dir. Bunu hesaplayan bir işlev var mı?
João Daniel

3
@ JoãoDaniel - Yani ggplot bu işte otomatik olarak iyi bir iş çıkarıyor. Tatmin edici bir sonuç kümesi oluşturmuyorsa, farklı bir şey sağlamak için yerleşik bir işlev olduğundan emin değilim. İstediğiniz ayrıntı düzeyi grafiğinize özgü olacaktır, ancak bir deseni tanımlamak için bazı test durumlarını ve belirttiğiniz ayrıntı düzeyini düşünün ... Bu bir kutu grafiği olsaydı, benzer max-min/30bir şey oldukça yaygın bir "kova" ancak bu sizin için iyi bir başlangıç ​​noktası olabilir veya olmayabilir.
Chase

4
Zaman dizisi için yılın ayları gibi x eksenindeki kategorik değerlere ne dersiniz?
Scott Davis

3
@ScottDavis bağlantıya bir göz atın . Kullanabilirsinizscale_x_date(date_breaks = "5 months", date_minor_breaks = "1 months")
Markus Hauschel

Yakınlaştırma coord_cartesianiçin yerine kullanılmalıdır xlim. stackoverflow.com/questions/25685185/…
qwr

167

Daniel Krizian'ın yorumuna dayanarak pretty_breaks, scaleskütüphaneden otomatik olarak içe aktarılan işlevi de kullanabilirsiniz :

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))

Tek yapmanız gereken istenen kenelerin sayısını girmek n.


Biraz daha az kullanışlı bir çözüm (veri değişkenini tekrar belirtmeniz gerektiğinden) yerleşik prettyişlevi kullanabilirsiniz:

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))

16
Bu açıkça en iyi cevap! Btw ggplot zaten içe aktarılıyor scalesancak işlevleri ad alanınıza eklemiyor . Bu nedenle, bunları içe aktarma olmadan olarak arayabilirsiniz scales::pretty_breaks(n = 10).
ederken

63

Bir işlev bağımsız değişkeni sağlayabilirsiniz scaleve ggplot bu işlevi işaretleme konumlarını hesaplamak için kullanır.

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))

81
Kendi fonksiyonunu yaratmaya gerek yok number_ticks. Bu zaten uygulandı pretty_breaks {scales}. Bu nedenle: 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) ihtiyacı require(scales)2) Bu bilimsel gösterimde molalarım önler gibi görünüyor, bu nedenle 1e6 1000000 olarak değiştirildi ??
smci

6
Temel R'leri paket prettyolmadan kullanabilirsiniz scales, sadece argüman olarak değerleri sağlayın. Örneğin:(breaks=pretty(dat$x, n=10))
Molx

@ smci ggplot2 çalışıyorsa ölçekler kullanılabilir. ggplot2 ölçeksiz çalışmaz.
Claus Wilke

7

Yaklaşan sürümü v3.3.0 ggplot2bir seçenek olacaktır n.breaksotomatik olarak sonlarını oluşturmak scale_x_continuousvescale_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)

resim açıklamasını buraya girin

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

resim açıklamasını buraya girin


4

Bunlara ek olarak,

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

Binned veya ayrık ölçekli x ekseni verileri için çalışır (yani, yuvarlama gerekli değildir).

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.