如何使绘图比例相同或将它们转换为 ggplot 中的对数比例
How to make plots scales the same or trun them into Log scales in ggplot
我正在使用此脚本在 R 中使用 ggplot2 绘制化学元素:
# 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
我得到了下图(如您所见,该图有七个元素图,每个图都有其比例尺。请忽略阴影和最左边的图像):
我的问题是,有没有办法让这些尺度像使用对数尺度一样?如果是,我应该在我的代码中更改什么来更改比例?
不清楚您所说的 "the same" 是什么意思,因为这不会给您与对数转换值相同的结果。以下是如何获得对数转换,当与不使用 free_x
结合使用时,将为您提供我认为您正在要求的情节。
首先,由于您没有提供任何可重现的数据(请参阅 here 了解更多关于如何提出好问题的信息),这里至少提供了一些我 think你的数据有。我正在使用 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)绘制有意义的比率。我认为这一步就是您所需要的。如果你不想使用 dplyr
.
,你可以用 myDF$logRatio <- log2(myDF$ratio)
完成类似的事情
然后,你可以这样绘制:
ggplot(
toPlot
, aes(x = logRatio
, y = yLocation) ) +
geom_path() +
facet_wrap(~Comparison)
给出:
我正在使用此脚本在 R 中使用 ggplot2 绘制化学元素:
# 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
我得到了下图(如您所见,该图有七个元素图,每个图都有其比例尺。请忽略阴影和最左边的图像):
我的问题是,有没有办法让这些尺度像使用对数尺度一样?如果是,我应该在我的代码中更改什么来更改比例?
不清楚您所说的 "the same" 是什么意思,因为这不会给您与对数转换值相同的结果。以下是如何获得对数转换,当与不使用 free_x
结合使用时,将为您提供我认为您正在要求的情节。
首先,由于您没有提供任何可重现的数据(请参阅 here 了解更多关于如何提出好问题的信息),这里至少提供了一些我 think你的数据有。我正在使用 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)绘制有意义的比率。我认为这一步就是您所需要的。如果你不想使用 dplyr
.
myDF$logRatio <- log2(myDF$ratio)
完成类似的事情
然后,你可以这样绘制:
ggplot(
toPlot
, aes(x = logRatio
, y = yLocation) ) +
geom_path() +
facet_wrap(~Comparison)
给出: