R 如何根据显示的标称值定制ggplot条形图上的颜色?

R 如何根据显示的标称值定制ggplot条形图上的颜色?,r,ggplot2,R,Ggplot2,我编写了一个R代码,它提供了如图所示的Ggplot图像。我需要一些关于“是”、“否”和“可能”列的自定义颜色代码的帮助 更准确地说,我想根据“是”、“否”和“可能”的回答来更改每个问题的颜色 我已经尝试了ggplot的基础知识。然而,我无法使颜色比现在更适合定制 library(dplyr) library(ggplot2) theme_set(theme_classic()) library(tidyverse) data <- read.csv('data.csv', header

我编写了一个R代码,它提供了如图所示的Ggplot图像。我需要一些关于“是”、“否”和“可能”列的自定义颜色代码的帮助

更准确地说,我想根据“是”、“否”和“可能”的回答来更改每个问题的颜色

我已经尝试了ggplot的基础知识。然而,我无法使颜色比现在更适合定制

library(dplyr)
library(ggplot2)
theme_set(theme_classic())
library(tidyverse)

data <- read.csv('data.csv', header = T, stringsAsFactors = F)
str(data)

data$stemmed <- factor(data$stemmed, levels=c("No", "Yes", "Maybe"))

data$QuestionNumber <- ordered(data$QuestionNumber, levels = c("Q1", "Q2", "Q3", "Q4", "Q5","Q6","Q7","Q8","Q9","Q10","Q11","Q12", "Q13", "Q14", "Q15", "Q16", "Q17"))

data$QuestionNumber = forcats::fct_rev(factor(data$QuestionNumber))

g <- ggplot(data, aes(QuestionNumber))
g + geom_bar(aes(fill=stemmed), width = 0.5) + 
  theme(axis.text.x = element_text(angle=65, vjust=0.6)) +
  labs(title="Histogram Plot") +  coord_flip()

根据需要,可以使用“缩放填充”手动或“缩放颜色”手动设置颜色。在那里,您可以指定所需颜色的十六进制代码。如果你像我一样命名列表,你也不必猜图例顺序

g + geom_bar(aes(fill=stemmed), width = 0.5) + 
  theme(axis.text.x = element_text(angle=65, vjust=0.6)) +
  labs(title="Histogram Plot") +  coord_flip() +
  scale_fill_manual( values = c("No" = "#ff0000","Yes" = "#00ff00", "Maybe" = "#0000ff") )

你能发布样本数据吗?请使用
dput(数据)
的输出编辑问题。或者,如果它太大,输出为
dput(head(data,20))
,则已添加dput输出。很抱歉,没有提前这么做。对于以后的问题,您应该查看。很少有侧重点。删除不必要的内容,如theme,read_csv比read.csv更快/更好,并用dput输出替换read_csv部分,使您的代码在一条命令中运行感谢Sahir,如果我正确理解您的代码,这将对Yes/No/Maybe的所有值产生全局影响。如果我试图对输出中出现的每个问题的颜色具有更大的灵活性,那么你应该创建一个新的变量,根据你对颜色的任何条件来确定值,然后将这些值设置为颜色,正如SahirYes所示,@see24说你必须创建多个变量以便准确指定何时使用每种颜色。但我也要说,我会发现这真的令人困惑。是的,应该是的
g + geom_bar(aes(fill=stemmed), width = 0.5) + 
  theme(axis.text.x = element_text(angle=65, vjust=0.6)) +
  labs(title="Histogram Plot") +  coord_flip() +
  scale_fill_manual( values = c("No" = "#ff0000","Yes" = "#00ff00", "Maybe" = "#0000ff") )