R 第一次执行代码时颜色不正确

R 第一次执行代码时颜色不正确,r,colors,R,Colors,我有一个在一页上绘制多个堆叠条形图的代码。我指定了一个调色板,这样每个数据组都与每个图表中的相同颜色相关联。我发现第一张图表中的颜色不正确,但在随后的所有图表中都是正确的。如果我在同一个R会话中重新运行代码,所有图表的颜色都正确。但是,如果退出R并运行代码,第一个图表的颜色也会错误 我的代码相当复杂,所以我把简单的例子放在一起,说明了这个问题。同样,在启动新的R会话后第一次运行代码时,颜色不正确。如果代码在同一R会话中重新运行,则它们是正确的 # Data vector for bar plot

我有一个在一页上绘制多个堆叠条形图的代码。我指定了一个调色板,这样每个数据组都与每个图表中的相同颜色相关联。我发现第一张图表中的颜色不正确,但在随后的所有图表中都是正确的。如果我在同一个R会话中重新运行代码,所有图表的颜色都正确。但是,如果退出R并运行代码,第一个图表的颜色也会错误

我的代码相当复杂,所以我把简单的例子放在一起,说明了这个问题。同样,在启动新的R会话后第一次运行代码时,颜色不正确。如果代码在同一R会话中重新运行,则它们是正确的

# Data vector for bar plot,
#
dvec        <- c(   0,     0,    0,    0,     0,     0,
                    0,     0,    0,    0,     0,     0,
                    0,     0,    0,    0,     0,     0,
                 1.73,     0,    0,    0,     0,     0,
                 4.81,     0,    0, 0.03,  0.03,     0,
                 2.77,     0,    0, 0.42,  1.04,     0,
                 2.84,  0.02,    0, 2.25,  4.21,  0.02,
                 1.32,  0.54, 0.01, 3.44, 10.49,  0.01,
                 0.13,  1.63, 0.02, 4.42, 17.70,  0.03,
                 0.08,  2.49, 0.03, 8.64, 31.07,  0.02,  
                    0,  3.08, 0.05, 9.04, 50.22,  0.01)

# matrix to pass to barplot, 12 columns, 6 rows

smat <- matrix(dvec,nrow=6)                    

# use this color palette and plot the barchart

zoopal <- palette(c("magenta","red","darkred","yellow","cyan","blue"))

barplot(smat,space=0,col=zoopal,axes=FALSE,axisnames=FALSE,
                  xaxs="i",yaxs="i",ann=FALSE)    
条形图的数据向量, #
dvec我可以在当前版本的R和MacOS上复制。这似乎与对
调色板的(不必要的)调用有关。省略那个电话可以解决问题。请注意,这实际上是
?调色板
的预期结果,它说:“一个字符向量给出了有效的调色板。”


在我看来,这确实是
调色板
的一种相当不实用的行为。它显然是被设计成一个系统副作用,而不是返回一个当前有用的值,并且返回的值应该存储为“oldpal”或类似的值。正如帮助页面上所讨论的,调色板的使用应该是更改(后续)数字到颜色的映射,而不是设置,而不是返回颜色列表。

您根本不需要使用
调色板()
barplot
不使用它,您只需指定颜色向量即可。安威,关于解释:


像这样使用时,通过
palete()
总是会有延迟。存储
x谢谢!我显然误解了如何使用调色板,并认为它类似于我使用过的其他语言中的颜色处理例程。如果我理解正确,我可以在条形图调用中指定“col=c(“color1”、“color2”、“color3”、“color4”)。这当然值得知道(我对R比较陌生)。@Fleetboat-yep,只要做
zoocol谢谢。我在调色板文档中遗漏了这一点。
oldcols <- c("red","green")
newcols <- c("yellow","blue")
palette(oldcols)
palette()
#[1] "red"   "green"

runone <- palette(newcols)
runone
#[1] "red"   "green"
palette()
#[1] "yellow" "blue"  

runtwo <- palette(oldcols)
runtwo
#[1] "yellow" "blue"  
palette()
#[1] "red"   "green"