Can data points be marked in strips?

I cannot find a way to assign datapoints to stripchart . Using the text function, as suggested in this question , breaks when points are folded or trembling.

I have numerical data in 4 categories (columns 2-5) and I would like to mark each datapoint with initials (column 1).

This is my data and the code I tried:

 initials,total,interest,slides,presentation CU,1.6,1.7,1.5,1.6 DS,1.6,1.7,1.5,1.7 VA,1.7,1.5,1.5,2.1 MB,2.3,2.0,2.1,2.9 HS,1.2,1.3,1.4,1.0 LS,1.8,1.8,1.5,2.0 stripchart(CTscores[-1], method = "stack", las = 1) text(CTscores$total + 0.05, 1, labels = CTscores$name, cex = 0.5) 

The plot below is the best I've managed so far. As you can see, data point labels overlap. In addition, the longest y mark is disabled.

enter image description here

Is it possible to mark points on a strip chart? Or do I need to display this with another command in order to enable marking?

+1
source share
2 answers

Here's an alternative that allows you to add color to the strip chart to identify the initials:

 library(ggplot2) library(reshape2) library(gtable) library(gridExtra) # Gets default ggplot colors gg_color_hue <- function(n) { hues = seq(15, 375, length=n+1) hcl(h=hues, l=65, c=100)[1:n]} # Transform to long format CTscores.m = melt(CTscores, id.var="initials") # Create a vector of colors with keys for the initials colvals <- gg_color_hue(nrow(CTscores)) names(colvals) <- sort(CTscores$initials) # This color vector needs to be the same length as the melted dataset cols <- rep(colvals,ncol(CTscores)-1) # Create a basic plot that will have a legend with the desired attributes g1 <- ggplot(CTscores.m, aes(x=variable, y=value, fill=initials)) + geom_dotplot(color=NA)+theme_bw()+coord_flip()+scale_fill_manual(values=colvals) # Extract the legend fill.legend <- gtable_filter(ggplot_gtable(ggplot_build(g1)), "guide-box") legGrob <- grobTree(fill.legend) # Create the plot we want without the legend g2 <- ggplot(CTscores.m, aes(x=variable, y=value)) + geom_dotplot(binaxis="y", stackdir="up",binwidth=0.03,fill=cols,color=NA) + theme_bw()+coord_flip() # Create the plot with the legend grid.arrange(g2, legGrob, ncol=2, widths=c(10, 1)) 

enter image description here

0
source

How to use labels as point markers rather than single labels? Here is an example using ggplot2 rather than basic graphics.

To avoid coincidence, we directly set the vertical offset for repeated values, and do not leave it as a random jitter. To do this, we need to assign numerical values โ€‹โ€‹of y (so that we can add an offset), and then replace the labels of the numerical axis with the corresponding text labels.

 library(ggplot2) library(reshape2) library(dplyr) # Convert data from "wide" to "long" format CTscores.m = melt(CTscores, id.var="initials") # Create an offset that we'll use for vertically separating the repeated values CTscores.m = CTscores.m %>% group_by(variable, value) %>% mutate(repeats = ifelse(n()>1, 1,0), offset = ifelse(repeats==0, 0, seq(-n()/25, n()/25, length.out=n()))) ggplot(CTscores.m, aes(label=initials, x=value, y=as.numeric(variable) + offset, color=initials)) + geom_text() + scale_y_continuous(labels=sort(unique(CTscores.m$variable))) + theme_bw(base_size=15) + labs(y="", x="") + guides(color=FALSE) 

enter image description here

For completeness, here's how to create a graph with jitter for repeating values, rather than with a specific offset:

 # Convert data from "wide" to "long" format CTscores.m = melt(CTscores, id.var="initials") # Mark repeated values (so we can selectively jitter them later) CTscores.m = CTscores.m %>% group_by(variable, value) %>% mutate(repeats = ifelse(n()>1, 1,0)) # Jitter only the points with repeated values set.seed(13) ggplot() + geom_text(data=CTscores.m[CTscores.m$repeats==1,], aes(label=initials, x=value, y=variable, color=initials), position=position_jitter(height=0.25, width=0)) + geom_text(data=CTscores.m[CTscores.m$repeats==0,], aes(label=initials, x=value, y=variable, color=initials)) + theme_bw(base_size=15) + guides(color=FALSE) 

enter image description here

+3
source

Source: https://habr.com/ru/post/1237365/


All Articles