R语言ggplot作柱状图怎么根据横坐标分类填色?(横坐标是有7个浓度,每个浓度有三个数据,希望弄成七种不同的颜色)
您可以使用scale_fill_manual()函数来为不同的横坐标分类指定颜色。下面是一个示例代码,您可以参考:
library(ggplot2)
# 生成示例数据
df <- data.frame(
Concentration = rep(c("Concentration 1", "Concentration 2", "Concentration 3", "Concentration 4", "Concentration 5", "Concentration 6", "Concentration 7"), each = 3),
Value = rnorm(21),
Group = rep(c("Group 1", "Group 2", "Group 3"), times = 7)
)
# 根据横坐标分类填色
ggplot(df, aes(x = Concentration, y = Value, fill = Group)) +
geom_bar(stat = "identity", position = "dodge") +
scale_fill_manual(values = c("red", "green", "blue"))
在上面的代码中,我们使用rep()函数生成了一个示例数据框df,其中包含了Concentration、Value和Group三个变量。然后我们在ggplot()中使用了aes()函数来指定横坐标、纵坐标和填色变量。接下来,我们使用geom_bar()函数来创建柱状图,并指定了stat = "identity"和position = "dodge"参数以保证每个分类下的柱子分开显示。最后,我们使用scale_fill_manual()函数来指定每个分类的填色。在上面的示例代码中,我们将颜色分别设置为红色、绿色和蓝色,您可以根据需要自行更改颜色值。
希望这可以帮助您!
不知道你这个问题是否已经解决, 如果还没有解决的话:使用工具:R语言中的ggplot2工具包, RcolorBrewer颜色工具包
RcolorBrewer包在我之前的博客有介绍,请参考:数据可视化——R语言使用ggplot2工具包绘制精美的条形图(
https://blog.csdn.net/zhouhucheng00/article/details/85801297)下面展示一个我的示例,主要是对各种绘图参数进行了仔细设置,使得图形更美观。示例中的数据为模拟生成的。模拟数据包括两个组别group1和group2,每个组别5个属性(Attribute_1到 Attribute_5),每个组别的每个属性都有相应的横(X_value)纵(Y_value)坐标的值。
代码如下:
rm(list=ls()) #清除工作区
library(ggplot2)
library(RColorBrewer)
#生成模型数据
Group <- c(rep("group1",30),rep("group2",30))
Attribute <- c(rep("Attribute_1",10),rep("Attribute_2",10),rep("Attribute_3",10),
rep("Attribute_1",10),rep("Attribute_2",10),rep("Attribute_3",10))
X_value <- rep(1:10,6)
Y_value <- c(1:10+rnorm(10),1:10+rnorm(10),1:10+rnorm(10),seq(2,21,by=2)+rnorm(10),seq(2,21,by=2)+rnorm(10),seq(2,21,by=2)+rnorm(10))
Data <- data.frame(Group=Group,Attribute=Attribute,X_value=X_value,Y_value=Y_value)
P <- ggplot(Data,aes(x=X_value,y=Y_value))+
facet_wrap(~Attribute,ncol=3,scales ="free_y")+ #依据Attribute进行分面绘制,ncol=3表示分三列显示,scales ="free_y"表示三个分面的Y轴范围不固定,即依据各自的数据自动分配Y轴的显示范围
geom_line(aes(color=Group),size=2)+ #绘制曲线,线的颜色由Group指定,宽度size=2
# coord_cartesian(xlim = c(0, 10))+ #限定X轴的显示范围
scale_color_manual(values = brewer.pal(12, "Paired")[c(3,5)])+ #指定下线的颜色
theme_bw()+ #让刻度线和网格线的颜色更协调一些
theme(axis.text.x=element_text(family="Times",size=14,face="plain"), #x轴刻度的数字属性设置,family指定字体簇,size指定大小,face指定字体样式(如正常/斜体/粗体等)
axis.text.y=element_text(family="Times",size=14,face="plain"), #Y轴刻度的数字属性设置
axis.title.x=element_text(family="Times",size = 16,face="bold.italic"), #x轴的标题字体属性设置
axis.title.y=element_text(family="Times",size = 16,face="bold.italic"), #x轴的标题字体属性设置
strip.text=element_text(family="Times",size = 18,face="italic"), #分面的标题字体属性设置(即对应Attribute_1,Attribute_2,Attribute_3)
panel.border = element_blank(),axis.line = element_line(colour = "black",size=0.6),#背景色置为白色,并将x=0轴和y=0轴加粗显示(size=,0.6)
legend.text=element_text(face="italic", family="Times", colour="black", #设置图例的子标题的字体属性
size=14),
legend.title=element_text(face="italic", family="Times", colour="black", #设置图例的总标题的字体属性
size=16))+
ylab("Value")+xlab("Percentage(%)") #指定x轴和y轴的标题
P
jpeg(file = "results_Value.jpg",width =4500,height = 1500,units = "px",res =300) #结果保存保存为results_Value.jpg,宽高为4500*1500像素,分辨率为300dpi
print(P)
dev.off()
效果图如下:
ggplot2中的facet_wrap()可以依据两个因子变量:变量变量(行列)设置出不同的分面效果,本例中facet_wrap(~Attribute)表示依据Attribute变量进行按列的分面进行显示。
ggplot2中的coord_cartesian()可以限定x和y的数据显示的范围。