Кривые, появляющиеся после преобразования журнала в ggplot, когда значения интерполируются в R - PullRequest
0 голосов
/ 12 февраля 2019

Я создал следующий фрейм данных

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, но интерполяции должны быть видны при наведении мыши на график.просить кого-то, чтобы вести меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...