******Rstudio和R要放在同一个目录下!!同一个!!同一个!!!以及可以隔段时间更新下R和Rstudio,否则会哭。
1.调整坐标轴标签顺序:
将x轴或y轴转换为因子(factor)并通过levels指定其顺序,例:
data$Type <- factor(data$Type,levels=c("DSD","WGD","TD","PD","TRD"))
###Type是我数据中的y轴
2.使用RGB颜色设置,当只有颜色没有颜色代码时,我是先使用qq截图的功能获得RGB值,再传入R,或许也可以使用PS直接获取十六进制值,应该会更方便。
c1<-rgb(r=232,g=138,b=140,maxColorValue = 255)
c2<-rgb(r=84,g=142,b=84,maxColorValue = 255)
c3<-rgb(r=251,g=174,b=3,maxColorValue = 255)
c4<-rgb(r=52,g=141,b=231,maxColorValue = 255)
mycolor<-c(c1, c2, c3, c4)
3.设置坐标轴标签字体
使用family参数可以设置字体,windowsFonts()和font_families()可以查看字体:
我想要Times New Roman,所以设置
geom_text(aes(x=value,y=Type,fill=variable,label = value),
family = "serif" ,vjust = 0.5, position = position_dodge(0.9), size = 7, color = 'black')
4.调整坐标轴粗细
使用theme中的axis.line可以对坐标轴的外形进行设置,包括颜色等。
theme(axis.line = element_line(size=1, colour = "black")) #size调整粗细,colour调整颜色
5.在簇状柱形图顶端加数字
使用geom_text进行设置
geom_text(aes(x=value+1500,y=Type,fill=variable,label = value),family = "serif" ,vjust = 0.5, position = position_dodge(0.9), size = 7, color = 'black')
我的柱形图是横着的,所以我将数字的位置+1000和图形分离,这个可以自行调整距离;y和fill都跟图形设置保持一致,同样是“serif”新罗马字体,字号用size调整,颜色为黑色。
完整代码如下:
library(ggplot2)
library(reshape2)
library(ggbreak)
library(showtext)
data1<-read.csv("Bar_Data.csv", sep = ",")
data<-melt(data1,id="Type") ###使用reshape2中的melt糅合数据,使宽数据变为长数据
data$value = as.numeric(data$value) ##改为数字格式,注意 原本value不能有特殊符号如“,”否则会变成NA;
ca<-rgb(r=232,g=138,b=140,maxColorValue = 255)
cb<-rgb(r=84,g=142,b=84,maxColorValue = 255)
cc<-rgb(r=251,g=174,b=3,maxColorValue = 255)
cd<-rgb(r=52,g=141,b=231,maxColorValue = 255)
mycolor<-c(ca, cb, cc, cd)
mycolor1<-rep(mycolor, each=5, time=1) ###因为我的柱形图是簇状柱形图,5类,因此每个颜色复制5份;
windowsFonts() ##查看字体font_families() ##查看字体
data$color <- mycolor1
data$Type <- factor(data$Type,levels=c("DSD","WGD","TD","PD","TRD")) ##调整因子顺序
p1<-ggplot(data = data) +
geom_bar(aes(y=Type,x=value,fill=variable),
stat = "identity", position = position_dodge())+
scale_fill_manual(values=mycolor)+
geom_text(aes(x=value+1500,y=Type,fill=variable,label = value),
family = "serif",vjust = 0.5, position = position_dodge(0.9), size = 7, color = 'black')
p1
p1+scale_x_break(c(22000, 181500),scales="free")+
theme_classic()+
theme(axis.line = element_line(size=1, colour = "black"))+
theme(axis.text = element_text(family = "serif",size=30,color="black"))
图片如下,一些数字不太完整,后续使用PS补全:
5.当数字中有“,”,可使用gsub替换:
a<-c("234,578", "2382,287", "289734,0284")
b<-as.character(a)
c<-gsub(",", "", b)
c
[1] "234578" "2382287" "2897340284"