R语言barplot:如何根据列名设置柱状图的颜色?
解决按列名设置柱状图柱子颜色的问题
你的代码问题在于col参数传入的颜色向量长度只有4,而柱子总数是20个,R会自动循环这个短向量,导致颜色按绿、红、黄、蓝交替。要让整列柱子统一颜色,需要生成和柱子数量匹配的颜色向量,每列对应的颜色重复该行数的次数。
修正后的代码:
df <- data.frame(A=c(3,2,1,4,5),B=c(1,6,3,8,4),C=c(2,1,4,8,9), D=c(4,1,2,4,6)) row.names(df)<-c("R1","R2","R3","R4","R5") col.colors <- c(A="green", B="red", C="yellow", D="blue") # 生成匹配每个柱子的颜色向量:每列颜色重复对应行数的次数 color_vec <- rep(col.colors[colnames(df)], each = nrow(df)) # 绘制柱状图,传入正确的颜色向量 barplot(as.vector(as.matrix(df)), names = rownames(df), col=color_vec)
关键说明:
rep(col.colors[colnames(df)], each = nrow(df)):将每列对应的颜色重复5次(因为数据有5行),最终生成20个颜色值,前5个为绿色(对应A列所有元素),接下来5个红色(B列),以此类推。- 原代码中
names = as.matrix(df)会把所有数值作为柱子名称,这显然不合理,改成rownames(df)会用行名作为每组柱子的名称,更符合展示逻辑。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

