2017-01-28 3 views
0

ENV plottenwie Matlab Stil log-log-Darstellung unter Verwendung von R Grundstück

R Version 3.3.1

MAC OSX 10.9.4

Ich möchte einen Stil wie Abbildung unten plotten , die von Matlab gezeichnet wird.

Es gibt ein vollständiges Gitter auf dem Diagramm mit einem benutzerdefinierten Achsenbereich (z. B. $ 10^0 ~ 10^{- 4} $) und einer Achsenbezeichnung (z. B. 10^0 10^1 10^-2 10^-3 10^-4 10^-5). Es gibt zehn Ticks zwischen 10^0 und 10^1 und auch andere Labels. Ähnlich für die y-Achse.

Erwartet:

enter image description here

Ich habe versucht:

initial.dir<-getwd() 
setwd("/Rworks/bin") 
sink("r.o") 
pk <- read.table("2017.file) 
rownames(pk)<-c("k","pk") 
d.f <- data.frame(t(pk)) 
png(file="m.png") 
plot(
    d.f$k, 
    d.f$pk, 
    type = "n", 
    log = "xy", 
    xlim = c(10^0, 10^2), 
    ylim = c(0.00001, 1), 
) 
lines(d.f$k, d.f$pk, col = "green4", lty = "dotted") 
points(d.f$k, d.f$pk, bg = "limegreen", pch = 21) 
box() 
dev.off 
sink() 
setwd(initial.dir) 

Ich habe:

enter image description here

Die Achse und Achsenbeschriftung und die Zecken und Gitter ist nicht das, was Ich will. Kann jemand einen Rat geben? Vielen Dank.

Antwort

2

Im schlimmsten Fall können Sie die Achsen und Hintergrundlinien selbst zeichnen.

plot(
    x=c(1,2), y=c(0.6,0.2), 
    pch=21, bg="red", 
    log = "xy", 
    xlim = c(10^0, 10^2), 
    ylim = c(0.00001, 1), 
    xaxt="n", yaxt="n", 
    xlab="", ylab="", 
    yaxs="i" 
) 
lines(x=c(1,2), y=c(0.6,0.2)) 

axis(1, at=10^(0:2), 
    labels=expression(10^0, 10^1, 10^2)) 
axis(2, at=10^(-5:0), las=1, 
    labels=expression(10^-5, 10^-4, 10^-3, 10^-2, 10^-1, 10^0)) 

abline(h=outer((1:10),(10^(-5:-1))), col="#00000033", lty=2) 
abline(v=outer((1:10),(10^(0:1))), col="#00000033", lty=2) 

Log Plot

+0

, wie die Quer-pos von 10^0 und 10^2 in der X-Achse ändern. Ich benutze 'pos = 10^0' nicht funktionieren. @ G5W –

+0

@NickDong Sorry, ich verstehe die Frage nicht. Bitte erläutern. – G5W

+0

Ich habe die Lösung. Ich setze xaxs = "i" und yaxs = "i", um 10^0 mit 10^-5 koordiniert zu machen. –

1

Hier ist ein Beispiel - es ist nicht genau das, was Sie wollen (zum Beispiel Sie mit Thema Optionen wie panel.grid.minor rumspielen könnten gepunktete Rasterlinien zu bekommen), aber es ist am meisten dort der Weg.

Exponential-Format Achse kreuzen Etiketten, von here:

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

Handbuch Zecken von @ Antwort des G5W: könnte möglich sein, eine Funktion zu schreiben dies automatisch zu tun, oder man könnte irgendwo existieren.

yticks = outer((1:10),(10^(-5:-1))) 
xticks = outer((1:10),(10^(0:1))) 

den Plot Draw (mit @ den G5W Probe mini-Daten)

library(ggplot2) 
ggplot(data.frame(x=1:2,y=c(0.6,0.2)), 
     aes(x,y))+ 
geom_point(colour="red")+ 
scale_x_log10(limits=c(1,100),labels=fancy_scientific, 
       minor_breaks=xticks)+ 
scale_y_log10(limits=c(1e-5,1),labels=fancy_scientific, 
       minor_breaks=yticks)+ 
theme_bw() 

enter image description here

Verwandte Themen