R语言ggplot作柱状图怎么根据横坐标分类填色?

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()函数来指定每个分类的填色。在上面的示例代码中,我们将颜色分别设置为红色、绿色和蓝色,您可以根据需要自行更改颜色值。

希望这可以帮助您!

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/1092223
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:数据可视化 -----ggplot2绘制箱线图叠加散点图和连线
  • 除此之外, 这篇博客: 数据可视化——R语言使用ggplot2工具包绘制分面的曲线图中的 概述:R语言使用ggplot2工具包绘制分面的曲线图,即依据数据的不同属性进行分面显示,并详细设置了不同绘图参数,使得绘制的图形更美观。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    使用工具: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的数据显示的范围。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^