Я хочу построить две функции в разных цветах и стилях точек с соответствующей легендой, в простой R.
У меня есть несколько вопросов:
-
Я использую
pch=21
иpch=22
. Я понимаю, что они "заполнены" символами. Они кажутся заполненными, как ожидалось в легенде, но они кажутся полыми на самом графике. Что не так? -
Могу ли я получить больше места между точками без указания сетки вручную? возможно, выбрав количество печатаемых точек?
-
Не стесняйтесь добавлять какие-либо советы, которые вам нужны. Я очень новичок в Р. В частности, есть ли лучший способ построить две функции? например определяя векторы функций? и не было бы способа, чтобы легенда была автоматически генерирована без необходимости указывать цвета и формы, в простой R?
Здесь мой код:
par(new=TRUE)
p1 <- plot(function(x){ x^(2)/2 }
, 0, 100
, xlab = "x"
, ylab = "y"
, ylim = c(0,5000)
, las = 1
, type = "p"
, cex = 0.8
, pch = 21
, col = "red"
)
par(new=TRUE)
p2 <- plot(function(x){ (1-x^(2))/2 }
, 0, 100
, xlab = ""
, ylab = ""
, axes = FALSE
, type = "p"
, cex = 0.8
, pch = 22
, col = "blue"
)
par(new=TRUE)
l <- legend( "topleft"
, inset = c(0,0.4)
, cex = 1.5
, bty = "n"
, legend = c("A", "B")
, text.col = c("red", "blue")
, pt.bg = c("red","blue")
, pch = c(21,22)
)
После различных исследований я решил использовать трюк par(new=TRUE)
для наложения двух функций (а не, скажем, с использованием матплота или комбинации графика и точек или макета). Для начала это был неудачный шаг? (Изменить: да, очень плохо, см. Ниже) +1, если вы не просите меня прочитать руководство; -)
Изменить: Резюме решений
Благодаря joran и Didzis Elferts, я получил решение нескольких из моих проблем. Для записи, я хотел бы кратко изложить здесь:
-
Чтобы получить заполненные символы на графике, вам нужно указать как col (цвет), так и bg (background). Это справедливо даже для
pch=21
иpch=22
, которые автоматически не заполняются указанным цветом. Чтобы получить заполненные символы в легенде, вам нужно указать как col, так и pt.bg. Здесь bg один недостаточно хорош. -
Это очень плохая идея использовать
par(new=TRUE)
сaxes=FALSE
, как я сделал изначально, потому что наложенные графики не обязательно используют одну и ту же систему координат. Предполагаемая функция для второго графика была(100^2-x^2)/2
, но я непреднамеренно написал(1-x^2)/2
и не понял этого, потому что я установил axes = FALSE.
В целом, вот мое предпочтительное решение:
curve( x^2/2
, from = 0
, to = 100
, n = 30
, type = "p"
, pch = 21 # alternatively pch=15 is a solid symbol
, col = "red" # colors the outline of hollow symbol pch=21
, bg = "red" # fills hollow symbol pch=21 with color
, xlab = "x"
, ylab = "y"
)
curve( (100^2-x^2)/2
, from = 0
, to = 100
, n = 30
, type = "p"
, pch = 22 # alternative pch=16
, col = "blue"
, bg = "blue"
, add = TRUE
)
legend( "topleft"
, inset = c(0,0.4),
, cex = 1.5,
, bty = "n",
, legend = c("A", "B"),
, text.col = c("red", "blue"),
, col = c("red", "blue"),
, pt.bg = c("red","blue")
, pch = c(21,22)
)
Это дает график, подобный изображенному йораном. Большое вам спасибо за вашу помощь.