ggRadar突出显示雷达中的最高值

时间:2020-06-19 03:13:16

标签: r ggplot2 radar-chart

大家好,我正在绘制雷达图,我想强调一下因子或水平中的两个最高值。在这种情况下,突出显示的是使顶部树值的文本加粗

require(ggplot2)
require(ggiraph)
require(plyr)
require(reshape2)
require(moonBook)
require(sjmisc)
ggRadar(iris,aes(x=c(Sepal.Length,Sepal.Width,Petal.Length,Petal.Width)))

一个例子可以像这样

Image

谢谢

2 个答案:

答案 0 :(得分:1)

这是如何在雷达图中突出显示特定类别的分步示例。我真的看不到所有这些额外依赖项的意义(ggRadar等),因为直接使用极坐标在ggplot2中绘制雷达图非常简单。

  1. 首先,让我们生成一些样本数据。根据OP的评论和他基于iris数据集的示例,我们为每个变量(从Sepal.LengthSepal.WidthPetal.LengthPetal.Width中选择了最大值);然后将结果存储在长tibble中进行绘图。

    library(purrr)
    library(dplyr)
    library(tidyr)
    df <- iris %>% select(-Species) %>% map_df(max) %>% pivot_longer(everything())
    df
    #    # A tibble: 4 x 2
    #  name         value
    #  <chr>        <dbl>
    #1 Sepal.Length   7.9
    #2 Sepal.Width    4.4
    #3 Petal.Length   6.9
    #4 Petal.Width    2.5
    
  2. 接下来,我们利用自定义coord_radar函数(由于this post),该函数以coord_polar为中心,并确保极坐标图中的多边形线是直的线而不是弧形。

    coord_radar <- function (theta = "x", start = - pi / 2, direction = 1) {
        theta <- match.arg(theta, c("x", "y"))
        r <- if (theta == "x") "y" else "x"
        ggproto(
            "CordRadar", CoordPolar, theta = theta, r = r, start = start,
            direction = sign(direction),
            is_linear = function(coord) TRUE)
    }
    
  3. 我们现在为新的df$face列创建一个"bold"列,用于前3个变量(通过减小value排名),否则创建"plain"。我们还需要确保按行号对我们类别中的factor级进行排序(否则nameface以后不一定会匹配)。

    df <- df %>%
        mutate(
            rnk = rank(-value),
            face = if_else(rnk < 4, "bold", "plain"),
            name = factor(name, levels = unique(name)))
    
  4. 我们现在可以绘制情节

    library(ggplot2)
    ggplot(df, aes(name, value, group = 1)) +
        geom_polygon(fill = "red", colour = "red", alpha = 0.4) +
        geom_point(colour = "red") +
        coord_radar() +
        ylim(0, 10) +
        theme(axis.text.x = element_text(face = df$face))
    

    enter image description here

    请注意,这会发出警告,在此我们选择忽略,因为我们明确使用向量化的element_text选项。

    警告信息: element_text()的向量化输入不受官方支持。 结果可能是意外的,或者在ggplot2的将来版本中可能会更改。

答案 1 :(得分:0)

我的建议是确定要突出显示的最高值,并将其放入数据框中。然后使用geom_richtext()突出显示。

相关问题