Построение вертикальных и горизонтальных линий в 0 с использованием различных графических систем R - PullRequest
3 голосов
/ 06 марта 2019

Я проверил ответ на мою проблему, и самое близкое, что я смог найти, было здесь: Почему график ведет себя по-разному для тех же, но масштабированных данных? .Я понимаю атомные объекты и уже преобразую их во фрейм данных.

Я загрузил некоторые химические данные реакции:

   library(car)

    theURL <- "http://lib.stat.cmu.edu/datasets/Andrews/T30.1"
    theNames <- c("Table", "Number", "Row", "Experiment", "Temperature", 
    "Concentration", "Time", "Unchanged", "Converted", "Unwanted")
    Reaction <- read.table(theURL, header = F , col.names = theNames)
    Reaction <- Reaction[-c(1:4)]

Затем я рисую диаграмму рассеяния;сплошные линии через среднее значение X и среднее значение Y;пунктирные линии означают ± 2SD.Также сегмент склона Sy / Sx нарисован на ± 5SD, потому что я не смог получить abline(), чтобы нарисовать его.

    scatterplot(Reaction$Temperature, Reaction$Converted, smooth = FALSE, 
    regLine = FALSE, grid = FALSE, xlim = c(150, 185), xlab = "Temperature", ylab = "% Converted", main = "Reaction Results", ylim = c(45, 70))
    TempMean = mean(Reaction$Temperature)
    ConvMean = mean(Reaction$Converted)
    TempSD = sd(Reaction$Temperature)
    ConvSD = sd(Reaction$Converted)
    abline(col = c("red", "green"), v = TempMean, h = ConvMean)
    abline(col = "green", lty = "dotted", v = (c(TempMean - 2*TempSD, TempMean + 2*TempSD)))
    abline(col = "red", lty = 3, h = (c(ConvMean - 2*ConvSD, ConvMean + 2*ConvSD)))
    segments(TempMean - 5*TempSD, ConvMean - 5*ConvSD, TempMean + 5*TempSD, ConvMean + 5*ConvSD)

Bonferroni(?) Limits for bivariate data

...и теперь большой открой.Если я масштабирую все, диаграмма рассеяния по существу делает то же самое.

    # Scale Reaction Data
    Reaction.scaled <- as.data.frame(scale(Reaction))
    # Mean and sd Lines
     scatterplot(Reaction.scaled$Temperature, Reaction.scaled$Converted, smooth = FALSE, regLine = FALSE, grid = FALSE, xlab = "Temperature", ylab = "% Converted", main = "Reaction Results")
    TempMean = mean(Reaction.scaled$Temperature)
    ConvMean = mean(Reaction.scaled$Converted)
    TempSD = sd(Reaction.scaled$Temperature)
    ConvSD = sd(Reaction.scaled$Converted)
    abline(col = c("red", "green"), v = TempMean, h = ConvMean)
    abline(col = "green", lty = "dotted", v = (c(TempMean - 2*TempSD, TempMean + 2*TempSD)))
    abline(col = "red", lty = 3, h = (c(ConvMean - 2*ConvSD, ConvMean + 2*ConvSD)))
    segments(TempMean - 5*TempSD, ConvMean - 5*ConvSD, TempMean + 5*TempSD, ConvMean + 5*ConvSD)

Scaled Plot

... но на чертеже не показано масштабированное среднеев (0,0).Я подозреваю, что это как-то связано с высокоуровневыми и низкоуровневыми графическими функциями.

1 Ответ

3 голосов
/ 07 марта 2019

Как всегда, эта проблема возникла из-за моего неправильного понимания документации.

Под ?scatterplot

reset.par
, если TRUE (по умолчанию) затем параметры графика возвращаются к своим предыдущим значениям при выходе из диаграммы рассеяния;если FALSE, то параметры mar и mfcol изменяются для текущего устройства печати. Установите на ЛОЖЬ, если вы хотите добавить графические элементы (например, линии) на график .

И, действительно, добавление reset.par = FALSE к диаграммам рассеяния на автомобилях выше работает.Попробуйте сами для развлечения дома!

Соответствующий рисунок, вызвавший вопрос, с исправлением: Scaled data with solid lines at means, dotted lines at means±2SDs

...