我正在处理一个大小为2 x 400的数据框。我需要在同一个图上绘制该图(我们称它为数据集A)主要数据集为我的项目。尝试使用R垂直缩放数据集的图形,ggplot2
我需要的是数据集A的图形的一般形状。即我只需要看看这个趋势。
数据集A发生的比例小于主图的比例。所以数据集A看起来像一条水平线。
我决定将数据集A乘以一个因子......我尝试了各种数值以获得最佳的垂直缩放比例,这导致我遇到了问题。
当试图通过反复试验找到理想的乘法因子时,我预期数据集A的图形的一般形状保持其形状,并且仅在其相对于垂直点上变化。即所有最大值和最小值的水平坐标不应移动,只有垂直点应该移动。但这没有发生。我想知道为什么。
这里的数据组A(黄色),当乘以因子3:
因子的5:
黄色点是geom_point
和黄色曲线是相应的geom_smooth
。
编辑: 这里是我的代码原代码: 我还没有太多正规的代码训练。我为任何混乱而道歉!
library("ggplot2")
library("dplyr")
# READ IN DATA
temp_data <-read.table(col.names = "y",
"C:/Users/Ben/Documents/Visual Studio 2013/Projects/Home/Home/steamdata2.txt")
boilpoint <- which(temp_data$y == "boil") # JUST A MARKER..
temp_data <- filter(temp_data, y != "boil") # GETTING RID OF THE MARKER ENTRY
# DON'T KNOW WHY BUT I HAD TO DO THIS INTERMEDIATE STEP
# BEFORE I COULD CONVERT FROM FACTOR -> NUMERIC
temp_data$y <- as.character(temp_data$y)
# CONVERTING TO NUMERIC
temp_data$y <- as.numeric(temp_data$y)
# GETTING RID OF BASICALLY THE LAST ENTRY WHICH HAS THE LARGEST VALUE
temp_data <- filter(temp_data, y<max(temp_data$y))
# ADD ANOTHER COLUMN WITH THE ROW NUMBER,
# BECAUSE I DON'T KNOW HOW TO ACCESS THIS FOR GGPLOT
temp_data <- transform(temp_data, x = 1:nrow(temp_data))
n <- nrow(temp_data) # Num of readings
period <- temp_data[n,1] # (sec)
RpS <- n/period # Avg Readings per Second
MIN <- min(temp_data$y)
MAX <- max(temp_data$y)
# DERIVATIVE OF ORIGINAL
deriv <- data.frame(matrix(ncol=2, nrow=n))
# ADD ANOTHER COLUMN TO ACCESS ROW NUMBERS FOR GGPLOT LATER
colnames(deriv) <- c("y","x")
deriv <- transform(deriv, x = c(1:n))
# FILL DERIVATIVE DATAFRAME
deriv[1, 1] <- 0
for(i in 2:n){
deriv[i - 1, 1] <- temp_data[i, 1] - temp_data[i - 1, 1]
}
deriv <- filter(deriv, y != 0)
# DID THE SAME FOR SECOND DERIVATIVE
dderiv <- data.frame(matrix(ncol = 2, nrow = nrow(deriv)))
colnames(dderiv) <- c("y", "x")
dderiv <- transform(dderiv, x=rep(0, nrow(deriv)))
dderiv[1, 1] <- 0
for(i in 2:nrow(deriv)) {
dderiv$y[i - 1] <- (deriv$y[i] - deriv$y[i - 1])/
(deriv$x[i] - deriv$x[i - 1])
dderiv$x[i - 1] <- deriv$x[i] + (deriv$x[i] - deriv$x[i - 1])/2
}
dderiv <- filter(dderiv, y!=0)
# HERE'S WHERE I FACTOR BY VARIOUS MULTIPLES
deriv <- MIN + deriv * 3
dderiv <- MIN + dderiv * 3
graph <- ggplot(temp_data, aes(x, y)) + geom_smooth()
graph <- graph + geom_point(data = deriv, color = "yellow")
graph <- graph + geom_smooth(data = deriv, color = "yellow")
graph <- graph + geom_point(data = dderiv, color = "green")
graph <- graph + geom_smooth(data = dderiv, color = "green")
graph <- graph + geom_vline(xintercept = boilpoint, color = "red")
graph <- graph + xlab("Readings (n)") +
ylab(expression(paste("Temperature (",degree,"C)")))
graph <- graph + xlim(c(0,n)) + ylim(c(MIN, MAX))
两个建议:在不同的方面绘制数据集A或将所有值标准化为相同的尺度,例如,与'scale :: rescale()' – baptiste
你已经乘以你的x值以及偶然的地方。没有代码,我不能说在哪里。第一个高点在第一个图上是(4500,23.95),第二个是(7500,24.1)。 – timcdlucas
我在我原来的帖子中包含了代码,-timcdlucas。我希望有人能找到一些东西,我需要一个全新的眼睛......我还没有尝试过你的建议baptiste,我会去了解这个功能,并让你知道它是如何发展的。 –