Как построить CDF, используя два набора данных в R

Я пытаюсь построить приведенный ниже набор данных с помощью функции plot. Я не могу построить оба графика на одном графике.

Используя набор данных, я попытался построить график.

m_bs = conpl$new(sample_data1$V1)
m_eq = conpl$new(sample_data2$V1)

est = estimate_xmin(m_bs, xmax=5e+5)
est_eq = estimate_xmin(m_eq, xmax=Inf)

m_bs$setXmin(est_bs)
m_eq$setXmin(est_eq)

plot(m_bs)
lines(m_bs)
d = plot(m_eq, draw =FALSE)
points(d$x, d$y, col=2)
lines(m_eq,col=2,lwd=2)

Я получил график ниже, он показывает только один график. Извините за публикацию вопроса, я не получил правильный ответ ранее.

1 ответ

Я посмотрел исходный код plot функция используется poweRlaw и изменил это:

lines_ <- function (x, y, ...) 
{
  .local <- function (x, cut = FALSE, draw = TRUE, ...) 
  {
    xmin = x$getXmin()
    cut_off = cut * xmin
    x_values = x$dat
    if (!cut) 
      x$setXmin(min(x_values))
    y = dist_data_cdf(x, lower_tail = FALSE, xmax = max(x_values) + 1)
    cut_off_seq = (x_values >= cut_off)
    x_axs = x_values[cut_off_seq]
    if (is(x, "discrete_distribution")) 
      x_axs = unique(x_axs)
    x$setXmin(xmin)
    x = x_axs
    if (draw) 
      lines(x, y, ...)
    invisible(data.frame(x = x, y = y))
  }
  .local(x, ...)
}

#----------------------------------------------------------

points_ <- function (x, y, ...) 
{
  .local <- function (x, cut = FALSE, draw = TRUE, ...) 
  {
    xmin = x$getXmin()
    cut_off = cut * xmin
    x_values = x$dat
    if (!cut) 
      x$setXmin(min(x_values))
    y = dist_data_cdf(x, lower_tail = FALSE, xmax = max(x_values) + 1)
    cut_off_seq = (x_values >= cut_off)
    x_axs = x_values[cut_off_seq]
    if (is(x, "discrete_distribution")) 
      x_axs = unique(x_axs)
    x$setXmin(xmin)
    x = x_axs
    if (draw) 
      points(x, y, ...)
    invisible(data.frame(x = x, y = y))
  }
  .local(x, ...)
}

Функции lines_ а также points_

  • нарисовать тот же график, что и plot функция poweRlaw пакет, но
  • вести себя как стандарт lines а также points функции в том, что они не разрушают текущий граф.

Первый m_bs и 'm_eq' отдельно:

> plot(m_bs, lwd=9, col="black")

> lines_(m_bs, lwd=5, col="green")

введите описание изображения здесь

> plot(m_eq, lwd=9, col="black")

> lines_(m_eq, lwd=5, col="blue")

введите описание изображения здесь

Х-диапазоны этих графиков не перекрываются. следовательно xlim должен быть выбран соответствующим образом, чтобы показать оба графика на одном и том же рисунке.

> plot( m_eq, lwd=8, col="black",
+       xlim=c(min(m_bs$dat,m_eq$dat),max(m_bs$dat,m_eq$dat)))

> lines_(m_eq, lwd=5, col="blue")

> points_(m_bs,lwd=8,col="black")

> lines_(m_bs, lwd=5, col="green")
> 

введите описание изображения здесь

Другие вопросы по тегам