从ggplot bar plot中的记号中删除一些文本标记
我正在做一些关于银行业的非违约者和违约者的研究。在这种情况下,我在条形图中绘制它们相对于某个分数的分布。分数越高,信用评级越好 由于默认值的数量与非默认值的数量相比非常有限,因此在同一条形图上绘制默认值和非默认值并不是很有意义,因为您几乎看不到默认值。然后,我仅根据违约者的分数绘制第二个条形图,但与违约者和非违约者的分数的完整条形图的间隔标度相同。然后,我将垂直线添加到第一个条形图中,以指示默认值最高和最低分数的位置。这是为了了解违约者的分布情况与违约者和非违约者的总体分布情况的一致性 x轴很容易变得非常“拥挤”。我想删除一些记号的文本,但不是所有的记号 下面是我用(种子)随机数据替换的代码 第一个条形图是我想要的关于记号标记上的文本的条形图,但是我缺少第二个条形图中的所有记号。在第二个条形图中,显示了“拥挤”状态从ggplot bar plot中的记号中删除一些文本标记,r,ggplot2,R,Ggplot2,我正在做一些关于银行业的非违约者和违约者的研究。在这种情况下,我在条形图中绘制它们相对于某个分数的分布。分数越高,信用评级越好 由于默认值的数量与非默认值的数量相比非常有限,因此在同一条形图上绘制默认值和非默认值并不是很有意义,因为您几乎看不到默认值。然后,我仅根据违约者的分数绘制第二个条形图,但与违约者和非违约者的分数的完整条形图的间隔标度相同。然后,我将垂直线添加到第一个条形图中,以指示默认值最高和最低分数的位置。这是为了了解违约者的分布情况与违约者和非违约者的总体分布情况的一致性 x轴很容
library(ggplot2)
library(ggExtra)
#NDS represents non-defaults and DS defaults on the same scale
#although here being just some random normals for the sake of simplicity.
set.seed(10)
NDS<-rnorm(10000,sd=1)-2
DS<-rnorm(100,sd=2)-5
#Cutoffs are constructed such that intervals of size 0.3 contain all values
#of NDS & DS
minCutoff<--9.3
maxCutoff<-2.1
#Generate the actual interval "bins"
NDS_CUT<-cut(NDS,breaks=seq(minCutoff, maxCutoff, by = 0.3))
DS_CUT<-cut(DS,breaks=seq(minCutoff, maxCutoff, by = 0.3))
#Manually generate where to put the vertical lines for min(DS) and max(DS)
minDS_bar<-levels(cut(NDS,breaks=seq(minCutoff, maxCutoff, by = 0.3)))[1]
maxDS_bar<-levels(cut(NDS,breaks=seq(minCutoff, maxCutoff, by = 0.3)))[32]
#Generate data frame - seems stupid, but makes sense
#when the "real" data is used :-)
NDSdataframe<-cbind(as.data.frame(NDS_CUT),rep(factor("State-1"),length(NDS_CUT)))
colnames(NDSdataframe)<-c("Score","Action")
DSdataframe<-cbind(as.data.frame(DS_CUT),rep(factor("State-2"),length(DS_CUT)))
colnames(DSdataframe)<-c("Score","Action")
fulldataframe<-rbind(NDSdataframe,DSdataframe)
attach(fulldataframe)
#Plot the full distribution of NDS & DS with geom_vlines
#Get the tick texts I want to show
myLevels<-levels(cut(NDS,breaks=seq(roundDownNDS, roundUpNDS, by = 0.3)))
lengthMyLevels<-length(myLevels)
myBreaks<-seq(1,lengthMyLevels,3)
chosenbreaks<-myLevels[myBreaks[1]]
for(i in 2:length(myBreaks))
{
chosenbreaks<-rbind(chosenbreaks,myLevels[myBreaks[i]])
}
#Generate the plot of both NDS & DS
fullplot<-ggplot(fulldataframe, aes(Score, fill=factor(Action,levels=c("State- 2","State-1")))) + geom_bar(position="stack") + opts(axis.text.x = theme_text(angle = 45,size=8)) + opts(legend.position = "none") + xlab("Scoreinterval") + ylab("Antal pr. interval") + geom_vline(aes(xintercept = minDS_bar, colour="red")) + geom_vline(aes(xintercept = maxDS_bar, colour="red")) + scale_x_discrete("test",breaks=chosenbreaks)
#Generate second dataframe for the plot of DS only
DSdataframe2<-cbind(na.omit(as.data.frame(DS_CUT)),rep(factor("Fallit"),length (na.omit(as.data.frame(DS_CUT)))))
colnames(DSdataframe2)<-c("theScore","theAction")
#Calculate max value for the DS
myMax<-max(table(DSdataframe2))+1
attach(DSdataframe2)
#Generate plot for the DS only
subplot<-ggplot(fulldataframe, aes(theScore, fill=factor(theAction))) + geom_bar (position="stack") + opts(axis.text.x = theme_text(angle = 45)) + opts(legend.position = "none") + ylim(0, myMax) + xlab("Scoreinterval") + ylab("Antal pr. interval")
#Using the ggExtra package the to plots are aligned
align.plots(fullplot, subplot)
detach(DSdataframe2)
detach(fulldataframe)
库(ggplot2)
图书馆(ggExtra)
#NDS表示相同刻度上的非默认值和DS默认值
#虽然为了简单起见,这里只是一些随机法线。
种子(10)
NDS如果我理解正确,您可以简单地为每个其他标签指定空文本标签
library(ggplot2)
interleave <- function(x,y){
lx <- length(x)
ly <- length(y)
n <- max(lx,ly)
as.vector(rbind(rep(x, length.out=n), rep(y, length.out=n)))
}
d <- data.frame(x=1:10, y=rnorm(10))
my_breaks <- seq(1,10,by=1)
my_labs <- interleave(seq(1,10,by=2), "")
qplot(x,y,data=d)+
scale_x_continuous(breaks=my_breaks, labels=my_labs)
库(ggplot2)
interleave这是另一个基于@baptiste的版本,它允许简单地选择偶数或奇数,每三分之一,等等
库(ggplot2)
图书馆(gridExtra)
##辅助函数
##定期用填充物替换原材料
在当前ggplot2库(版本2.0.0)中找不到标签填充ggplot2::交错。此函数的替代方法是什么?@user890739您需要三个冒号才能访问交织函数,ggplot2:::interleave
。记住,使用三个冒号的风险由您自己承担,因为这些函数将保留在包的内部;见: