我想使用ggplot为具有不同颜色条形的列制作条形图。
library(ggplot2)
set.seed(123)
df_a <- data.frame(A1 = sample(c(0,1,2,3,4),10,replace = TRUE))
ggplot(df_a,aes(A1)) +
geom_bar(fill = c("green","blue","red","yellow","black")) +
scale_x_discrete(drop = FALSE)
那很好用: 但是,在这么小的样本中,我不能指望所有可能的数字都存在。这是一个示例,在这种情况下:
set.seed(321)
df_a <- data.frame(A1 = sample(c(0,replace = TRUE))
使用之前的ggplot ...
ggplot(df_a,"black")) +
scale_x_discrete(drop = FALSE)
...引发错误:
Error: Aesthetics must be either length 1 or the same as the data (3): fill
似乎有3种颜色的矢量是可以预期的,因为要填充3个小节?
那是为什么?
是否有一种无需先检查数字即可填充的方法?
并强制预定义数量的小节(即使是空的)?
编辑:
AndS提出了一个解决方案。
set.seed(321)
df_a <- data.frame(A1 = sample(c(0,aes(A1)) +
geom_bar(aes(fill = as.factor(A1))) +
scale_x_discrete(drop = FALSE)
在这种情况下,这将导致4条(包括1条空条)。
但是,要获得所有5条(包括缺失的条),必须标记数据:
set.seed(321)
df_a <- data.frame(A1 = sample(c(0,replace = TRUE))
df_a[[1]] <- ordered(df_a[[1]],levels = c(0:4),labels = c(0,4))
ggplot(df_a,aes(A1)) +
geom_bar(aes(fill = as.factor(A1))) +
scale_x_discrete(drop = FALSE)
有办法避免这种情况吗?喜欢包含采样参数来获取可能的列数吗?
必填栏数:
c_a <- c(0,4)
df_a <- data.frame(A1 = sample(c_a,replace = TRUE))
length(c_a)
edit2: 我找到了适合我的解决方案:
set.seed(321)
c_a <- c(0,levels = c_a,labels = as.character(c_a))
ggplot(df_a,aes(A1)) +
geom_bar(aes(fill = as.factor(A1))) +
scale_x_discrete(drop = FALSE)