Аннотирование / маркировка областей на участке - PullRequest
0 голосов
/ 09 мая 2018

У меня есть следующий график:

Graph

График (кроме красных букв) генерируется следующим кодом:

boundary12 <- c(0.01, 0.005, 0.002, 0.001)
boundary23 <- c(0.1, 0.05, 0.02, 0.01)
boundary34 <- c(0.5, 0.6, 0.7, 0.55)

plot(boundary12, type="lines", ylim=c(0,1), xlab="Pollution level", ylab="Probability of event")
lines(boundary23)
lines(boundary34)

Вопросы:

1) Если я создаю много графиков, есть ли способ полуавтоматически вставить красные буквы?

2) Есть ли способ закрасить регионы, например, область 1 синяя, область 2 желтая, область 3 зеленая?

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Аннотации можно размещать автоматически, вычисляя центроиды многоугольника.

plot(boundary12, type="n", ylim=c(0,1), xlab="Pollution level",
  ylab="Probability of event")

poly12 <- data.frame(x=c(1:4, 4:1), y=c(boundary12, rev(boundary23)))
poly23 <- data.frame(x=c(1:4, 4:1), y=c(boundary23, rev(boundary34)))
poly34 <- data.frame(x=c(1:4, 4:1), y=c(boundary34, rep(1, 4)))

polygon(poly12, border="#00000066", col="skyblue")
polygon(poly23, border="#00000066", col="gold")
polygon(poly34, border="#00000066", col="darkolivegreen3")

library(maps)
centroid <- maps:::centroid.polygon

p12 <- centroid(poly12)
p23 <- centroid(poly23)
p34 <- centroid(poly34)

textcoor <- rbind(p12, p23, p34)
textcoor[1, 1] <- textcoor[1 ,1] * 0.8 # to smooch nr1 a bit to the left

text(textcoor, labels=1:3, col="darkblue", cex=1.2)

enter image description here

0 голосов
/ 09 мая 2018

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

boundary12 <- c(0.01, 0.005, 0.002, 0.001)
boundary23 <- c(0.1, 0.05, 0.02, 0.01)
boundary34 <- c(0.5, 0.6, 0.7, 0.55)

plot(boundary12, type="lines", ylim=c(0,1), xlab="Pollution level", ylab="Probability of event")
lines(boundary23)
lines(boundary34)
#create polygons and fill
polygon(x=c(1:4, 4:1), y=c(boundary12, rev(boundary23)), col="blue")
polygon(x=c(1:4, 4:1), y=c(boundary23, rev(boundary34)), col="yellow")
polygon(x=c(1:4, 4,1 ), y=c(boundary34, c(1,1)), col="green")
...