2017-01-03 5 views
0

ich dieses Skript bin mit chemischen Elementen mit ggplot2 in R zeichnen:Wie Plots machen skaliert gleich oder sie trun in Anmelden ggplot skaliert

# Load the same Data set but in different name, becaus it is just for  plotting elements as a well log: 
Core31B1 <- read.csv('OilSandC31B1BatchResultsCr.csv', header = TRUE) 
# 
# Calculating the ratios of Ca.Ti, Ca.K, Ca.Fe: 
C31B1$Ca.Ti.ratio <- (C31B1$Ca/C31B1$Ti) 
C31B1$Ca.K.ratio <- (C31B1$Ca/C31B1$K) 
C31B1$Ca.Fe.ratio <- (C31B1$Ca/C31B1$Fe) 
C31B1$Fe.Ti.ratio <- (C31B1$Fe/C31B1$Ti) 
#C31B1$Si.Al.ratio <- (C31B1$Si/C31B1$Al) 
# 
# Create a subset of ratios and depth 
core31B1_ratio <- C31B1[-2:-18] 
# 
# Removing the totCount column: 
Core31B1 <- Core31B1[-9] 
# 
# Metling the data set based on the depth values, to have only three columns: depth, element and count 
C31B1_melted <- melt(Core31B1, id.vars="depth") 
#ratio melted 
C31B1_ra_melted <- melt(core31B1_ratio, id.vars="depth") 
# 
# Eliminating the NA data from the data set 
C31B1_melted<-na.exclude(C31B1_melted) 
# ratios 
C31B1_ra_melted <-na.exclude(C31B1_ra_melted) 
# 
# Rename the columns: 
colnames(C31B1_melted) <- c("depth","element","counts") 
# ratios 
colnames(C31B1_ra_melted) <- c("depth","ratio","percentage") 
# 
# Ploting the data in well logs format using ggplot2: 
Core31B1_Sp <- ggplot(C31B1_melted, aes(x=counts, y=depth)) + 
theme_bw() + 
geom_path(aes(linetype = element))+ geom_path(size = 0.6) + 
labs(title='Core 31 Box 1 Bioturbated sediments') + 
scale_y_reverse() + 
    facet_grid(. ~ element, scales='free_x') #rasterImage(Core31Image, 0, 1515.03, 150, 0, interpolate = FALSE) 
# 
# View the plot: 
Core31B1_Sp 

bekam ich folgendes Bild (wie Sie das sehen können Grundstück hat sieben Element Plots, und jeder hat seine Skala Bitte beachten Sie die Schraffuren und das Bild in ganz links) ignorieren.

Meine Frage ist, gibt es eine Möglichkeit, diese Waage das gleiche wie mit Protokoll Waage zu machen ? Wenn ja, was sollte ich in meinen Codes ändern, um die Skalen zu ändern?

+0

Sie wählten 'free_x' Waage zu benutzen? was ist das Problem? – hrbrmstr

+0

Ich möchte die Skalen auf Log skalieren, damit sie gleich werden, es ist viel einfacher für mich, den Vergleich zu machen! – Majed86

Antwort

0

Es ist nicht klar, was Sie mit "das selbe" meinen, denn das wird Ihnen nicht das selbe Ergebnis liefern wie das Protokoll, das die Werte transformiert. Hier ist, wie Sie die Log-Transformation bekommen, die, wenn Sie mit der Nr. free_x kombiniert werden, Ihnen die Handlung geben wird, von der Sie denken, dass Sie fragen.

Erstens, da Sie keine reproduzierbaren Daten vorsah (siehe here für mehr darüber, wie gut Fragen stellen), hier einige, die einige der Funktionen, zumindest gibt, dass ich denke Ihre Daten haben. Ich verwende tidyverse (speziell dplyr und tidyr), um den Bau zu tun:

forRatios <- 
    names(iris)[1:3] %>% 
    combn(2, paste, collapse = "/") 

toPlot <- 
    iris %>% 
    mutate_(.dots = forRatios) %>% 
    select(contains("/")) %>% 
    mutate(yLocation = 1:n()) %>% 
    gather(Comparison, Ratio, -yLocation) %>% 
    mutate(logRatio = log2(Ratio)) 

Beachten Sie, dass die letzte Zeile der Log-Basis 2 des Verhältnisses nimmt. Dadurch können Verhältnisse in jeder Richtung (oberhalb und unterhalb von 1) sinnvoll dargestellt werden. Ich denke dieser Schritt ist was du brauchst. Sie können etwas ähnliches mit myDF$logRatio <- log2(myDF$ratio) erreichen, wenn Sie dplyr nicht verwenden möchten.

Dann können Sie einfach plotten, dass:

ggplot(
    toPlot 
    , aes(x = logRatio 
     , y = yLocation)) + 
    geom_path() + 
    facet_wrap(~Comparison) 

Gibt:

enter image description here