R ggplot,当遇到相同的值时,重新排序功能会混淆标签的颜色代码
R ggplot, reorder function mess color code of labels when confronted to same value
我对 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”变成了红色,而不是“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) ))
我希望这很清楚,如果有人知道如何解决这个问题,我们非常欢迎您
根据@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)]))
不真正支持通过主题元素的矢量化输入来更改标签的颜色。相反,可以使用 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 (v0.3.0)
于 2021-10-05 创建
我对 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”变成了红色,而不是“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) ))
我希望这很清楚,如果有人知道如何解决这个问题,我们非常欢迎您
根据@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)]))
不真正支持通过主题元素的矢量化输入来更改标签的颜色。相反,可以使用 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 (v0.3.0)
于 2021-10-05 创建