2017-07-27 44 views
6

Sol taraftaki Y eksenini bir ggplot2 çiziminde sağ tarafa çoğaltmak ve daha sonra kesikli (kategorik) bir eksen için onay etiketlerini değiştirmek istiyorum.ggplot2 içinde ayrık ekseni çoğaltma (ve değiştirme)

ben on the package's repo page görülebilir ancak olarak, this question cevabını okudum, switch_axis_position() fonksiyon cowplot paketten çıkarıldı (yazar ggplot2 içinde (önümüzdeki?) Yerel işlevselliği gösterdi).

Ggplot2'de ikincil eksenlerde reference sayfasını gördüm, ancak bu belgedeki tüm örnekler scale_y_discrete yerine scale_y_continuous kullanıyor. Ben ayrık işlevini kullanmaya çalıştığınızda Ve, gerçekten, ben hata alıyorum:

Error in discrete_scale(c("y", "ymin", "ymax", "yend"), "position_d", : 
unused argument (sec.axis = <environment>) 

ggplot2 ile bunu yine de var mı? Tamamen saldırıya uğramış bir çözüm bile benim için yeterli olacaktır. Şimdiden teşekkürler. (MRE'ler aşağısı aşağıda)

library(ggplot2) 

# Working continuous plot with 2 axes 
ggplot(mtcars, aes(cyl, mpg)) + 
    geom_point() + 
    scale_y_continuous(sec.axis = sec_axis(~.+10)) 


# Working discrete plot with 1 axis 
ggplot(mtcars, aes(cyl, as.factor(mpg))) + 
    geom_point() 


# Broken discrete plot with 2 axes 
ggplot(mtcars, aes(cyl, as.factor(mpg))) + 
    geom_point() + 
    scale_y_discrete(sec.axis = sec_axis(~.+10)) 
+0

'kaynağına bakarak scale_y_discrete' ikincil ekseni belirtmek için bir seçenek/argüman yoktur. Yani herhangi bir çözüm muhtemelen bir kesmek zorunda kalacak. Ggplot yardımına göre – SymbolixAU

cevap

6

Ayrık faktörünüzü alın ve sayısal olarak temsil edin. Ardından aynaları yansıtabilir ve sayıları yerine faktör düzeyleri olacak şekilde keneleri yeniden etiketleyebilirsiniz. daha yakından varsayılan ayrık ölçek taklit gerektiği gibi

library(ggplot2) 

irislabs1 <- levels(iris$Species) 
irislabs2 <- c("foo", "bar", "buzz") 

ggplot(iris, aes(Sepal.Length, as.numeric(Species))) + 
    geom_point() + 
    scale_y_continuous(breaks = 1:length(irislabs1), 
        labels = irislabs1, 
        sec.axis = sec_axis(~., 
             breaks = 1:length(irislabs2), 
             labels = irislabs2)) 

Sonra ölçekte expand = argüman ile keman.

enter image description here

+1

"Varsayılanlar sürekli değişkenler için c (0.05, 0) ve ayrık değişkenler için c (0, 0,6)" dir. Benim için genişle = c (0,0.6) gerçekten güzel sonuçlar verdi – TobiO

İlgili konular