Hallo all Here are the data from dput test <- structure(list(Sample = c("A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C"), SSAtype = c("one", "one", "one", "two", "two", "two", "one", "one", "one", "two", "two", "two", "one", "one", "one", "two", "two", "two"), value c(8.587645149, 8.743793651, 8.326440422, 9.255940687, 8.971931555, 8.856323865, 9.650809096, 9.725504448, 9.634449367, 9.69485369, 9.526758476, 10.03758001, 10.76845392, 10.66891602, 10.34894497, 10.76284989, 10.53074081, 11.16464528), SSAmeasuredP = c(8.3, 8.3, 8.3, 8.3, 8.3, 8.3, 9.5, 9.5, 9.5, 9.5, 9.5, 9.5, 11, 11, 11, 11, 11, 11 ), identity = c("point", "point", "point", "point", "point", "point", "point", "point", "point", "point", "point", "point", "point", "point", "point", "point", "point", "point")), row.names = c(NA, 18L), class = "data.frame") test.ag <- structure(list(Sample = c("A", "B", "C"), avg = c(8.3, 9.5, 11 ), odch = c(0.2, 0.4, 0.3), identity = c("point", "point", "point" )), row.names = c(NA, 3L), class = "data.frame") I try to make some relatively simple barplot and I wanted to add points to it which I somehow did. library(ggplot2) p <- ggplot(test, aes(x=Sample, y=value, fill=SSAtype)) p+geom_col(position="dodge")+geom_point(aes(y=SSAmeasuredP, shape=identity), size=5)+ scale_fill_manual(values=tablePal, name="Calculation\n performed\n according to", labels=c("bla", "blabla"))+ guides(fill= guide_legend(override.aes = list(shape=NA)))+ scale_shape_manual(name = "Measured", values=19, labels=NULL) But instead of points I want to use pointrange with data from other df. I found some help and all is good except size of the points and missing legend ggplot()+ geom_col(data=test, aes(x=Sample, y=value, fill=SSAtype), position="dodge")+ scale_fill_manual(values=tablePal, name="Calculation\n performed\n according to", labels=c("bla", "blabla"))+ geom_pointrange(data=test.ag, aes(x=Sample, y=avg, ymin=avg-odch, ymax=avg+odch)) + guides(fill= guide_legend(override.aes = list(shape=NA)))+ scale_shape_manual(name = "Measured", values=19, labels=NULL) Although I will try to find some workable way I also would like to ask for help from R gurus, maybe I overlooked some simple way how to do it. Best regards Petr
Hi. I noticed missing tablePal which was originally set to palette("Tableau 10") tablePal <- palette() So now both codes should work however missing legend still persists library(ggplot2) p <- ggplot(test, aes(x=Sample, y=value, fill=SSAtype)) p+geom_col(position="dodge")+geom_point(aes(y=SSAmeasuredP, shape=identity), size=5)+ scale_fill_manual(values=tablePal, name="Calculation\n performed\n according to", labels=c("bla", "blabla"))+ guides(fill= guide_legend(override.aes = list(shape=NA)))+ scale_shape_manual(name = "Measured", values=19, labels=NULL) ggplot()+ geom_col(data=test, aes(x=Sample, y=value, fill=SSAtype), position="dodge")+ scale_fill_manual(values=tablePal, name="Calculation\n performed\n according to", labels=c("bla", "blabla"))+ geom_pointrange(data=test.ag, aes(x=Sample, y=avg, ymin=avg-odch, ymax=avg+odch)) + guides(fill= guide_legend(override.aes = list(shape=NA)))+ scale_shape_manual(name = "Measured", values=19, labels=NULL) Best regards Petr> -----Original Message----- > From: R-help <r-help-bounces at r-project.org> On Behalf Of PIKAL Petr > Sent: Monday, May 16, 2022 1:16 PM > To: r-help at r-project.org > Subject: [R] ggplot pointrange from other df and missing legend > > Hallo all > > > > Here are the data from dput > > > > test <- structure(list(Sample = c("A", "A", "A", "A", "A", "A", "B", > > "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C"), SSAtype = c("one", > > "one", "one", "two", "two", "two", "one", "one", "one", "two", > > "two", "two", "one", "one", "one", "two", "two", "two"), value > c(8.587645149, > > 8.743793651, 8.326440422, 9.255940687, 8.971931555, 8.856323865, > > 9.650809096, 9.725504448, 9.634449367, 9.69485369, 9.526758476, > > 10.03758001, 10.76845392, 10.66891602, 10.34894497, 10.76284989, > > 10.53074081, 11.16464528), SSAmeasuredP = c(8.3, 8.3, 8.3, 8.3, > > 8.3, 8.3, 9.5, 9.5, 9.5, 9.5, 9.5, 9.5, 11, 11, 11, 11, 11, 11 > > ), identity = c("point", "point", "point", "point", "point", > > "point", "point", "point", "point", "point", "point", "point", > > "point", "point", "point", "point", "point", "point")), row.names = c(NA, > > 18L), class = "data.frame") > > > > test.ag <- structure(list(Sample = c("A", "B", "C"), avg = c(8.3, 9.5, 11 > > ), odch = c(0.2, 0.4, 0.3), identity = c("point", "point", "point" > > )), row.names = c(NA, 3L), class = "data.frame") > > > > I try to make some relatively simple barplot and I wanted to add points to > it which I somehow did. > > > > library(ggplot2) > > > > p <- ggplot(test, aes(x=Sample, y=value, fill=SSAtype)) > > p+geom_col(position="dodge")+geom_point(aes(y=SSAmeasuredP, > shape=identity), > size=5)+ > > scale_fill_manual(values=tablePal, name="Calculation\n performed\n > according > to", > > labels=c("bla", "blabla"))+ > > guides(fill= guide_legend(override.aes = list(shape=NA)))+ > > scale_shape_manual(name = "Measured", values=19, labels=NULL) > > > > But instead of points I want to use pointrange with data from other df. I > found some help and all is good except size of the points and missinglegend> > > > ggplot()+ > > geom_col(data=test, aes(x=Sample, y=value, fill=SSAtype), > position="dodge")+ > > scale_fill_manual(values=tablePal, name="Calculation\n performed\n > according > to", > > labels=c("bla", "blabla"))+ > > geom_pointrange(data=test.ag, aes(x=Sample, y=avg, ymin=avg-odch, > > ymax=avg+odch)) + > > guides(fill= guide_legend(override.aes = list(shape=NA)))+ > > scale_shape_manual(name = "Measured", values=19, labels=NULL) > > > > Although I will try to find some workable way I also would like to ask for > help from R gurus, maybe I overlooked some simple way how to do it. > > > > Best regards > > Petr
Hello, In the code below the legend is not missing, I couldn't reproduce that error. As for the size of the points, include argument size. I have size=2. Also: - tablePal is missing, I've chosen colors 2:3; - I have commented out the guides(.), you are setting the shape after so it makes no difference. ggplot() + geom_col( data=test, aes(x=Sample, y=value, fill=SSAtype), position="dodge" ) + geom_pointrange( data=test.ag, aes(x=Sample, y=avg, ymin=avg-odch, ymax=avg+odch), size = 2 ) + scale_fill_manual( #values=tablePal, values = 2:3, name="Calculation\n performed\n according to", labels=c("bla", "blabla") ) + #guides(fill = guide_legend(override.aes = list(shape = NA))) + scale_shape_manual(name = "Measured", values = 19, labels = NULL) Hope this helps, Rui Barradas ?s 12:15 de 16/05/2022, PIKAL Petr escreveu:> Hallo all > > > > Here are the data from dput > > > > test <- structure(list(Sample = c("A", "A", "A", "A", "A", "A", "B", > > "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C"), SSAtype = c("one", > > "one", "one", "two", "two", "two", "one", "one", "one", "two", > > "two", "two", "one", "one", "one", "two", "two", "two"), value > c(8.587645149, > > 8.743793651, 8.326440422, 9.255940687, 8.971931555, 8.856323865, > > 9.650809096, 9.725504448, 9.634449367, 9.69485369, 9.526758476, > > 10.03758001, 10.76845392, 10.66891602, 10.34894497, 10.76284989, > > 10.53074081, 11.16464528), SSAmeasuredP = c(8.3, 8.3, 8.3, 8.3, > > 8.3, 8.3, 9.5, 9.5, 9.5, 9.5, 9.5, 9.5, 11, 11, 11, 11, 11, 11 > > ), identity = c("point", "point", "point", "point", "point", > > "point", "point", "point", "point", "point", "point", "point", > > "point", "point", "point", "point", "point", "point")), row.names = c(NA, > > 18L), class = "data.frame") > > > > test.ag <- structure(list(Sample = c("A", "B", "C"), avg = c(8.3, 9.5, 11 > > ), odch = c(0.2, 0.4, 0.3), identity = c("point", "point", "point" > > )), row.names = c(NA, 3L), class = "data.frame") > > > > I try to make some relatively simple barplot and I wanted to add points to > it which I somehow did. > > > > library(ggplot2) > > > > p <- ggplot(test, aes(x=Sample, y=value, fill=SSAtype)) > > p+geom_col(position="dodge")+geom_point(aes(y=SSAmeasuredP, shape=identity), > size=5)+ > > scale_fill_manual(values=tablePal, name="Calculation\n performed\n according > to", > > labels=c("bla", "blabla"))+ > > guides(fill= guide_legend(override.aes = list(shape=NA)))+ > > scale_shape_manual(name = "Measured", values=19, labels=NULL) > > > > But instead of points I want to use pointrange with data from other df. I > found some help and all is good except size of the points and missing legend > > > > ggplot()+ > > geom_col(data=test, aes(x=Sample, y=value, fill=SSAtype), position="dodge")+ > > scale_fill_manual(values=tablePal, name="Calculation\n performed\n according > to", > > labels=c("bla", "blabla"))+ > > geom_pointrange(data=test.ag, aes(x=Sample, y=avg, ymin=avg-odch, > > ymax=avg+odch)) + > > guides(fill= guide_legend(override.aes = list(shape=NA)))+ > > scale_shape_manual(name = "Measured", values=19, labels=NULL) > > > > Although I will try to find some workable way I also would like to ask for > help from R gurus, maybe I overlooked some simple way how to do it. > > > > Best regards > > Petr > > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.