r - R:在 ggplot 中分配手动颜色将自身限制为几种颜色
问题描述
我想使用 ggplot2 为每组的条形图分配特定的颜色。
kombi2 <- data.frame(Klimatop1,Nutzung=rep(Innenstadtdf[,1],6),GV_Anteil1,Farben=rep(Nutzfarben,6))
p <- ggplot(data=kombi2,aes(x=Klimatop1,y=GV_Anteil1,fill=Nutzung))+
geom_bar(stat="identity")
p+scale_fill_manual(values=kombi2$Farben)
采用默认分配时,
我得到了一个很宽的颜色范围。但是我需要手动分配基于组的颜色。当我使用scale_fill_manual()
相应的向量执行此操作时,我在 plot 中只得到 8 种不同的颜色,这对于我的 22 个不同的组来说是不够的。这是一些示例代码,它给出了与上述代码相同的颜色问题:
Nutzfarben1 <- c("#333333","#FFCC00","#FF6666","#33FFFF","#FFFFFF","#00FF33","#99CC00","#FF9933","#66CC00","#CC0033","#FFFF00","#666600","#999999","#99FF00","#0033CC","#CCCCCC","#333300","#CC9900","#99CC99","#006633","#FFCCCC","#993366")
Nutzfarben <- c("dimgray","darkorange","deeppink","aquamarine","floralwhite","springgreen4","green3","lemonchiffon2","moccasin","firebrick3","goldenrod1","palegreen4","lightslategray","lawngreen","cyan4","azure3","darkolivegreen","lightsalmon4","mediumseagreen","forestgreen","bisque","darkorchid")
df <- data.frame(one=rep(c(1:22),6),two=rep(c("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v"),6),three=1:132, Farben=rep(Nutzfarben1,6))
g <- ggplot(data=df,aes(x=one,y=three,fill=two))+
geom_bar(stat="identity")
g+scale_fill_manual(values=df$Farben)
我已经尝试使用一些组成的数据,我还尝试将数据分配为十六进制 rgb 向量,以及 r 颜色名称,并且未加载除 ggplot2 之外的所有包。你有别的想法吗?我错过了设置值吗?我需要另一个包裹吗?我的问题可能在 R 之外吗?我将 R 版本 3.5.1 与 RStudio 1.1.453 一起使用
解决方案
改变调色板就palette(Nutzfarben)
可以了!为了完整性:使用简单向量 inp+scale_fill_manual(values=Nutzfarben)
而不是引用包含每行颜色分配的列也很重要p+scale_fill_manual(values=Farben)
。所以代码必须改成这样:
Nutzfarben <- c("dimgray","darkorange","deeppink","aquamarine","floralwhite","springgreen4","green3","lemonchiffon2","moccasin","firebrick3","goldenrod1","palegreen4","lightslategray","lawngreen","cyan4","azure3","darkolivegreen","lightsalmon4","mediumseagreen","forestgreen","bisque","darkorchid")
palette(Nutzfarben)
kombi2 <- data.frame(Klimatop=Klimatop1,Nutzung=rep(Innenstadtdf[,1],6),GV_Anteil=GV_Anteil1,Farben=rep(Nutzfarben,6))
p <- ggplot(data=kombi2,aes(x=Klimatop,y=GV_Anteil,fill=Nutzung))+
geom_bar(stat="identity",colour="white")
p+scale_fill_manual(values=Nutzfarben)
没有必要使用命名向量。感谢@aosmith 提供palette()
提示。
推荐阅读
- python - 从列表中的字符串数字更改为 int 并将它们相加。数字字符串由它自己的字符串中的字符分隔,其中数字
- python - Python unittest 测试用例
- python - 为什么我在 vscode 中运行 pytorch 时遇到问题?
- java - SQL Server 在尝试更新时执行批处理速度很慢
- google-deployment-manager - 如何在 Cloud Deployment Manager 中指定阻止项目范围的 SSH 密钥?
- python - 如何在 Heroku 上使用音频段库?
- ios - 在 iOS 15 中,在 UILabel 中使用 unicode 字符时,软连字符无法正常工作
- reactjs - useLayoutEffect里面的addEventListener:多次添加事件监听
- reactjs - 使用带有 NextJS 的 getServerSideProps 生成多个页面
- flutter - Flutter android键盘关闭不会重置屏幕滚动