我正在尝试在R中创建一组分组的“进度”条形图。我可以在Excel中执行此操作,但我想知道是否有人在R中完成此任务有任何建议。这是我的图表尝试在R中重现(不完全与我在下面提供的数据一起复制):
正如您所看到的,我基本上正在尝试创建一个图形来显示蓝色填充,因为它接近灰色边界。要在Excel中执行此操作,我将其中一个值放在辅助轴上,我认为ggplot
不允许或不喜欢使用。
到目前为止,我可以使用以下代码在R中创建没有子组(1,2,3,5)的图形:
# Stackoverflow example
size <- 5
x <- data.frame(cat = c('a', 'b', 'c', 'd', 'e'), foo = 'test', bar = runif(size))
y <- data.frame(cat = c('a', 'b', 'c', 'd', 'e'), foo = 'test 2', bar = runif(size))
data <- rbind(x, y)
ggplot() +
geom_bar(data = data[data$foo == 'test',], aes(x = cat, y = bar, fill = foo), stat = 'identity',
position = 'identity', width = 0.5, fill = 'grey60', color = 'grey60') +
geom_bar(data = data[data$foo == 'test 2',], aes(x = cat, y = bar, fill = foo), stat = 'identity',
position = 'identity', width = 0.25, fill = 'royalblue2', color = 'royalblue2') +
coord_flip()
但是,一旦我添加了子组dog
,我无法弄清楚如何按cat
然后dog
来绘制数据。我尝试使用因子和填充来创建子级别,但没有成功。我假设答案将使用stat =
或position =
,但我不熟悉这些命令的所有选项以及这是否是最佳路径。
size <- 5
x <- data.frame(cat = c('a', 'a', 'c', 'd', 'd'), dog = c(1, 2, 5, 4, 5), foo = 'test', bar = runif(size))
y <- data.frame(cat = c('a', 'a', 'c', 'd', 'd'), dog = c(1, 2, 5, 4, 5), foo = 'test 2', bar = runif(size))
data <- rbind(x, y)
ggplot() +
geom_bar(data = data[data$foo == 'test',], aes(x = cat, y = bar, fill = factor(dog)), stat = 'identity',
position = 'identity', width = 0.5, fill = 'grey60', color = 'grey60') +
geom_bar(data = data[data$foo == 'test 2',], aes(x = cat, y = bar, fill = factor(dog)), stat = 'identity',
position = 'identity', width = 0.25, fill = 'royalblue2', color = 'royalblue2') +
coord_flip()
感谢您提供任何帮助,请随时提出任何问题以便澄清!