объединение функций paste () и expression () в метках графика

<p>рассмотрим этот простой пример:</p><pre><code>labnames <- c('xlab','ylabl') plot(c(1:10),xlab=expression(paste(labname[1], x^2)),ylab=expression(paste(labname[2], y^2))) </code></pre><p>я хочу, чтобы символьная запись, определенная переменной 'labname,' xlab 'или' ylab ', появлялась рядом с x ^ 2 или y ^ 2, определенными выражением (). как таковой, фактический текст 'labname' с нижним индексом присоединяется к надстрочному выражению.</p><p>какие-нибудь мысли?</p>

<p>альтернативное решение для @aaron - это функция <code>bquote()</code>. нам нужно предоставить правильное выражение r, в данном случае, например, <code>label ~ x^2</code>, где <code>label</code> - строка, которую вы хотите назначить из вектора <code>labnames</code>. <code>bquote</code> оценивает r-код в выражении, заключенном в <code>.( )</code>, и подставляет результат в выражение.</p><p>вот пример:</p><pre><code>labnames <- c('xlab','ylab') xlab <- bquote(.(labnames[1]) ~ x^2) ylab <- bquote(.(labnames[2]) ~ y^2) plot(c(1:10), xlab = xlab, ylab = ylab) </code></pre><p>(обратите внимание, что <code>~</code> просто добавляет небольшой интервал, если вам не нужен пробел, замените его на <code>*</code>, и две части выражения будут сопоставлены.)</p>

<p>вместо этого используйте <code>substitute</code>.</p><pre><code>labnames <- c('xlab','ylab') plot(c(1:10), xlab=substitute(paste(nn, x^2), list(nn=labnames[1])), ylab=substitute(paste(nn, y^2), list(nn=labnames[2]))) </code></pre>

<p>правка: добавлен новый пример для ggplot2 в конце</p><p>смотрите <strong>? plotmath </strong> для различных математических операций в r</p><p>вы должны быть в состоянии использовать выражение без вставки. если вы используете символ тильды (~) в функции выражения, он будет предполагать, что между символами есть пробел, или вы можете использовать символ *, и он не будет ставить пробел между аргументами</p><p>иногда вам нужно будет изменить поля, когда вы размещаете надстрочные знаки на оси y.</p><pre><code>par(mar=c(5, 4.3, 4, 2) + 0.1) plot(1:10, xlab = expression(xlab ~ x^2 ~ m^-2), ylab = expression(ylab ~ y^2 ~ m^-2), main="plot 1") </code></pre><p> <a href="https://i.stack.imgur.com/qqiit.jpg"><img src="https://i.stack.imgur.com/qqiit.jpg" alt="enter image description here"></a> </p><pre><code>plot(1:10, xlab = expression(xlab * x^2 * m^-2), ylab = expression(ylab * y^2 * m^-2), main="plot 2") </code></pre><p> <a href="https://i.stack.imgur.com/khjbn.jpg"><img src="https://i.stack.imgur.com/khjbn.jpg" alt="enter image description here"></a> </p><pre><code>plot(1:10, xlab = expression(xlab ~ x^2 * m^-2), ylab = expression(ylab ~ y^2 * m^-2), main="plot 3") </code></pre><p> <a href="https://i.stack.imgur.com/mlgly.jpg"><img src="https://i.stack.imgur.com/mlgly.jpg" alt="enter image description here"></a> </p><p>надеюсь, вы увидите разницу между графиками 1, 2 и 3 с различным использованием символов ~ и *. дополнительное примечание, вы можете использовать другие символы, такие как нанесение символа градуса для температуры или му, фи. если вы хотите добавить индекс, используйте квадратные скобки.</p><pre><code>plot(1:10, xlab = expression('your x label' ~ mu[3] * phi), ylab = expression("temperature (" * degree * c *")")) </code></pre><p> <a href="https://i.stack.imgur.com/eielj.jpg"><img src="https://i.stack.imgur.com/eielj.jpg" alt="enter image description here"></a> </p><p>вот пример ggplot, использующий выражение с бессмысленным примером</p><pre><code>require(ggplot2) </code></pre><p>или, если у вас установлена библиотека pacman, вы можете использовать p\_load для автоматической загрузки, загрузки и прикрепления дополнительных пакетов.</p><pre><code># require(pacman) # p\_load(ggplot2) data = data.frame(x = 1:10, y = 1:10) ggplot(data, aes(x,y)) + geom\_point() + xlab(expression(bar(yourunits) ~ g ~ m^-2 ~ or ~ integral(f(x)*dx, a,b))) + ylab(expression("biomass (g per" ~ m^3 *")")) + theme\_bw() </code></pre><p> <a href="https://i.stack.imgur.com/7sbgt.jpg"><img src="https://i.stack.imgur.com/7sbgt.jpg" alt="enter image description here"></a> </p>

<p>очень хороший пример использования вставки и замены для набора как символов (mathplot), так и переменных по адресу <a href="http://vis.supstat.com/2013/04/mathematical-annotation-in-r/">http://vis.supstat.com/2013/04/matancial-annotation-in-r/</a> </p><p>вот адаптация ggplot</p><pre><code>library(ggplot2) x\_mean <- 1.5 x\_sd <- 1.2 n <- 500 n <- ggplot(data.frame(x <- rnorm(n, x\_mean, x\_sd)),aes(x=x)) + geom\_bar() + stat\_bin() + labs(title=substitute(paste( "histogram of random data with ", mu,"=",m,", ", sigma^2,"=",s2,", ", "draws = ", numdraws,", ", bar(x),"=",xbar,", ", s^2,"=",sde), list(m=x\_mean,xbar=mean(x),s2=x\_sd^2,sde=var(x),numdraws=n))) print(n) </code></pre>

<p>если x ^ 2 и y ^ 2 были выражениями, уже заданными в квадрате переменной, это решает проблему:</p><pre><code>labnames <- c('xlab','ylab') squared <- c(expression('x'^2), expression('y'^2)) xlab <- eval(bquote(expression(.(labnames[1]) ~ .(squared[1][[1]])))) ylab <- eval(bquote(expression(.(labnames[2]) ~ .(squared[2][[1]])))) plot(c(1:10), xlab = xlab, ylab = ylab) </code></pre><p>обратите внимание на [[1]] за квадратом [1]. он дает вам содержимое выражения "... (...)" в скобках без каких-либо escape-символов.</p>