Às 11:08 de 04/08/2023, Nick Wray escreveu:
Hello  I am wrestling with ggplot – I have produced a facetted plot of
flows under various metrics but I can’t find info on the net which tells me
how to do three things


I have created some simplified mock data to illustrate (and using a
colour-blind palette):


library(ggplot2)

library(forcats)

cb8<- c("#000000", "#E69F00", "#56B4E9", "#009E73","#F0E442", "#0072B2",
"#D55E00", "#CC79A7")

set.seed<-(040823)

   mock<- set.seed<-(040823)


mock<-as.data.frame(cbind(rep((1990:1995),8),round(rnorm(48,50,10),3),rep(c(rep("Tweed",6),rep("Tay",6)),4),rep(c("AMAX","Mean","AMIN","Median"),each=12)))

   colnames(mock)<-c("Year","Flow","Stat","Metric")

   mock



   ggplot(mock, aes(Year,Flow, group = factor(Stat), colour = factor(Stat)))+

     coord_cartesian(ylim = c(0, 100)) +

     geom_line(size=1)+

     scale_color_manual(name = "Stat", values = cb8[4:7])+

     scale_y_discrete(breaks=c(0,25,50,75,100),labels=c(0,25,50,75,100))+

     facet_wrap(vars(Metric),nrow=2,ncol=2)+

     ylab("Flow")



1)This gives me a facetted plot but I can’t work out why I’m not getting a
labelled y scale



2)Why are plots down at the bottom of the facets rather than in the middle?



3)And also I’d like the plots to be in the order (top left to bottom right)
of

AMAX MEAN AMIN MEDIAN

but if I add in the line
facet_grid(~fct_relevel(Metric,"AMAX","Mean","AMIN","Median")) before the
line ylab it disrupts the 2x2 layout



Can anyone tell me how to resolve these problems?  Thanks Nick Wray

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.
Hello,

The main problem is the way ou create the data set. cbind defaults to creating a matrix and since some of the vectors are of class "character" all others will be coerced to character too. And Year and Flow will no longer be numeric.

You can coerce those two columns to numeric manually or you can use data.frame(), not as.data.frame(), to create the data set. And you were, therefore, using scale_y_discrete when it should be scale_y_continuous. Corrected below.

As for the relevel, I'm not getting any errors.



library(ggplot2)
library(forcats)

cb8<- c("#000000", "#E69F00", "#56B4E9", "#009E73",
        "#F0E442", "#0072B2", "#D55E00", "#CC79A7")

set.seed(040823)

# the right way of creating the data set
mock <- data.frame(
  Year = rep((1990:1995),8),
  Flow = round(rnorm(48,50,10),3),
  Stat = rep(c(rep("Tweed",6), rep("Tay",6)),4),
  Metric = rep(c("AMAX","Mean","AMIN","Median"),each=12)
)

ggplot(mock, aes(Year,Flow, group = factor(Stat), colour = factor(Stat))) +
  coord_cartesian(ylim = c(0, 100)) +
  geom_line(size=1) +
  scale_color_manual(name = "Stat", values = cb8[4:5]) +
scale_y_continuous(breaks=c(0, 25, 50, 75, 100), labels=c(0, 25, 50, 75, 100)) + facet_wrap(~ fct_relevel(Metric,"AMAX","Mean","AMIN","Median"), nrow = 2, ncol = 2) +
  ylab("Flow")


Hope this helps,

Rui Barradas

______________________________________________
R-help@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.

Reply via email to