R ggplot,当遇到相同的值时,重新排序功能标签的混乱颜色代码

Posted

技术标签:

【中文标题】R ggplot,当遇到相同的值时,重新排序功能标签的混乱颜色代码【英文标题】:R ggplot, reorder function mess color code of labels when confronted to same value 【发布时间】:2021-11-25 17:37:26 【问题描述】:

我对 ggplot 和彩色标签有疑问

#example data:

names<-c("a","albert","aline","d","francis")
value<-c(11,10,9,9,21)
c<-c("black","red","red","black","red")

df<-data.frame(names,value,color)

我正在尝试制作一个非常简单的条形图,带有彩色标签(这里是带有名字的示例标签)。它这样做了:

p<-ggplot(data=df, aes(x=reorder(names,value), y=value)) +
  geom_bar(stat="identity")
p+ coord_flip()+
  theme(axis.text.y = element_text(hjust = 1,colour =  reorder(c, value) ))

plot

“d”得到红色 colot 而不是“aline”。看起来像这样,当遇到相同的值时,reorder 函数按字母倒序对名称进行排序。但是,在订购颜色时,该功能似乎无法正常工作,因为它没有为正确的标签着色。

我是这么认为的,因为如果您将“aline”更改为“eric”(将字母顺序更改为“d”),它会以正确的方式工作。

names<-c("a","albert","eric","d","francis")
value<-c(11,10,9,9,21)
c<-c("black","red","red","black","red")

df<-data.frame(names,value,color)
p<-ggplot(data=df, aes(x=reorder(names,value), y=value)) +
  geom_bar(stat="identity")
p+ coord_flip()+
  theme(axis.text.y = element_text(hjust = 1,colour =  reorder(c, value) ))

我希望这很清楚,如果有人知道如何解决这个问题,我们非常欢迎您

【问题讨论】:

我建议您不要标记对象,因为它们与现有函数具有相同的名称(此处为 cnames)。这可能会在您调用函数时产生一些问题(例如:T &lt;- FALSE isTRUE(T) [1] FALSE,而 TTRUE (isTRUE(T) [1] TRUE) 的缩写) 【参考方案1】:

实际上不支持通过主题元素的矢量化输入来更改标签的颜色。相反,可以使用 ggtext 包用(一些)html 标记来标记文本。

library(ggplot2)
library(ggtext)

names<-c("a","albert","aline","d","francis")
value<-c(11,10,9,9,21)
color<-c("black","red","red","black","red")

df<-data.frame(names,value,color)
df$xlabel <- glue::glue("<span style='color:color'>names</span>")

ggplot(data=df, aes(x=reorder(xlabel,value), y=value)) +
  geom_bar(stat="identity") +
  theme(axis.text.x = element_markdown())

由reprex package 创建于 2021-10-05 (v0.3.0)

【讨论】:

【参考方案2】:

按照@MonJeanJean 的建议,我冒昧地重命名了一些对象。

names <- c("a", "albert", "aline", "d", "francis")
value <- c(11, 10, 9, 9, 21)
colvec <- c("black", "red", "red", "black", "red")

dat <- data.frame(names, value, colvec)

问题来自函数reorder:应用于颜色,只有当每个条有一种颜色时它才会起作用。以下内容适用于您的示例:

ggplot(data = dat, aes(x = reorder(names, value), y = value, fill = I(colvec))) +
  geom_col() + 
  coord_flip() +
  theme(axis.text.y = element_text(colour = colvec[order(value)]))

【讨论】:

以上是关于R ggplot,当遇到相同的值时,重新排序功能标签的混乱颜色代码的主要内容,如果未能解决你的问题,请参考以下文章

按“填充”变量ggplot中的值排序 - 条形图R

在 R 中使用 fct_relevel 和 ggplot 重新排序变量

R:我正在从矩阵制作热图,但 ggplot2 geom_raster 将(数字)值重新排序为字母

按具有相同值的值排序时定义的 SQL 行为

仅当文档中的属性与另一个属性具有相同的值时,才确保它们是唯一的

linux 中 random() 函数相同的值(同时 grof ing)