Создание радарных графиков с использованием одного фрейма данных

У меня есть кадр данных dat, который я использую для создания радиолокационных графиков различных погодных условий (столбцов) на разных сайтах (обозначаемых каждой строкой arc1045, arc1047...) Первые две строки кадра данных добавляются для указания максимального и минимального значений. каждого климатического условия по примеру здесь

        ambient_air_temperature relative_humidy barometric_pressure average_wind_speed particulate_density_2.5 particulate_density_10
1                     85.000000        100.0000            2000.000         160.000000              999.900000             1999.90000
2                    -40.000000          0.0000              10.000           0.000000                0.000000                0.00000
arc1045                9.176667         71.0700            1013.167           4.043333                5.133333               25.16667
arc1047                8.492500         80.9600            1014.000           2.035000                5.600000               25.10000
arc1048                8.477500         76.9875            1012.675           6.842500                6.275000               28.15000
arc1050                8.475000         76.5525            1013.775           6.335000                5.175000               30.20000

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

library(fmsb)

    makePlotURI <- function(expr, width, height, ...) {
      pngFile <- plotPNG(function() { expr }, width = width, height = height, ...)
      on.exit(unlink(pngFile))
      base64 <- httpuv::rawToBase64(readBin(pngFile, raw(1), file.size(pngFile)))
      paste0("data:image/png;base64,", base64)
    }

rep(makePlotURI(radarchart(dat), 300, 300, bg = "transparent"), 4)

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


person z star    schedule 05.11.2020    source источник


Ответы (1)


Это довольно просто сделать, вместо того, чтобы передавать весь фрейм данных в функцию radachart(), просто передайте необходимые данные для одного сайта.

df = data.frame(ambient_air_temp = c(85, -40, 9.176667, 8.492500,  8.477500, 8.475000),
                rel_hum = c(100.0000,0.0000,71.0700, 80.9600, 76.9875,76.5525 ),
                bar_pre = c(2000.000, 10.000, 1013.167, 1014.000, 1012.675, 1013.775),
                ave_ws = c(160,0,4.043333,2.035000,6.842500,6.335000),
                pd2.5 = c(999.9, 0, 5.133333, 5.600000, 6.275000, 5.175000),
                pd10 = c(1999.9, 0, 25.16667, 25.10000, 28.15000, 30.20000))

row.names(df) = c("1","2","arc1045","arc1047","arc1048","arc1050")

library(fmsb)
pltrd = function(idx) radarchart(df[c(1,2,idx),], title = row.names(df)[idx])

Поскольку ваши данные находятся в строках = {3,4,5,6}, вы можете вызвать эту функцию, используя эти значения строк. Обратите внимание, что строки = {1, 2} должны быть минимальными/максимальными значениями для каждой переменной...

pltrd(3)

введите здесь описание изображения

pltrd(4)

введите здесь описание изображения

pltrd(5)

введите здесь описание изображения

person Sudaraka    schedule 05.11.2020