如何自动调整geom_bar图的所需颜色数量?

我想使用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)

那很好用:

如何自动调整geom_bar图的所需颜色数量?

但是,在这么小的样本中,我不能指望所有可能的数字都存在。这是一个示例,在这种情况下:

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)

ma_jing2004 回答:如何自动调整geom_bar图的所需颜色数量?

aes()的{​​{1}}调用之内或之外给它填充参数是有区别的。您收到的错误消息是很不言自明的:

geom_bar
  • 您要么只给出一种对于所有条形都相同的颜色(通常建议您使用这种颜色,如果颜色没有增加情节的含义)。在这种情况下,Error: Aesthetics must be either length 1 or the same as the data (3): fill 就足够了:
geom_bar(fill="a color")
  • 要么给出一个颜色矢量,该颜色矢量必须与所绘制数据的长度相同。这就是@AndS。的注释所建议的:如果将df_a <- data.frame(A1 = sample(c(0,1,2,3,4),10,replace = TRUE)) ggplot(df_a,aes(A1)) + geom_bar(fill = c("steelblue")) 转换为一个因子,则每个值将获得一种唯一的颜色,并且矢量的长度与A1相同。在这种情况下,您必须将颜色封装为图表的美感:A1,因为填充值对应于数据框中的某些数据值(这就是ggplot的美感):
geom_bar(aes(fill = as.factor(A1))
本文链接:https://www.f2er.com/2790632.html

大家都在问