Plotrix этикетки, регулируя размер / шрифт / положение? - PullRequest
0 голосов
/ 25 марта 2020

Я пытался создать радар риска, используя заговор, а теперь заговорщик, я столкнулся с ограничениями в обоих случаях (в зависимости от моих потребностей, а также с моим набором навыков с R).

С сюжетом у меня было довольно много из тех вещей, которые я хотел, кроме того, что посредник не смог обозначить радиальную ось (Команда A, Команда B и др. c.)

Моя версия этого использования plotrix почти там, где я должен быть и просто нужно какое-то руководство, чтобы перевести меня с линии?

У меня есть 4 вопроса:

  1. Можно ли переместить заголовок влево или вправо?

  2. Радиальная? ярлыки кровоточат в круге диаграммы, что затрудняет их чтение. Можно ли их как-то настроить?

  3. Можно ли изменить шрифт (размер и / или цвет) ярлыков 0 / 30/60/90/180?

  4. Есть ли какой-либо способ добавить текст к нанесенной точке, в моем случае я хотел иметь RiskID в качестве метки

Мой график выглядит так: enter image description here

library(plotrix)

# Build sample dataset
aRiskID      <- c(1, 15, 23, 28, 35)
bRiskDays    <- as.numeric(c(28, 15, 85, 153, 100))
cTheta       <- as.integer(c(20, 80, 130, 240, 320))
dConsequence <- c("Major", "Major", "Minor", "Moderate", "Minor")

myRisks <- data.frame(RiskID = aRiskID, RiskDays = bRiskDays, Theta = cTheta, CurrentConsequence = dConsequence)

myLabels <- c("Team A", "Team B", "Team C", "Team D", "Team E", "Team F", "Team G", "Team H")

# Test different point colours
# initializing vector of colors as NA
colors_plot <- rep(NA,length(myRisks))

# set of conditions listed in the plot
colors_plot[myRisks$CurrentConsequence == "Major"]    <- "black"
colors_plot[myRisks$CurrentConsequence == "Moderate"] <- "red"
colors_plot[myRisks$CurrentConsequence == "Minor"]    <- "green"
# add more conditions as needed

# par(mar=c(2,5,5,5))

# plot the chart
radial.plot(myRisks$RiskDays,
            myRisks$Theta,
            start = pi/2,
            clockwise = FALSE,
           # start=pi/2,clockwise=TRUE,
            show.grid.labels=1,
            rp.type="s",
            main="Risk Radar",
            radial.lim=c(0,30,60,90,180),
            radlab = TRUE,
            point.symbols=17,
            point.col=colors_plot,
            cex = 2,
            cex.axis = 0.25,
            cex.lab = 0.25,
            lwd=par("lwd"),mar=c(2,2,3,2),
           # show.centroid=TRUE,
            labels=myLabels)

Я не знаю, где еще go с этим и поэтому любые советы, использующие plotrix или другое составление графика для достижения конечного результата было бы здорово.

1 Ответ

1 голос
/ 25 марта 2020

Вам следует посмотреть на функции radial.plot.labels и radial.grid

# plot the chart
radial.plot(myRisks$RiskDays,
            myRisks$Theta,
            start = pi/2,
            clockwise = FALSE,
            # start=pi/2,clockwise=TRUE,
            show.grid.labels=1,
            rp.type="s",
            # main="Risk Radar",
            radial.lim=c(0,30,60,90,180),
            radial.labels = '',
            radlab = TRUE,
            point.symbols=17,
            point.col=colors_plot,
            cex = 2,
            cex.axis = 0.25,
            cex.lab = 0.25,
            lwd=par("lwd"),mar=c(2,2,3,2),
            # show.centroid=TRUE,
            labels=NULL, label.pos = pi / 4 * 2:9)
# 1
mtext("Risk Radar", at = par('usr')[1], font = 2)
# 2
at <- c(0,30,60,90,180)
radial.plot.labels(max(at) + 35, pi / 4 * 2:9, labels = myLabels, radial.lim = at)
# 3
radial.plot.labels(at, pi / 2 * 3, labels = at, col = 1:5, cex = 1.5)
# 4
radial.plot.labels(myRisks$RiskDays, myRisks$Theta, start = pi/2,
                   clockwise = FALSE, labels = myRisks$RiskID)

enter image description here

Если вам действительно нужно Перпендикулярные метки, вы можете использовать функцию radial.grid или l oop над метками с отдельными поворотами (srt). Это настоящий позор, что srt не векторизовано в text, это сделало бы это намного проще

th <- pi / 4 * 2:9
sapply(seq_along(th), function(ii) {
  i <- ifelse((th[ii] > pi / 2) & (th[ii] < pi / 2 * 3), pi, 0)
  radial.plot.labels(max(at) + 35, th[ii], labels = myLabels[ii],
                     radial.lim = at, srt = (th[ii] - i) * 180 / pi)
})

enter image description here

Я случайно сделал эту прекрасную снежинку @ randomal__aRt :

th <- pi / 4 * 2:9
sapply(th, function(x)
  radial.plot.labels(max(at) + 35, pi / 4 * 2:9, labels = myLabels,
                     radial.lim = at, srt = x * 180 / pi))

enter image description here

...