Я создал следующий фрейм данных
library(data.table)
require(wrapr)
library(readxl)
library(dplyr)
library(tidyr)
library(ggplot2)
library(plotly)
df <- data.frame("X_Frequency" = c(5, 10, 55, 180, 300, 360, 1000, 2000) ,
"X_Axis" = c(0.009185742, 0.207822221, 0.067542222, 0.002597778,
0.002597778, 0.001454756, 0.001454756 , 0.001454756))
Далее мы создадим диаграмму, используя ggplot.Мы также преобразуем оси таким образом, чтобы получить логарифмические значения
B <- ggplot(data = df,
mapping = aes(x = df$X_Frequency, y = df$X_Axis)) +
geom_line() +
labs(x = "Frequency(Hz)", y="Axis")
B <- ggplotly(B, dynamicTicks = TRUE)
B <- layout(B, yaxis = list(type = "log"))
B <- layout(B, xaxis = list(type = "log"))
B
Результирующий график показывает различные точки, разделенные прямыми линиями.Я добавил интерполяции между точками следующим образом
Затем мы создадим интерполяцию между доступными точками
df$X_Slope2 <- 0### Initiate slope column
for(i in 2:nrow(df)){
df$X_Slope2[i] = (df$X_Axis[i] - df$X_Axis[i-1]) /
(df$X_Frequency[i] - df$X_Frequency[i - 1])
}
df_new <- bind_cols(
df %>%
select(X_Frequency, X_Axis, X_Slope2) %>%
complete(., expand(., X_Frequency = 5:2000))
)
Далее я создал новый фрейм данных со всеми интерполированными значениями
df241 <- df_new %>%
left_join(df) %>%
fill(c(X_Slope2), .direction = 'up') ##fill up slopes
for(i in 1: nrow(df241)){
if(is.na(df241$X_Axis[i]) == T){
df241$X_Axis[i] = df241$X_Slope2[i] *
(df241$X_Frequency[i] - df241$X_Frequency[i-1]) +
df241$X_Axis[i-1]
} else {
df241$X_Axis[i] = df241$X_Axis[i]
}
}
Теперь мы создаем тот же график
C <- ggplot(data = df241,
mapping = aes(x = df241$X_Frequency, y = df241$X_Axis)) +
geom_line() +
labs(x = "Frequency(Hz)", y="Axis")
C <- ggplotly(C, dynamicTicks = TRUE)
C <- layout(C, yaxis = list(type = "log"))
C <- layout(C, xaxis = list(type = "log"))
C
Хотя без преобразования журнала оба графика идентичны, с преобразованием журнала второй график (с интерполированными значениями) показывает кривые вместо прямых линий в отличие отпервый график без интерполяции.
Можно ли генерировать линии с интерполяцией без искривленной природы.Линия должна быть идентична графику B, но интерполяции должны быть видны при наведении мыши на график.просить кого-то, чтобы вести меня.