如何在ggplot2中创建“进度条”类型的图以显示人员所在的百分位数?

use*_*212 5 r ggplot2

我正在尝试生成一个看起来像进度条的一维图,它会根据主体所处的百分比而被填充。

在此处输入图片说明

我将百分位数作为数值,只是不知道如何绘制它以使其看起来像是根据百分位数(0-100)填充的水平条。

Mau*_*ers 6

以下内容可能会帮助您入门。

首先,让我们生成一些最小的样本数据

df <- data.frame(
    Extraversion = 12,
    Intraversion = 40)
Run Code Online (Sandbox Code Playgroud)

然后我们重塑数据并添加总计 100% 的列

library(tidyverse)
df <- df %>%
    gather(key, val) %>%
    mutate(
        key = factor(key, rev(unique(key))),
        Total = 100)
Run Code Online (Sandbox Code Playgroud)

我们定义了一个方便的函数,可以在“进度条”内生成文本

format_value <- function(key, val) {
    qual <- c("very low", "low", "average", "high", "very high", "max")
    sprintf(
        "%s - %ith percentile - %s",
        key, val, qual[findInterval(val, seq(0, 100, by = 20))])
}
Run Code Online (Sandbox Code Playgroud)

现在我们准备好绘制

ggplot(df, aes(key, val)) +
    geom_col(fill = "forestgreen") +
    geom_col(aes(y = Total), alpha = 0.5, colour = "black") +
    geom_text(
        aes(y = 5, label = format_value(key, val)),
        hjust = 0,
        fontface = "bold",
        colour = "white") +
    coord_flip() +
    theme_minimal() +
    theme(
        axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.background = element_blank())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 很好的概括和重现示例图的努力。然而,由于明确的问题要窄得多,我担心对于没有经验的用户来说,仅制作水平部分填充条的基本组件可能会迷失在所有其他细节中。 (3认同)