добавить текст в barplot topleft margin R [дублировать]

dependencies {
implementation 'com.android.support:design:26.1.0'
implementation 'com.android.support:support-v4:26.1.0'
implementation 'com.google.android.gms:play-services-maps:9.6.1'
implementation fileTree(dir: 'libs', include: ['*.jar'])
androidTestImplementation ('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
implementation 'com.google.firebase:firebase-core:9.6.1' //referencia  a la version de firebase
implementation 'com.google.firebase:firebase-database:9.6.1' // referencia a la base de datos
implementation 'com.google.firebase:firebase-auth:9.6.1'
implementation 'com.google.android.gms:play-services-auth:9.6.1'

implementation 'com.google.android.gms:play-services-maps:9.6.1'

// aqui se agrega la referencia a la autentificacion

}

** заменить компиляцию с помощью функции androidCompileTest с помощью androidTestImplementation **

143
задан Henrik 14 October 2010 в 11:01
поделиться

10 ответов

Возможно, вам нужно par(xpd=TRUE), чтобы вы могли рисовать объекты вне области сюжета. Так что если вы делаете основной сюжет с bty='L', у вас будет некоторое пространство справа для легенды. Обычно это будет привязано к области сюжета, но сделайте par(xpd=TRUE) и с небольшой настройкой вы можете получить легенду как можно дальше:

 set.seed(1) # just to get the same random numbers
 par(xpd=FALSE) # this is usually the default

 plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2), bty='L')
 # this legend gets clipped:
 legend(2.8,0,c("group A", "group B"), pch = c(1,2), lty = c(1,2))

 # so turn off clipping:
 par(xpd=TRUE)
 legend(2.8,-1,c("group A", "group B"), pch = c(1,2), lty = c(1,2))
90
ответ дан Henrik 23 August 2018 в 18:37
поделиться

Попробуйте layout(), который я использовал для этого в прошлом, просто создав пустой рисунок ниже, правильно масштабированный примерно на 1/4 или около того, и вручную разместив части легенды.

Там есть некоторые более старые вопросы здесь о legend(), которые должны вас начать.

1
ответ дан Dirk Eddelbuettel 23 August 2018 в 18:37
поделиться

Другое решение, помимо уже упомянутых ondes (с использованием layout или par(xpd=TRUE)), состоит в том, чтобы наложить ваш график на прозрачный график на всем устройстве, а затем добавить к нему легенду.

трюк состоит в том, чтобы наложить (пустой) график на всю область построения и добавить к этому легенду. Мы можем использовать опцию par(fig=...). Сначала мы инструктируем R создать новый график по всему устройству построения:

par(fig=c(0, 1, 0, 1), oma=c(0, 0, 0, 0), mar=c(0, 0, 0, 0), new=TRUE)

Настройка oma и mar необходима, так как мы хотим, чтобы внутренняя часть сюжета охватывала все устройство. new=TRUE необходимо, чтобы R не запускал новое устройство. Затем мы можем добавить пустой сюжет:

plot(0, 0, type='n', bty='n', xaxt='n', yaxt='n')

И мы готовы добавить легенду:

legend("bottomright", ...)

добавит легенду в нижнюю правую часть устройства. Аналогично, мы можем добавить легенду на верхний или правый край. Единственное, что нам нужно, это убедиться, что край исходного сюжета достаточно велик, чтобы разместить легенду.

Включение всего этого в функцию;

add_legend <- function(...) {
  opar <- par(fig=c(0, 1, 0, 1), oma=c(0, 0, 0, 0), 
    mar=c(0, 0, 0, 0), new=TRUE)
  on.exit(par(opar))
  plot(0, 0, type='n', bty='n', xaxt='n', yaxt='n')
  legend(...)
}

И пример. Сначала создайте сюжет, чтобы у нас было достаточно места внизу, чтобы добавить легенду:

par(mar = c(5, 4, 1.4, 0.2))
plot(rnorm(50), rnorm(50), col=c("steelblue", "indianred"), pch=20)

Затем добавьте легенду

add_legend("topright", legend=c("Foo", "Bar"), pch=20, 
   col=c("steelblue", "indianred"),
   horiz=TRUE, bty='n', cex=0.8)

В результате:

Example figure shown legend in top margin [/g0]

21
ответ дан Jan van der Laan 23 August 2018 в 18:37
поделиться

Мне нравится делать это следующим образом:

par(oma=c(0, 0, 0, 5))
plot(1:3, rnorm(3), pch=1, lty=1, type="o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch=2, lty=2, type="o")
legend(par('usr')[2], par('usr')[4], bty='n', xpd=NA,
       c("group A", "group B"), pch=c(1, 2), lty=c(1,2))

Единственное, что требуется, - это установить правильное поле, чтобы оно было достаточно широким, чтобы приспособить легенду.

Однако это также может быть автоматизировано:

dev.off() # to reset the graphics pars to defaults
par(mar=c(par('mar')[1:3], 0)) # optional, removes extraneous right inner margin space
plot.new()
l <- legend(0, 0, bty='n', c("group A", "group B"), 
            plot=FALSE, pch=c(1, 2), lty=c(1, 2))
# calculate right margin width in ndc
w <- grconvertX(l$rect$w, to='ndc') - grconvertX(0, to='ndc')
par(omd=c(0, 1-w, 0, 1))
plot(1:3, rnorm(3), pch=1, lty=1, type="o", ylim=c(-2, 2))
lines(1:3, rnorm(3), pch=2, lty=2, type="o")
legend(par('usr')[2], par('usr')[4], bty='n', xpd=NA,
       c("group A", "group B"), pch=c(1, 2), lty=c(1, 2))

11
ответ дан jbaums 23 August 2018 в 18:37
поделиться

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

Ваш сюжет:

plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch = 2, lty = 2, type="o")

Легенда:

legend("bottomright", c("group A", "group B"), pch=c(1,2), lty=c(1,2),
       inset=c(0,1), xpd=TRUE, horiz=TRUE, bty="n"
       )

Результат:

Здесь в ваш пример добавлена ​​только вторая строка легенды. В свою очередь:

  • inset=c(0,1) - перемещает легенду по части области графика в направлениях (x, y). В этом случае легенда находится в положении "bottomright". Он перемещается на 0 областей изображения в направлении x (поэтому остается на «правее») и на 1 участок графика в направлении y (снизу вверх). И так получилось, что оно появляется прямо над графиком.
  • xpd=TRUE - давайте легенду появляться вне области построения графика.
  • horiz=TRUE - инструктирует создать горизонтальную легенду.
  • bty="n" - деталь стиля, чтобы избавиться от ограничивающей рамки легенды.

То же самое применяется при добавлении легенды в сторону:

par(mar=c(5,4,2,6))
plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch = 2, lty = 2, type="o")

legend("topleft", c("group A", "group B"), pch=c(1,2), lty=c(1,2),
       inset=c(1,0), xpd=TRUE, bty="n"
       )

Здесь мы просто скорректировали положения легенды и добавили дополнительное пространство поля в правую сторону участка. Результат:

0
ответ дан Karolis Koncevičius 23 August 2018 в 18:37
поделиться

Вы можете сделать это с помощью Plotly R API , либо с помощью кода, либо из графического интерфейса, перетащив легенду, где вы хотите.

Вот пример. График и код также здесь .

x = c(0,1,2,3,4,5,6,7,8) 
y = c(0,3,6,4,5,2,3,5,4) 
x2 = c(0,1,2,3,4,5,6,7,8) 
y2 = c(0,4,7,8,3,6,3,3,4)

Вы можете расположить легенду за пределами графика, назначив одно из значений x и y либо 100, либо -100.

legendstyle = list("x"=100, "y"=1)
layoutstyle = list(legend=legendstyle)

Вот другие варианты:

  • list("x" = 100, "y" = 0) для наружного правого нижнего положения
  • list("x" = 100, "y"= 1) Справа сверху
  • list("x" = 100, "y" = .5) Вне правого среднего
  • list("x" = 0, "y" = -100) Под левым
  • list("x" = 0.5, "y" = -100) В Центре
  • list("x" = 1, "y" = -100) В правой части

Тогда ответ.

response = p$plotly(x,y,x2,y2, kwargs=list(layout=layoutstyle));

Plotly возвращает URL-адрес с вашим графиком, когда вы делаете звонок. Вы можете получить доступ к этому быстрее, вызвав browseURL(response$url), чтобы он открыл ваш график в вашем браузере для вас.

url = response$url
filename = response$filename

Это дает нам этот график. Вы также можете переместить легенду из GUI, а затем график будет масштабироваться соответствующим образом. Полное раскрытие: я нахожусь в команде Plotly.

Legend on side of graph [/g2]

3
ответ дан Mateo Sanchez 23 August 2018 в 18:37
поделиться

Никто не упомянул об использовании отрицательных значений inset для legend. Вот пример, где легенда находится справа от графика, выровненного вверху (с использованием ключевого слова "topright").

# Random data to plot:
A <- data.frame(x=rnorm(100, 20, 2), y=rnorm(100, 20, 2))
B <- data.frame(x=rnorm(100, 21, 1), y=rnorm(100, 21, 1))

# Add extra space to right of plot area; change clipping to figure
par(mar=c(5.1, 4.1, 4.1, 8.1), xpd=TRUE)

# Plot both groups
plot(y ~ x, A, ylim=range(c(A$y, B$y)), xlim=range(c(A$x, B$x)), pch=1,
               main="Scatter plot of two groups")
points(y ~ x, B, pch=3)

# Add legend to top right, outside plot region
legend("topright", inset=c(-0.2,0), legend=c("A","B"), pch=c(1,3), title="Group")

Первому значению inset=c(-0.2,0) может потребоваться настройка на основе ширина легенды.

legend_right [/g0]

120
ответ дан Mike T 23 August 2018 в 18:37
поделиться

Я могу предложить только пример уже упомянутого решения компоновки.

layout(matrix(c(1,2), nrow = 1), widths = c(0.7, 0.3))
par(mar = c(5, 4, 4, 2) + 0.1)
plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch = 2, lty = 2, type="o")
par(mar = c(5, 0, 4, 2) + 0.1)
plot(1:3, rnorm(3), pch = 1, lty = 1, ylim=c(-2,2), type = "n", axes = FALSE, ann = FALSE)
legend(1, 1, c("group A", "group B"), pch = c(1,2), lty = c(1,2))

an ugly picture :S [/g0]

7
ответ дан Roman Luštrik 23 August 2018 в 18:37
поделиться

Недавно я нашел очень легкую и интересную функцию для печати легенды за пределами области графика, где вы хотите.

Сделайте внешний край в правой части графика.

par(xpd=T, mar=par()$mar+c(0,0,0,5))

Создать график

plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch = 2, lty = 2, type="o")

Добавить легенду и просто использовать функцию локатора (1), как показано ниже. Затем вам нужно просто щелкнуть по желанию после загрузки после сценария.

legend(locator(1),c("group A", "group B"), pch = c(1,2), lty = c(1,2))

Попробуйте

7
ответ дан Vandka 23 August 2018 в 18:37
поделиться

Извините за воскрешение старого потока, но сегодня у меня была та же проблема. Самый простой способ, который я нашел, это следующее:

# Expand right side of clipping rect to make room for the legend
par(xpd=T, mar=par()$mar+c(0,0,0,6))

# Plot graph normally
plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch = 2, lty = 2, type="o")

# Plot legend where you want
legend(3.2,1,c("group A", "group B"), pch = c(1,2), lty = c(1,2))

# Restore default clipping rect
par(mar=c(5, 4, 4, 2) + 0.1)

Найдено здесь: http://www.harding.edu/fmccown/R/

12
ответ дан veiga 23 August 2018 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: