Dear David, Thank you for you quite response. My apologies for not giving some sample data - this is due to AVG. *But this minisample should not be a problem (all in Dutch)*: teamq # A tibble: 4 x 2 `Ik volg bijscholing om mijn opleiders-kwaliteiten op peil te houden` <chr> 1 de situatie in hoge mate van toepassing is voor u of uw supervisorengroep 2 de situatie in zeer hoge mate van toepassing is voor u of uw supervisorengroep 3 de situatie in zeer hoge mate van toepassing is voor u of uw supervisorengroep 4 de situatie in geringe mate van toepassing is voor u of uw supervisorengroep `Ik weet precies wat de ?modernisering van de opleiding? inhoudt` <chr> 1 de situatie in hoge mate van toepassing is voor u of uw supervisorengroep 2 de situatie in zeer hoge mate van toepassing is voor u of uw supervisorengroep 3 de situatie in zeer hoge mate van toepassing is voor u of uw supervisorengroep 4 de situatie in geringe mate van toepassing is voor u of uw supervisorengroep As you see the likert items are in words, and I should change them in nummeric - Am I correct? *To do this, I tried (see further below):* plyr rename() ; I receive the message it should be a factor or character dplyr recode() ; same message mapvalues() ; it should be atomic, so I used as.atomic(teamq) but then I receive the nummers a strings. *The syntaxes* require(plyr) example2 <- revalue(teamq, c("de situatie in zeer geringe mate van toepassing is voor u of uw supervisorengroep"= "1", "de situatie in geringe mate van toepassing is voor u of uw supervisorengroep"= "2", "de situatie enigszins van toepassing is voor u of uw supervisorengroep"= "3", "de situatie in hoge mate van toepassing is voor u of uw supervisorengroep"= "4", "de situatie in zeer hoge mate van toepassing is voor u of uw supervisorengroep"= "5")) require(dplyr) example2 <- recode(teamq, c("de situatie in zeer geringe mate van toepassing is voor u of uw supervisorengroep"= "1", "de situatie in geringe mate van toepassing is voor u of uw supervisorengroep"= "2", "de situatie enigszins van toepassing is voor u of uw supervisorengroep"= "3", "de situatie in hoge mate van toepassing is voor u of uw supervisorengroep"= "4", "de situatie in zeer hoge mate van toepassing is voor u of uw supervisorengroep"= "5")) mapvalues(as.matrix(teamq), from = c("de situatie in zeer geringe mate van toepassing is voor u of uw supervisorengroep", "de situatie in geringe mate van toepassing is voor u of uw supervisorengroep", "de situatie enigszins van toepassing is voor u of uw supervisorengroep", "de situatie in hoge mate van toepassing is voor u of uw supervisorengroep", "de situatie in zeer hoge mate van toepassing is voor u of uw supervisorengroep"), to = c(1,2,3,4,5)) What should I do? Thank you in advance, Roberto Op ma 22 okt. 2018 om 17:13 schreef David L Carlson <dcarlson at tamu.edu>:> Your example is not reproducible since you did not give us some sample > data. I suspect that your data frame consists of columns that represent > questions and rows that represent individuals who answered the questions. > First create a simple example: > > set.seed(42) > teamq <- data.frame(V1=sample(c(1, 2, 4, 5), 25, replace = TRUE), > V2=sample(c(1, 2, 3, 4, 5), 25, replace=TRUE), > V3=sample(c(2, 3, 4, 5), 25, replace=TRUE)) > > Notice that this data frame ONLY contains questions (and only 3 > questions). Here are 2 ways to get what you want. The first one stacks the > data: > > teamq.stack <- stack(teamq) > str(teamq.stack) > counts <- table(teamq.stack) > str(counts) > > The second one converts each column to a factor with levels 1 - 5: > > teamq2 <- data.frame(lapply(teamq, factor, levels=1:5)) > str(teamq2) > counts <- sapply(teamq2, table) > str(counts) > > Now make the plots: > > cols <- c("yellow","sandybrown","orange", "darkolivegreen","green") > barplot(counts[, 1], horiz=TRUE, col=cols, legend=TRUE) > barplot(counts[, 2], horiz=TRUE, col=cols, legend=TRUE) > barplot(counts[, 3], horiz=TRUE, col=cols, legend=TRUE) > > You will need to adjust the xlim= argument so that the legend does not > print on top of the bars. > > ---------------------------------------- > David L Carlson > Department of Anthropology > Texas A&M University > College Station, TX 77843-4352 > > > -----Original Message----- > From: R-help <r-help-bounces at r-project.org> On Behalf Of P. Roberto Bakker > Sent: Monday, October 22, 2018 9:04 AM > To: R mailing list <r-help at r-project.org> > Subject: [R] Different stack barplots - same color legends > > Hi, > > I want to make barplots from different questions (columns) in one > data.frame. > Each question has the same 5 likert items. > Now the problem: in some questions all items are answered; in other less. > From the syntax below I get nice stack barplots - *but the legend colors do > not* refer to the same likert-item, which I understand - the colors go in > sequence along the table. > Question: how can I write a syntax that each likert-item has the same > legend color? > Thank you in advance, > > Roberto > > SYNTAX: > counts19 <- table(teamq[,19]) > counts20 <- table(teamq[,20]) > barplot(as.matrix(counts19), horiz = T, > col=c("yellow","sandybrown","orange", "darkolivegreen","green"), > legend=T) > barplot(as.matrix(counts20), horiz = T, > col=c("yellow","sandybrown","orange", "darkolivegreen","green"), > legend=T) > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]
Richard M. Heiberger
2018-Oct-22 18:10 UTC
[R] Different stack barplots - same color legends
Try the likert function in install.packages("HH) ## if necessary library(HH) Then using David Carlson's example teamq likert(teamq) Your example in the 1:30PM (Eastern Daylight Time) doesn't work. Error in revalue(teamq, c(`de situatie in zeer geringe mate van toepassing is\nvoor u of uw supervisorengroep` = "1", : x is not a factor or a character vector. There are many examples in ?likert Rich On Mon, Oct 22, 2018 at 1:30 PM, P. Roberto Bakker <robertobakker at gmail.com> wrote:> Dear David, > > Thank you for you quite response. > My apologies for not giving some sample data - this is due to AVG. > *But this minisample should not be a problem (all in Dutch)*: > teamq > # A tibble: 4 x 2 > `Ik volg bijscholing om mijn opleiders-kwaliteiten op peil te houden` > > <chr> > > 1 de situatie in hoge mate van toepassing is voor u of uw > supervisorengroep > 2 de situatie in zeer hoge mate van toepassing is voor u of uw > supervisorengroep > 3 de situatie in zeer hoge mate van toepassing is voor u of uw > supervisorengroep > 4 de situatie in geringe mate van toepassing is voor u of uw > supervisorengroep > `Ik weet precies wat de ?modernisering van de opleiding? inhoudt` > > <chr> > > 1 de situatie in hoge mate van toepassing is voor u of uw > supervisorengroep > 2 de situatie in zeer hoge mate van toepassing is voor u of uw > supervisorengroep > 3 de situatie in zeer hoge mate van toepassing is voor u of uw > supervisorengroep > 4 de situatie in geringe mate van toepassing is voor u of uw > supervisorengroep > > As you see the likert items are in words, and I should change them in > nummeric - Am I correct? > > *To do this, I tried (see further below):* > plyr rename() ; I receive the message it should be a factor or character > dplyr recode() ; same message > mapvalues() ; it should be atomic, so I used as.atomic(teamq) but then I > receive the nummers a strings. > > *The syntaxes* > require(plyr) > example2 <- revalue(teamq, > c("de situatie in zeer geringe mate van toepassing is > voor u of uw supervisorengroep"= "1", > "de situatie in geringe mate van toepassing is voor > u of uw supervisorengroep"= "2", > "de situatie enigszins van toepassing is voor u of > uw supervisorengroep"= "3", > "de situatie in hoge mate van toepassing is voor u > of uw supervisorengroep"= "4", > "de situatie in zeer hoge mate van toepassing is > voor u of uw supervisorengroep"= "5")) > > require(dplyr) > example2 <- recode(teamq, > c("de situatie in zeer geringe mate van toepassing is > voor u of uw supervisorengroep"= "1", > "de situatie in geringe mate van toepassing is voor u > of uw supervisorengroep"= "2", > "de situatie enigszins van toepassing is voor u of uw > supervisorengroep"= "3", > "de situatie in hoge mate van toepassing is voor u of > uw supervisorengroep"= "4", > "de situatie in zeer hoge mate van toepassing is voor > u of uw supervisorengroep"= "5")) > > mapvalues(as.matrix(teamq), from = c("de situatie in zeer geringe mate van > toepassing is voor u of uw supervisorengroep", > "de situatie in geringe mate van toepassing is voor > u of uw supervisorengroep", > "de situatie enigszins van toepassing is voor u of > uw supervisorengroep", > "de situatie in hoge mate van toepassing is voor u > of uw supervisorengroep", > "de situatie in zeer hoge mate van toepassing is > voor u of uw supervisorengroep"), > to = c(1,2,3,4,5)) > > What should I do? > Thank you in advance, Roberto > > Op ma 22 okt. 2018 om 17:13 schreef David L Carlson <dcarlson at tamu.edu>: > >> Your example is not reproducible since you did not give us some sample >> data. I suspect that your data frame consists of columns that represent >> questions and rows that represent individuals who answered the questions. >> First create a simple example: >> >> set.seed(42) >> teamq <- data.frame(V1=sample(c(1, 2, 4, 5), 25, replace = TRUE), >> V2=sample(c(1, 2, 3, 4, 5), 25, replace=TRUE), >> V3=sample(c(2, 3, 4, 5), 25, replace=TRUE)) >> >> Notice that this data frame ONLY contains questions (and only 3 >> questions). Here are 2 ways to get what you want. The first one stacks the >> data: >> >> teamq.stack <- stack(teamq) >> str(teamq.stack) >> counts <- table(teamq.stack) >> str(counts) >> >> The second one converts each column to a factor with levels 1 - 5: >> >> teamq2 <- data.frame(lapply(teamq, factor, levels=1:5)) >> str(teamq2) >> counts <- sapply(teamq2, table) >> str(counts) >> >> Now make the plots: >> >> cols <- c("yellow","sandybrown","orange", "darkolivegreen","green") >> barplot(counts[, 1], horiz=TRUE, col=cols, legend=TRUE) >> barplot(counts[, 2], horiz=TRUE, col=cols, legend=TRUE) >> barplot(counts[, 3], horiz=TRUE, col=cols, legend=TRUE) >> >> You will need to adjust the xlim= argument so that the legend does not >> print on top of the bars. >> >> ---------------------------------------- >> David L Carlson >> Department of Anthropology >> Texas A&M University >> College Station, TX 77843-4352 >> >> >> -----Original Message----- >> From: R-help <r-help-bounces at r-project.org> On Behalf Of P. Roberto Bakker >> Sent: Monday, October 22, 2018 9:04 AM >> To: R mailing list <r-help at r-project.org> >> Subject: [R] Different stack barplots - same color legends >> >> Hi, >> >> I want to make barplots from different questions (columns) in one >> data.frame. >> Each question has the same 5 likert items. >> Now the problem: in some questions all items are answered; in other less. >> From the syntax below I get nice stack barplots - *but the legend colors do >> not* refer to the same likert-item, which I understand - the colors go in >> sequence along the table. >> Question: how can I write a syntax that each likert-item has the same >> legend color? >> Thank you in advance, >> >> Roberto >> >> SYNTAX: >> counts19 <- table(teamq[,19]) >> counts20 <- table(teamq[,20]) >> barplot(as.matrix(counts19), horiz = T, >> col=c("yellow","sandybrown","orange", "darkolivegreen","green"), >> legend=T) >> barplot(as.matrix(counts20), horiz = T, >> col=c("yellow","sandybrown","orange", "darkolivegreen","green"), >> legend=T) >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
Thank you for you information. Package 'HH' is interesting. Now I find another problem when using 'likert(teamq)' I get an error message:> likert(teamq)Error in dimnames(x) <- `*vtmp*` : length of 'dimnames' [2] not equal to array extent I checked:> dim(teamq)[1] 4 2> ncol(teamq)[1] 2 So it should be good. I used 'make.names' , in case the spaces in the variable names would be a problem. Same error. What could I do? Best and thank you in advance. Roberto Op ma 22 okt. 2018 om 20:10 schreef Richard M. Heiberger <rmh at temple.edu>:> Try the likert function in > install.packages("HH) ## if necessary > library(HH) > > Then using David Carlson's example teamq > likert(teamq) > > Your example in the 1:30PM (Eastern Daylight Time) doesn't work. > Error in revalue(teamq, c(`de situatie in zeer geringe mate van > toepassing is\nvoor u of uw supervisorengroep` = "1", : > x is not a factor or a character vector. > > There are many examples in > ?likert > > Rich > > > On Mon, Oct 22, 2018 at 1:30 PM, P. Roberto Bakker > <robertobakker at gmail.com> wrote: > > Dear David, > > > > Thank you for you quite response. > > My apologies for not giving some sample data - this is due to AVG. > > *But this minisample should not be a problem (all in Dutch)*: > > teamq > > # A tibble: 4 x 2 > > `Ik volg bijscholing om mijn opleiders-kwaliteiten op peil te houden` > > > > <chr> > > > > 1 de situatie in hoge mate van toepassing is voor u of uw > > supervisorengroep > > 2 de situatie in zeer hoge mate van toepassing is voor u of uw > > supervisorengroep > > 3 de situatie in zeer hoge mate van toepassing is voor u of uw > > supervisorengroep > > 4 de situatie in geringe mate van toepassing is voor u of uw > > supervisorengroep > > `Ik weet precies wat de ?modernisering van de opleiding? inhoudt` > > > > <chr> > > > > 1 de situatie in hoge mate van toepassing is voor u of uw > > supervisorengroep > > 2 de situatie in zeer hoge mate van toepassing is voor u of uw > > supervisorengroep > > 3 de situatie in zeer hoge mate van toepassing is voor u of uw > > supervisorengroep > > 4 de situatie in geringe mate van toepassing is voor u of uw > > supervisorengroep > > > > As you see the likert items are in words, and I should change them in > > nummeric - Am I correct? > > > > *To do this, I tried (see further below):* > > plyr rename() ; I receive the message it should be a factor or character > > dplyr recode() ; same message > > mapvalues() ; it should be atomic, so I used as.atomic(teamq) but then I > > receive the nummers a strings. > > > > *The syntaxes* > > require(plyr) > > example2 <- revalue(teamq, > > c("de situatie in zeer geringe mate van toepassing is > > voor u of uw supervisorengroep"= "1", > > "de situatie in geringe mate van toepassing is > voor > > u of uw supervisorengroep"= "2", > > "de situatie enigszins van toepassing is voor u > of > > uw supervisorengroep"= "3", > > "de situatie in hoge mate van toepassing is voor > u > > of uw supervisorengroep"= "4", > > "de situatie in zeer hoge mate van toepassing is > > voor u of uw supervisorengroep"= "5")) > > > > require(dplyr) > > example2 <- recode(teamq, > > c("de situatie in zeer geringe mate van toepassing is > > voor u of uw supervisorengroep"= "1", > > "de situatie in geringe mate van toepassing is > voor u > > of uw supervisorengroep"= "2", > > "de situatie enigszins van toepassing is voor u of > uw > > supervisorengroep"= "3", > > "de situatie in hoge mate van toepassing is voor u > of > > uw supervisorengroep"= "4", > > "de situatie in zeer hoge mate van toepassing is > voor > > u of uw supervisorengroep"= "5")) > > > > mapvalues(as.matrix(teamq), from = c("de situatie in zeer geringe mate > van > > toepassing is voor u of uw supervisorengroep", > > "de situatie in geringe mate van toepassing is > voor > > u of uw supervisorengroep", > > "de situatie enigszins van toepassing is voor u > of > > uw supervisorengroep", > > "de situatie in hoge mate van toepassing is voor > u > > of uw supervisorengroep", > > "de situatie in zeer hoge mate van toepassing is > > voor u of uw supervisorengroep"), > > to = c(1,2,3,4,5)) > > > > What should I do? > > Thank you in advance, Roberto > > > > Op ma 22 okt. 2018 om 17:13 schreef David L Carlson <dcarlson at tamu.edu>: > > > >> Your example is not reproducible since you did not give us some sample > >> data. I suspect that your data frame consists of columns that represent > >> questions and rows that represent individuals who answered the > questions. > >> First create a simple example: > >> > >> set.seed(42) > >> teamq <- data.frame(V1=sample(c(1, 2, 4, 5), 25, replace = TRUE), > >> V2=sample(c(1, 2, 3, 4, 5), 25, replace=TRUE), > >> V3=sample(c(2, 3, 4, 5), 25, replace=TRUE)) > >> > >> Notice that this data frame ONLY contains questions (and only 3 > >> questions). Here are 2 ways to get what you want. The first one stacks > the > >> data: > >> > >> teamq.stack <- stack(teamq) > >> str(teamq.stack) > >> counts <- table(teamq.stack) > >> str(counts) > >> > >> The second one converts each column to a factor with levels 1 - 5: > >> > >> teamq2 <- data.frame(lapply(teamq, factor, levels=1:5)) > >> str(teamq2) > >> counts <- sapply(teamq2, table) > >> str(counts) > >> > >> Now make the plots: > >> > >> cols <- c("yellow","sandybrown","orange", "darkolivegreen","green") > >> barplot(counts[, 1], horiz=TRUE, col=cols, legend=TRUE) > >> barplot(counts[, 2], horiz=TRUE, col=cols, legend=TRUE) > >> barplot(counts[, 3], horiz=TRUE, col=cols, legend=TRUE) > >> > >> You will need to adjust the xlim= argument so that the legend does not > >> print on top of the bars. > >> > >> ---------------------------------------- > >> David L Carlson > >> Department of Anthropology > >> Texas A&M University > >> College Station, TX 77843-4352 > >> > >> > >> -----Original Message----- > >> From: R-help <r-help-bounces at r-project.org> On Behalf Of P. Roberto > Bakker > >> Sent: Monday, October 22, 2018 9:04 AM > >> To: R mailing list <r-help at r-project.org> > >> Subject: [R] Different stack barplots - same color legends > >> > >> Hi, > >> > >> I want to make barplots from different questions (columns) in one > >> data.frame. > >> Each question has the same 5 likert items. > >> Now the problem: in some questions all items are answered; in other > less. > >> From the syntax below I get nice stack barplots - *but the legend > colors do > >> not* refer to the same likert-item, which I understand - the colors go > in > >> sequence along the table. > >> Question: how can I write a syntax that each likert-item has the same > >> legend color? > >> Thank you in advance, > >> > >> Roberto > >> > >> SYNTAX: > >> counts19 <- table(teamq[,19]) > >> counts20 <- table(teamq[,20]) > >> barplot(as.matrix(counts19), horiz = T, > >> col=c("yellow","sandybrown","orange", "darkolivegreen","green"), > >> legend=T) > >> barplot(as.matrix(counts20), horiz = T, > >> col=c("yellow","sandybrown","orange", "darkolivegreen","green"), > >> legend=T) > >> > >> [[alternative HTML version deleted]] > >> > >> ______________________________________________ > >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > >> https://stat.ethz.ch/mailman/listinfo/r-help > >> PLEASE do read the posting guide > >> http://www.R-project.org/posting-guide.html > >> and provide commented, minimal, self-contained, reproducible code. > >> > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]