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) ))
我希望这很清楚,如果有人知道如何解决这个问题,我们非常欢迎您
【问题讨论】:
我建议您不要标记对象,因为它们与现有函数具有相同的名称(此处为c
和 names
)。这可能会在您调用函数时产生一些问题(例如:T <- FALSE isTRUE(T) [1] FALSE
,而 T
是 TRUE
(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,当遇到相同的值时,重新排序功能标签的混乱颜色代码的主要内容,如果未能解决你的问题,请参考以下文章
在 R 中使用 fct_relevel 和 ggplot 重新排序变量
R:我正在从矩阵制作热图,但 ggplot2 geom_raster 将(数字)值重新排序为字母