1、使用统计变换summary后的标签值得显示,统计变换后需要用到衍生变量来显示变换后的统计值
df<-data.frame(
x=c(3,1,5,3),
y=c(2,4,6,10),
label=c('a','a','a','b')
)
ggplot(data=df,aes(x=as.character(x),y=y))+geom_bar(fun.y=sum,stat='summary')+
####非常重要,变换后在text里的y的统计值,..y..,..x..
geom_text(stat='summary',fun.y=sum,aes(label=..y..,vjust=-2))
2、bar使用并排显示时,标签显示位置问题。如果不做任何处理,还是使用上边的数据
ggplot(data=df,aes(x=factor(x),y=y,fill=factor(label)))+geom_bar(stat='identity',position='dodge')+
geom_text(aes(label=y,hjust=0.3))
显示
解决方法:
ggplot(data=df,aes(x=factor(x),y=y,fill=factor(label)))+geom_bar(stat='identity',position='dodge')+
geom_text(aes(label=y,hjust=0.3),position = position_dodge(0.9))
3、在原始图上显示最大最小值的问题,
先获取数据源
sql<-c(
' select cust_name_cn,yyyymm as ds,gmv,amplitude,rn
from icbubi.dwa_en_ftrd_mon_cust_gmv_d
where ds=max_pt(\'icbubi.dwa_en_ftrd_mon_cust_gmv_d\') and rn<=100
'
,
'select
x0.cust_name_cn
,x1.ds
,x0.gmv
,x0.rn
from icbubi.dwa_en_ftrd_mon_cust_gmv_d x0 join icbubi.tdl_rank_02 x1
on x0.cust_id=x1.cust_id and x1.ds=x0.yyyymm and x0.ds =20160920
'
,
'select
x0.cust_name_cn
,x0.gmv
,x1.rn
from icbubi.dwa_en_ftrd_cust_d x0 join icbubi.dwa_en_ftrd_mon_cust_gmv_d x1
on x0.cust_name=x1.cust_name_cn
where x0.ds=20160920
and x1.ds=20160920
'
)
d0<-exec_sql(sql[1])
d00<-exec_sql(sql[2])
d000<-exec_sql(sql[3])
3.1 在单个图上显示极值
dx<-d0[as.numeric( d0$rn)==1,]
dxmax<-data.frame(ds<-c(levels(reorder(dx$ds,-dx$gmv))[1]),gmv<-c(max(dx$gmv)))
colnames(dxmax)<-c('ds','gmv')
dxmin<-data.frame(ds<-c(levels(reorder(dx$ds,dx$gmv))[1]),gmv<-c(min(dx$gmv)))
colnames(dxmin)<-c('ds','gmv')
px<-ggplot(data=dx,aes(x=ds,y=gmv,group=1))
px+geom_line(color='red',size=1)+
geom_text(data=dxmax,color='red',aes(x=ds,label=gmv,vjust=-1.5))+
geom_text(data=dxmin,color='green',aes(x=ds,label=gmv,vjust=-1.5))+
geom_point(data=dxmax,color='red',aes(x=ds,y=gmv),size=8)+
geom_point(data=dxmin,color='green',aes(x=ds,y=gmv),size=8)+
annotate('text',x=4,y=25,label=paste0('max value=',dxmax$gmv[1]))+
annotate('text',x=4,y=22,label=paste0('min value=',dxmin$gmv[1]))+
labs(x='日期',y='gmv',title='客户gmv趋势')+
theme(
plot.title=element_text(family="STKaiti",size=15,face='bold')
,axis.title=element_text(family="STKaiti",size=10)
,axis.text.x=element_text(angle = 30,size=8,color='black')
,title=element_text(family="STKaiti",size=5)
,strip.text=element_text(family="STKaiti",size=10,color='black')
)
显示
3.2 在facet下显示
在facet情况下,先要统计最大最小值得数据框(分开),但是没有找到办法能够使用同一个数据框
##开始facet test
dx<-d0[as.numeric( d0$rn)<=20,]
dxmax<-d00[as.numeric( d00$rn)<=20,]
dxtotal<-d000[as.numeric( d000$rn)<=20,]
px<-ggplot(data=dx,aes(x=ds,y=gmv,group=cust_name_cn))
px+geom_line(color='red',size=1)+
facet_wrap(~cust_name_cn,scales='free',ncol=3)+
geom_point(data=dxmax,color='red',aes(x=ds,y=gmv,group=cust_name_cn),size=3)+
geom_text(data=dxmax,color='red',size=3,aes(x=ds,y=gmv,label=round(gmv,1),group=cust_name_cn,vjust=2,hjust=2))+
labs(x='日期',y='gmv',title='客户gmv趋势')+
theme(
plot.title=element_text(family="STKaiti",size=15,face='bold')
,axis.title=element_text(family="STKaiti",size=10)
,axis.text.x=element_text(angle = 30,size=8,color='black')
,title=element_text(family="STKaiti",size=5)
,strip.text=element_text(family="STKaiti",size=10,color='black')
)
显示:
facet情况下有两个问题没有解决:1、使用同一个数据源显示极值、2、和3.1一样使用annotate