Barplot için R'de x ekseni etiketlerini döndürme


99

Şanssız bir barplotta x ekseni etiketlerinin 45 derece döndürülmesini sağlamaya çalışıyorum. Aşağıda sahip olduğum kod bu:

barplot(((data1[,1] - average)/average) * 100,
        srt       = 45,
        adj       = 1,
        xpd       = TRUE,
        names.arg = data1[,2],
        col       = c("#3CA0D0"),
        main      = "Best Lift Time to Vertical Drop Ratios of North American Resorts",
        ylab      = "Normalized Difference",
        yaxt      = 'n',
        cex.names = 0.65,
        cex.lab   = 0.65)

Yanıtlar:


60

DAVID'İN YANITI BAŞINA DÜZENLENEN CEVAP:

İşte bir tür hileli yol. Sanırım daha kolay bir yolu var. Ancak, çubuk konumlarını kaydederek barplotve biraz yukarı ve aşağı ince ayar yaparak çubuk etiketlerini ve etiketlerin çizim metnini bastırabilirsiniz . İşte mtcars veri kümesiyle bir örnek:

x <- barplot(table(mtcars$cyl), xaxt="n")
labs <- paste(names(table(mtcars$cyl)), "cylinders")
text(cex=1, x=x-.25, y=-1.25, labs, xpd=TRUE, srt=45)

3
uyarı : Eğer kullanıyorsanız beside = TRUE, muhtemelen grup başına yalnızca bir etiket istiyorsanız colMeans(x)bunun yerine kullanmak xisteyeceksiniz.
MichaelChirico

278

isteğe bağlı las = 2 parametresini kullanın.

barplot(mytable,main="Car makes",ylab="Freqency",xlab="make",las=2)

görüntü açıklamasını buraya girin


3
Bunun kabul edilen cevap olması gerektiğine inanıyorum. Soruda kullanılan temel barplot işlevinin bir parametresini kullanarak mükemmel şekilde çalışır.
jwhaley58

1
Kabul edildi, bu kabul edilen cevap olmalıdır. Çok daha kısa çözüm
snlan

17
dikey etiketlerin şekilden kırpılmaması için kenar boşluklarını ayarlamak için par (mar = c (15,4,4,2)) kullanın.
Steven Magana-Zook

24
Şahsen bu yaklaşımı tercih ediyorum, ancak OP'nin orijinal sorusuna cevap vermedi: x ekseni etiketlerinin bir barplotta 45 derece döndürülmesini sağlamaya çalışıyorum
arpieb

1
Gördüğünüz gibi 'yap' etiketlerle kaplı. Nasıl düzeltilir?
Filip Bartuzi

31

Temel grafikleri kullanarak x ekseni etiketlerini 90 dereceye eşit veya daha küçük açıyla döndürün. R SSS'den uyarlanan kod :

par(mar = c(7, 4, 2, 2) + 0.2) #add room for the rotated labels

#use mtcars dataset to produce a barplot with qsec colum information
mtcars = mtcars[with(mtcars, order(-qsec)), ] #order mtcars data set by column "qsec"

end_point = 0.5 + nrow(mtcars) + nrow(mtcars) - 1 #this is the line which does the trick (together with barplot "space = 1" parameter)

barplot(mtcars$qsec, col = "grey50", 
        main = "",
        ylab = "mtcars - qsec", ylim = c(0,5 + max(mtcars$qsec)),
        xlab = "",
        space = 1)
#rotate 60 degrees (srt = 60)
text(seq(1.5, end_point, by = 2), par("usr")[3]-0.25, 
     srt = 60, adj = 1, xpd = TRUE,
     labels = paste(rownames(mtcars)), cex = 0.65)

görüntü açıklamasını buraya girin


9

Veri çerçevenizi aşağıdaki işleve kolayca aktarabilirsiniz :

rotate_x <- function(data, column_to_plot, labels_vec, rot_angle) {
    plt <- barplot(data[[column_to_plot]], col='steelblue', xaxt="n")
    text(plt, par("usr")[3], labels = labels_vec, srt = rot_angle, adj = c(1.1,1.1), xpd = TRUE, cex=0.6) 
}

Kullanım:

rotate_x(mtcars, 'mpg', row.names(mtcars), 45)

görüntü açıklamasını buraya girin

Etiketlerin dönüş açısını gerektiği gibi değiştirebilirsiniz .



6

Ek bir katman ekleyerek x ekseni etiketini döndürmek için ggplot2'yi kullanabilirsiniz.

theme(axis.text.x = element_text(angle = 90, hjust = 1))

2

Andre Silva'nın cevabı benim için harika çalışıyor, "barplot" satırındaki bir uyarı:

barplot(mtcars$qsec, col="grey50", 
    main="",
    ylab="mtcars - qsec", ylim=c(0,5+max(mtcars$qsec)),
    xlab = "",
    xaxt = "n", 
    space=1)

"Xaxt" argümanına dikkat edin. Onsuz, etiketler ilk kez 60 derece döndürülmeden iki kez çizilir.


1

Çubuk Grafiklerin belgelerinde ..., işlev çağrısına geçirilebilecek ek parametreler ( ) hakkında bilgi edinebiliriz :

...    arguments to be passed to/from other methods. For the default method these can 
       include further arguments (such as axes, asp and main) and graphical 
       parameters (see par) which are passed to plot.window(), title() and axis.

Grafiksel parametrelerin dokümantasyonunda (dokümantasyonunda par) şunları görebiliriz:

las
    numeric in {0,1,2,3}; the style of axis labels.

    0:
      always parallel to the axis [default],

    1:
      always horizontal,

    2:
      always perpendicular to the axis,

    3:
      always vertical.

    Also supported by mtext. Note that string/character rotation via argument srt to par does not affect the axis labels.

Bu yüzden geçmek las=2doğru cevaptır.

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.