2016-07-11 41 views
0

Problem: Ich kann keine Möglichkeit finden, die Befehle breaks und limits in ggplot2 zu kombinieren. Die Y-Achse sollte immer den Bereich von 0 bis 40 und breaks=c(5,10,15,20,25,30,35) enthalten. Die X-Achse sollte 0-100, breaks=c(10,20,30,40,50,60,70,80,90,100) sein. Ich möchte keine Daten anzeigen, die außerhalb dieses Bereichs liegen.R ggplot2 scale_y_continuous: Kombinieren von Brüchen und Grenzen

Ich versuchte + ylim, aber das überschreibt meine Pausen. Ich versuchte + expand, aber das zeigt auch Daten außerhalb des Bereichs, den ich will (1-100). Ich habe versucht, sowohl die Pausen hinzuzufügen als auch den Bereich in einem zweiten Schritt zu begrenzen, aber die Y-Achse meines ersten Schritts wird einfach überschrieben, wenn ich das tue.

plot_Tili_Age_VS_Height <- ggplot(Tili, aes(x = Age, y = Height)) + geom_point() + 
    geom_smooth(method = "lm", se = FALSE, color = "black", formula = y ~ x) + 
    scale_y_continuous(trans = "log10", breaks = c(5, 10, 15, 20, 25, 30, 35)) + 
    expand_limits(y = c(0, 35), x = c(0, 100)) + 
    scale_x_continuous(trans = "log10", breaks = c(10, 20, 30, 40, 50, 60,70, 80, 90, 100)) + 
    theme_bw(base_size = 15) + 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) 

df <- data.frame(x = log(Tili$Age), y = log(Tili$Height)) 
lm_eqn = function(df) { 
    m = lm(y ~ x, df) 
    eq <- substitute(ln(italic(y)) == a + b %*% ln(italic(x)) * "," ~ ~italic(r)^2 ~ 
        "=" ~ r2, list(a = format(coef(m)[1], digits = 2), 
            b = format(coef(m)[2], digits = 2), 
            r2 = format(summary(m)$r.squared, digits = 2))) 
    as.character(as.expression(eq)) 
} 

plot_Tili_Age_VS_Height <- plot_Tili_Age_VS_Height + 
    annotate("text", x = 30, y = 5, label = lm_eqn(df), hjust = 0, 
      size = 3, family = "Times", parse = TRUE) 
plot_Tili_Age_VS_Height 

Irgendeine Idee, wie man es repariert?

+1

Ist 'Tili' ein eingebauter Datensatz? Kannst du das für andere nachvollziehbar machen? – JasonAizkalns

+1

Haben Sie versucht, das Argument 'limits' beispielsweise in' scale_x_continuous' zu verwenden? – aosmith

+0

Löschen Sie 'expand_limits()', benutzen Sie nicht 'ylim' oder' xlim', benutzen Sie einfach 'scale_y_continuous' und' scale_x_continuous', sie nehmen sowohl 'breaks' als auch' limits' Argumente. – Gregor

Antwort

1

Wie Jason Aizkalns kommentiert Ihr Problem kann nicht ohne n Beispiel reproduzierbar gelöst werden. Der unten stehende Code erfüllt die von Ihnen gewünschten Irisdaten und sollte auch für Ihr Beispiel funktionieren.

library(ggplot2) 

df <- iris 


## all data, default breaks 
ggplot(df, aes(Sepal.Length, Sepal.Width)) + 
    geom_point() 

## subset of data is seen in plot, breaks changed 
ggplot(df, aes(Sepal.Length, Sepal.Width)) + 
    geom_point() + 
    scale_x_continuous(breaks = c(5.5,6.5), limits = c(5,7)) + 
    scale_y_continuous(breaks = c(3.5,2.5), limits = c(2,4)) 
+0

Vielen Dank , plötzlich funktionierte es, Breaks und Limits zu kombinieren, obwohl ich den gleichen Code wie gestern hatte (und das Programm zwischenzeitlich neu gestartet hatte.) Möglicher Neustart des Computers hat den Trick gemacht. Also 'scale_x_continuous (breaks = c (5.5.6.5), Grenzen = c (5,7)) 'war die Lösung! Was Sie möglicherweise im Auge behalten müssen, wenn Sie logarithmierte Daten wie mich verwenden, ist das, wenn Sie einfach c (0,40) oder ähnliches setzen, Ihr Daten können sehr klein erscheinen, da die Entfernung von 0 bis zur ersten Pause (10 in meinem Fall) groß ist und es könnte besser sein, die echte untere Grenze Ihrer Daten zu verwenden (in meinem Fall 4,4). – Baycat