大家好,我正在绘制雷达图,我想强调一下因子或水平中的两个最高值。在这种情况下,突出显示的是使顶部树值的文本加粗
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)))
一个例子可以像这样
谢谢
答案 0 :(得分:1)
这是如何在雷达图中突出显示特定类别的分步示例。我真的看不到所有这些额外依赖项的意义(ggRadar
等),因为直接使用极坐标在ggplot2
中绘制雷达图非常简单。
首先,让我们生成一些样本数据。根据OP的评论和他基于iris
数据集的示例,我们为每个变量(从Sepal.Length
,Sepal.Width
,Petal.Length
,Petal.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
接下来,我们利用自定义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)
}
我们现在为新的df$face
列创建一个"bold"
列,用于前3个变量(通过减小value
排名),否则创建"plain"
。我们还需要确保按行号对我们类别中的factor
级进行排序(否则name
和face
以后不一定会匹配)。
df <- df %>%
mutate(
rnk = rank(-value),
face = if_else(rnk < 4, "bold", "plain"),
name = factor(name, levels = unique(name)))
我们现在可以绘制情节
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))
请注意,这会发出警告,在此我们选择忽略,因为我们明确使用向量化的element_text
选项。
警告信息:
element_text()
的向量化输入不受官方支持。 结果可能是意外的,或者在ggplot2的将来版本中可能会更改。
答案 1 :(得分:0)
我的建议是确定要突出显示的最高值,并将其放入数据框中。然后使用geom_richtext()
突出显示。