Note that there are some explanatory texts on larger screens.

plurals
  1. PORemove a few text marks from tick marks in ggplot bar plot
    primarykey
    data
    text
    <p>I am doing some research on non-defaulters and defaulters with regards to banking. In that context I am plotting their distributions relative to some score in a bar plot. The higher the score, the better the credit rating. </p> <p>Since the number of defaults is very limited compared to the number of non-defaults plotting the defaults and non-defaults on the same bar plot is not very giving as you hardly can see the defaults. I then make a second bar plot based on the defaulters' scores only, but on the same interval scale as the full bar plot of both the scores of the defaulters and non-defaulters. I then add vertical lines to the first bar plot indicating where the highest and the lowest defaulter score is located. That is to get a view of where the distribution of the defaulters fit into that of the overall distribution of both defaulters and non-defaulters. </p> <p>The x-axis easily gets very "crowded". I would like to remove some of the text for the ticks, but not all the tick marks.</p> <p>Below is the code I am using replaced with (seeded) random data instead.</p> <p>The first bar plot is what I would like to have with regards to text on the tick marks, but I am missing all the ticks I have in the second bar plot. In the second bar plot the "crowded"-ness is shown!</p> <pre><code>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&lt;-rnorm(10000,sd=1)-2 DS&lt;-rnorm(100,sd=2)-5 #Cutoffs are constructed such that intervals of size 0.3 contain all values #of NDS &amp; DS minCutoff&lt;--9.3 maxCutoff&lt;-2.1 #Generate the actual interval "bins" NDS_CUT&lt;-cut(NDS,breaks=seq(minCutoff, maxCutoff, by = 0.3)) DS_CUT&lt;-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&lt;-levels(cut(NDS,breaks=seq(minCutoff, maxCutoff, by = 0.3)))[1] maxDS_bar&lt;-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&lt;-cbind(as.data.frame(NDS_CUT),rep(factor("State-1"),length(NDS_CUT))) colnames(NDSdataframe)&lt;-c("Score","Action") DSdataframe&lt;-cbind(as.data.frame(DS_CUT),rep(factor("State-2"),length(DS_CUT))) colnames(DSdataframe)&lt;-c("Score","Action") fulldataframe&lt;-rbind(NDSdataframe,DSdataframe) attach(fulldataframe) #Plot the full distribution of NDS &amp; DS with geom_vlines #Get the tick texts I want to show myLevels&lt;-levels(cut(NDS,breaks=seq(roundDownNDS, roundUpNDS, by = 0.3))) lengthMyLevels&lt;-length(myLevels) myBreaks&lt;-seq(1,lengthMyLevels,3) chosenbreaks&lt;-myLevels[myBreaks[1]] for(i in 2:length(myBreaks)) { chosenbreaks&lt;-rbind(chosenbreaks,myLevels[myBreaks[i]]) } #Generate the plot of both NDS &amp; DS fullplot&lt;-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&lt;-cbind(na.omit(as.data.frame(DS_CUT)),rep(factor("Fallit"),length (na.omit(as.data.frame(DS_CUT))))) colnames(DSdataframe2)&lt;-c("theScore","theAction") #Calculate max value for the DS myMax&lt;-max(table(DSdataframe2))+1 attach(DSdataframe2) #Generate plot for the DS only subplot&lt;-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) </code></pre> <p>Any help is very much appreciated!</p> <p>Thanks,</p> <p>Christian</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload