2017-01-03 9 views
0

Я использую этот скрипт для построения химических элементов с использованием ggplot2 в R:Как сделать графики масштабирует же или Trun их в Log весов в ggplot

# 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 

я получил следующее изображение (как вы можете увидеть участок имеет семь участков элемента, и каждый из них имеет свою шкалу Просьба игнорировать затенение и изображение в крайнем левом положении):.

Мой вопрос, есть ли способ, чтобы сделать эти весы одно и то же, как с помощью весов журнала ? Если да, то что я должен изменить в своих кодах, чтобы изменить весы?

+0

вы решили использовать 'free_x' весы? в чем проблема? – hrbrmstr

+0

Я хочу изменить весы на шкалу журнала, чтобы они стали такими же, мне гораздо легче сделать сравнение! – Majed86

ответ

0

Непонятно, что вы подразумеваете под «тем же», потому что это не даст вам того же результата, что и лог, преобразующий значения. Вот как получить преобразование журнала, которое в сочетании с no using free_x даст вам сюжет, который, я думаю, вы просите.

Во-первых, так как вы не предоставили каких-либо воспроизводимых данных (см here Более подробную информацию о том, как задавать хорошие вопросы), вот некоторые, что дает, по крайней мере некоторые из особенностей, которые я думаю ваши данные есть. Я использую tidyverse (в частности dplyr и tidyr), чтобы сделать конструкцию:

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

Обратите внимание, что последняя строка принимает логарифма по основанию 2 отношения. Это позволяет соотносить в каждом направлении (выше и ниже 1) для значимого построения. Я думаю, что этот шаг - это то, что вам нужно. вы можете сделать что-то подобное с myDF$logRatio <- log2(myDF$ratio), если вы не хотите использовать dplyr.

Затем, вы можете просто сюжет, что:

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

Дает:

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^