在 R 中可视化项目跟踪器
Visualizing a project tracker in R
有没有人对如何使用 R 可视化这样的东西有任何想法?
基本上我想制作一个图表来跟踪几个项目中不同工作的完成百分比。完成百分比应该用颜色编码(在示例中,深蓝色表示作业完成 100%,白色表示完成 0% 等)
下面是一些制作数据框的示例代码:
project <- c('Project 1', 'Project 2', 'Project 3', 'Project 4')
job1 <- c(100, 100, NA, 100)
job2 <- c(100, 100, NA, 100)
job3 <- c(100, NA, NA, NA)
job4 <- c(NA, 100, 100, 100)
job5 <- c(50, 100, 100, 100)
job6 <- c(0, 40, 100, 100)
df <- data.frame(project, job1, job2, job3, job4, job5, job6)
我试过甘特图,但由于没有时间数据,所以无法正常工作。我试过条形图,但它没有用,因为一些项目有 NA 或 0 值,后跟 100/50 等,所以工作没有排队。我还尝试了一个热图,但这也没有真正起作用,因为 NA 值和 0 值之间需要有明显的区别,即 NA 表示该工作不适用于该项目,而 0 表示该工作没有还没开始。
如有任何建议,我们将不胜感激!
首先你得把数据改成长格式; tidyr::pivot_longer()
这样做。 ggplot2::geom_tile()
然后可以用来创建热图。
library(tidyr)
library(ggplot2)
df |>
pivot_longer(-project) |>
ggplot(aes(name, project, fill = value)) +
geom_tile()
您可以进一步调整它,以获得更接近您的示例的结果:
library(tidyr)
library(ggplot2)
library(forcats)
library(dplyr)
df |>
pivot_longer(-project) |>
mutate(project = fct_rev(factor(project))) |>
ggplot(aes(name, project, fill = value)) +
geom_tile(color = "grey", size = 3) +
scale_x_discrete(position = "top") +
labs(x ="", y = "")
基于DT(数据table)的解决方案:
library(DT)
options(DT.options = list(pageLength = 5))
df = as.data.frame(cbind(matrix(round(rnorm(50), 3), 10), sample(0:1, 10, TRUE)))
# create 19 breaks and 20 rgb color values ranging from white to red
brks <- quantile(df, probs = seq(.05, .95, .05), na.rm = TRUE)
clrs <- round(seq(255, 40, length.out = length(brks) + 1), 0) %>%
{paste0("rgb(255,", ., ",", ., ")")}
datatable(df) %>% formatStyle(names(df), backgroundColor = styleInterval(brks, clrs))
会给你一个很好的互动 html table 看起来像这样
示例来自,如需了解更多信息,请访问:
有没有人对如何使用 R 可视化这样的东西有任何想法?
基本上我想制作一个图表来跟踪几个项目中不同工作的完成百分比。完成百分比应该用颜色编码(在示例中,深蓝色表示作业完成 100%,白色表示完成 0% 等) 下面是一些制作数据框的示例代码:
project <- c('Project 1', 'Project 2', 'Project 3', 'Project 4')
job1 <- c(100, 100, NA, 100)
job2 <- c(100, 100, NA, 100)
job3 <- c(100, NA, NA, NA)
job4 <- c(NA, 100, 100, 100)
job5 <- c(50, 100, 100, 100)
job6 <- c(0, 40, 100, 100)
df <- data.frame(project, job1, job2, job3, job4, job5, job6)
我试过甘特图,但由于没有时间数据,所以无法正常工作。我试过条形图,但它没有用,因为一些项目有 NA 或 0 值,后跟 100/50 等,所以工作没有排队。我还尝试了一个热图,但这也没有真正起作用,因为 NA 值和 0 值之间需要有明显的区别,即 NA 表示该工作不适用于该项目,而 0 表示该工作没有还没开始。
如有任何建议,我们将不胜感激!
首先你得把数据改成长格式; tidyr::pivot_longer()
这样做。 ggplot2::geom_tile()
然后可以用来创建热图。
library(tidyr)
library(ggplot2)
df |>
pivot_longer(-project) |>
ggplot(aes(name, project, fill = value)) +
geom_tile()
您可以进一步调整它,以获得更接近您的示例的结果:
library(tidyr)
library(ggplot2)
library(forcats)
library(dplyr)
df |>
pivot_longer(-project) |>
mutate(project = fct_rev(factor(project))) |>
ggplot(aes(name, project, fill = value)) +
geom_tile(color = "grey", size = 3) +
scale_x_discrete(position = "top") +
labs(x ="", y = "")
基于DT(数据table)的解决方案:
library(DT)
options(DT.options = list(pageLength = 5))
df = as.data.frame(cbind(matrix(round(rnorm(50), 3), 10), sample(0:1, 10, TRUE)))
# create 19 breaks and 20 rgb color values ranging from white to red
brks <- quantile(df, probs = seq(.05, .95, .05), na.rm = TRUE)
clrs <- round(seq(255, 40, length.out = length(brks) + 1), 0) %>%
{paste0("rgb(255,", ., ",", ., ")")}
datatable(df) %>% formatStyle(names(df), backgroundColor = styleInterval(brks, clrs))
会给你一个很好的互动 html table 看起来像这样
示例来自,如需了解更多信息,请访问: