Because our group-means data has the same variables as the individual data, it can make use of the variables mapped out in our base ggplot() layer. Boxplot form Formula The function boxplot () can also take in formulas of the form y~x where, y is a numeric vector which is grouped according to the value of x. For the line plot: First, add jitter points, then add lines + error bars + mean points on top of the jitter points. This can be done using bar plots and dot charts. In this way the plot conveys information of both the number of data points, the density distribution, outliers and spread in a very simple, comprehensible and condensed format. Donnez nous 5 étoiles, Statistical tools for high-throughput data analysis. Is there a nicer way to do it? I tried . The inclusive algorithm also uses the median to divide the ordered dataset into two halves, but if the sample is odd, it includes the median in both halves. Group the data by the quality of the cut and the diamond color, Sort the data by cut and color columns. The first variable is the outermost on the scale and the last variable is the innermost. Alternatively, you can easily create a dot chart with the ggpubr package: Or, if you prefer the ggplot2 verbs, type this: Alternatively, you can easily create the above plot using the function ggbarplot() [in ggpubr]: Key function: geom_jitter(). This is the tenth tutorial in a series on using ggplot2 I am creating with Mauricio Vargas Sepúlveda.In this tutorial we will demonstrate some of the many options the ggplot2 package has for creating and customising boxplots. The different steps are as follow: Note that, position_stack() automatically stack values in reverse order of the group aesthetic. You’ll also learn how to add labels to dodged and stacked bar plots. You were passing two arguments that too with incorrect subsetting. e2 - e + geom_boxplot( aes(fill = supp), position = position_dodge(0.9) ) + scale_fill_manual(values = c("#999999", "#E69F00")) e2 See a recap of the different data types in R â¦ Use the ggpubr package, which will automatically calculate the summary statistics and create the graphs. To put the label in the middle of the bars, we’ll use. (1/2). Create error plots using the summary statistics data. Here, hue=âyearâ as we want to grouped boxplot for two years. To create a single boxplot for the variable âOzoneâ in the airquality dataset, we can use the following syntax: #create boxplot for the variable "Ozone" library(ggplot2) ggplot(data = airquality, aes(y=Ozone)) + â¦ Create simple line/bar plots for multiple groups. Arguments: alpha, color, fill, shape and size. Want to Learn More on R Programming and Data Science? Jonathan Rougier Science Laboratories Department of Mathematical Sciences South Road University of Durham Durham DH1 3LE http://www.maths.dur.ac.uk/stats/people/jcr/jcr.html, Thanks, it works. Use the option. subset: an optional vector specifying a subset of observations to be used for plotting. In the R code above, the constant is specified using the argument mult (mult = 1). â¦ Create one single panel with all box plots. For a notched box plot, width of the notch relative to the body (defaults to notchwidth = 0.5). I want to connect the mean for each box together with a line. Under Scale Level for Graph Variables, select one of the following: sinaplot is inspired by the strip chart and the violin plot. In this section, we’ll show to plot a grouped continuous variable using box plot, violin plot, strip chart and alternatives. Add automatically t-test / wilcoxon test p-values comparing the groups. It computes the mean plus or minus a constant times the standard deviation. If categories are organized in groups and subgroups, it is possible to build a grouped boxplot. In R we can re-order boxplots in multiple ways. 5 D-14195 Berlin -- Germany -- phone: 49 30 89789-377 +-----------------------------------, Hi Vadik, If I understand you correctly you want to try the "interaction" function in a boxplot. I guess it is not the most elegant way ... Hope it helps jan +----------------------------------- Jan Goebel (mailto:jgoebel at diw.de) DIW Berlin Longitudinal Data and Microanalysis K?nigin-Luise-Str. If FALSE (default) make a standard box plot. You can use the geometric object geom_boxplot() from ggplot2 library to draw a boxplot() in R. Boxplots() in R helps to visualize the distribution of the data by quartile and detect the presence of outliers.. We will use the airquality dataset to introduce boxplot() in R with ggplot. R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Customizing Grouped Boxplot in R Grouped Boxplots with facets in ggplot2 . Having the two plots side by side helps make a quick comparison to see if the numeric data in one category is significantly different than in the other category. varwidth Boxplots in ggplot2. The mean +/- SD can be added as a crossbar or a pointrange. Examples of R code: start by creating a plot, named e, and then finish it by adding a layer: Sidiropoulos, Nikos, Sina Hadi Sohi, Nicolas Rapin, and Frederik Otzen Bagger. To, http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html, http://www.maths.dur.ac.uk/stats/people/jcr/jcr.html, FW: [R] boxplot grouped by two variables: general issue, [R] bwplot: using a numeric variable to position boxplots, [R] help on retrieving output from by( ) for regression. Cold Spring Harbor Laboratory. ("1","2","3")). 2015. A better solution is to reorder the boxes of boxplot by median or mean values of speed. Used as the y coordinates of labels. Create horizontal error bars. An example of a formula is y~group where a separate boxplot for numeric variable y is generated for each value of group. For instance, letâs take several varieties (group) that are grown in high or low temperature (subgroup). This section contains best data science and self-development resources to help you on your path. To specify which variable we would like to group, we use the argument hue in boxplot function. Is there a quick way to make boxplots groups by two variables? The following plot shows two box plots. Plot Grouped Data: Box plot, Bar Plot and More. The most common methods for comparing means include: Read more at: Add P-values and Significance Levels to ggplots. The plot shows two box plots, one for category 1 and the other for category 2. Compute summary statistics and initialize ggplot with summary data: Facilitating Exploratory Data Visualization: Application to TCGA Genomic Data. Put dose on y axis and len on x-axis. Note that ~ g1 + g2 is equivalent to g1:g2. The space between the grouped box plots is adjusted using the function position_dodge() . facet-ing functons in ggplot2 offers general solution to split up the data by one or more variables and make plots with subsets of data together. Needing two versions for each plot function is a little bit complicated. standard error bars + mean points colored by groups (supp). So we need only the. See the associated article at: ggpubr-Plot Means/Medians and Error Bars. You can change this behavior by using position = position_stack(reverse = TRUE). Want to share your content on R-bloggers? Notches are used to compare groups; if the notches of two boxes do not overlap, this suggests that the medians are significantly different. If you want only to add upper error bars but not the lower ones, use ymin = len (instead of len-sd) and ymax = len+sd. A box plot extends over the interquartile range of a dataset i.e., the central 50% of the observations. The space between the grouped box plots is adjusted using the function position_dodge(). A grouped barplot, also known as side by side bar plot or clustered bar chart is a barplot in R with two or more variables. The data grouping is made easy with the help of boxplots. In this situation, the grouping variable is used as the x-axis and the continuous variable as the y-axis. The facet approach partitions a plot into a matrix of panels. This default ensures that bar colors align with the default legend. You’ll learn, how to: Load required packages and set the theme function theme_pubclean() [in ggpubr] as the default theme: In our demo example, we’ll plot only a subset of the data (color J and D). In this section, we’ll set the theme theme_bw() as the default ggplot theme: First, convert the variable dose from a numeric to a discrete factor variable: Note that, it’s possible to use the function scale_x_discrete() for: Two different grouping variables are used: dose on x-axis and supp as fill color (legend variable). Boxplots can be created for individual variables or for variables by group. By letting the normalized density of points restrict the jitter along the x-axis, the plot displays the same contour as a violin plot, but resemble a simple strip chart for small number of data points (Sidiropoulos et al. For line plot, you might want to treat x-axis as numeric: In this section, we’ll describe how to easily i) compare means of two or multiple groups; ii) and to automatically add p-values and significance levels to a ggplot (such as box plots, dot plots, bar plots and line plots, …). Another way to create boxplots in R is by using the package ggplot2. I have a boxplot showing multiple boxes. Hi, I wish to create a multiple box plot for a large dataset, in which I want 11 separate boxplots in the same figure, all with the same variable for the y axis. Syntax. Note that, for line plot, you should always specify group = 1 in the aes(), when you have one group of line. “SinaPlot: An Enhanced Chart for Simple and Truthful Representation of Single Observations over Multiple Classes.” bioRxiv. In a grouped boxplot, categories are organized in groups and subgroups. Faceted plots are useful if you want to essentially look at two different boxplots at the same time but divided by the levels of one of your categorical variables. Conclusion â R Boxplot labels. Note that you could change the color of your bars to whatever color â¦ Boxplots in R with ggplot2 Reordering boxplots using reorder() in R . Another very commonly used visualization tool for categorical data is the box plot. Use the standard ggplot2 verbs, to reproduce the line plots above: Create a box plot with p-values. By default mult = 2. We need the original. -- Vadim Kutsyy http://www.kutsyy.com vadim at kutsyy.com The University of Michigan - Ann Arbor PhD Student -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) Thanks. Black Lives Matter. The command dat[, 1:4] selects the variables 1 to 4 as the fifth variable is a qualitative variable and the standard deviation cannot be computed on such type of variable. ; In Categorical variables for grouping (1-3, outermost first), enter up to three columns of categorical data that define groups. doi:10.1101/028191. formula: a formula, such as y ~ grp, where y is a numeric vector of data values to be split into groups according to the grouping variable grp (usually a factor). Click here if you're looking to post or find an R/data-science job . Two different grouping variables are used: dose on x-axis and supp as fill color (legend variable). Your data needs to be organised into a data.frame with appropriate factors. In Graph variables, enter multiple columns of numeric or date/time data that you want to graph. choosing which items to display: for example c(“0.5”, “2”), changing the order of items: for example from c(“0.5”, “1”, “2”) to c(“2”, “0.5”, “1”), Compute summary statistics for the variable. Key functions: Add jitter points (representing individual points), dot plots and violin plots. Use the function facet_wrap(): Violin plots are similar to box plots, except that they also show the kernel probability density of the data at different values. Weâll use the built-in dataset airquality again for the following examples. Here, hue=âyearâ as we want to grouped boxplot for two years. We will use Râs airquality dataset in the datasets package.. Even if boxplot accepts two y values (which it doesn't), you code will fail because of incorrect subsetting. As, Calculate the cumulative sum of counts for each cut category. For example, in our dataset airquality, the Temp can be our numeric vector. data: a data.frame (or list) from which the variables in formula should be taken. Note that, an easy way, with less typing, to create mean/median plots, is provided in the ggpubr package. In this section, we’ll show how to plot summary statistics of a continuous variable organized into groups by one or multiple grouping variables. If TRUE, make a notched box plot. Key function: Filter the data to keep only diamonds which colors are in (“J”, “D”). We’ll also describe how to add automatically p-values comparing groups. In our case, we can use the function facet_wrap to make grouped boxplots. As for violin plots, summary statistics are usually added to dot plots. Stripcharts are also known as one dimensional scatter plots. For this, you should initialize ggplot with original data (, Create basic bar/line plots of mean +/- error. Basic principles of {ggplot2}. At this point, the elements we need are in the plot, and itâs a matter of adjusting the visual elements to differentiate the individual and group-means data and display the data effectively overall. Set the default theme to theme_pubr() [in ggpubr]: Start by initializing ggplot with the summary statistics data: The boxplot does not display the mean by default, instead the middle line only indicates the median. Next we’ll show how to display a continuous variable with multiple groups. Box plot accepts only one y when you are plotting against a factor (one Y in Y ~ X formula). There are two main functions for faceting : facet_grid() facet_wrap() If you enjoyed this blog post and found it useful, please consider buying our book! The reason why I am showing you this image is that looking at a statistical distribution is more commonplace than looking at a box plot. By that, Hello, you can make a new variable with the values A1, A2, A3, B1, B2 ... and then do a boxplot and define you own axis-labels. Box Plots . I want a box plot of variable boxthis with respect to two factors f1 and f2.That is suppose both f1 and f2 are factor variables and each of them takes two values and boxthis is a continuous variable. Barchart with Colored Bars. 2015). Nov 23, 2000 at 11:07 am: On Tue, 21 Nov 2000, Vadik Kutsyy wrote: Is there a quick way to make boxplots groups by two variables? Box plot supports multiple variables as well as various optimizations. The function mean_sdl is used for adding mean and standard deviation. Boxplots can be used to compare various data variables or sets. Specify xmin and xmax. In other words, it might help you understand a boxplot. If I understand you correctly you want to try the "interaction" function. There are many times when you may want a boxplot that looks at the potential interaction of two categorical variables. â¦ - Specify x and y as usually - Specify ymin = len-sd and ymax = len+sd to add lower and upper error bars. there would be a few boxplots each for a value of second variable (say. Boxplots are created in R by using the boxplot() function. The main layers are: The dataset that contains the variables that we want to represent. Add P-values and Significance Levels to ggplots. Avez vous aimé cet article? The format is boxplot (x, data=), where x is a formula and data= denotes the data frame providing the data. How to make an interactive box plot in R. Examples of box plots in R that are grouped, colored, and display the underlying data distribution. Now fowlup question, I created addition level, in order to have extra space between groups. Add lower and upper error bars for the line plot: Add only upper error bars for the bar plot: Bar and line plots + jitter points. A dark line appears somewhere between the box which represents the median, the point that lies exactly in the middle of the dataset. This R tutorial describes how to split a graph using ggplot2 package.. For the bar plot: First, add the bar plot, then add jitter points + error bars on top of the bars. Specify the option. Plot types: grouped bar plots of the frequencies of the categories. A boxplot summarizes the distribution of a continuous variable for several categories. Rather have ONLY panel ... Groups; FW: [R] boxplot grouped by two variables: general issue; Jens Oehlschlägel. Course: Machine Learning: Master the Fundamentals, Course: Build Skills for a Top Job in any Industry, Specialization: Master Machine Learning Fundamentals, Specialization: Software Development in R, Add P-values and Significance Levels to ggplots, Courses: Build Skills for a Top Job in any Industry, IBM Data Science Professional Certificate, Practical Guide To Principal Component Methods in R, Machine Learning Essentials: Practical Guide in R, R Graphics Essentials for Great Data Visualization, GGPlot2 Essentials for Great Data Visualization in R, Practical Statistics in R for Comparing Groups: Numerical Variables, Inter-Rater Reliability Essentials: Practical Guide in R, R for Data Science: Import, Tidy, Transform, Visualize, and Model Data, Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems, Practical Statistics for Data Scientists: 50 Essential Concepts, Hands-On Programming with R: Write Your Own Functions And Simulations, An Introduction to Statistical Learning: with Applications in R, Visualize a grouped continuous variable using. Split the plot into multiple panel. I mean, that if x axes have values ("A","B","C"), than at each value. Here's a simple example ... data(warpbreaks) boxplot(breaks~interaction(wool, tension), data=warpbreaks, col=2:3) Hope this helps, Jonathan. In this example, we will use the function reorder() in base R to re-order the boxes. Create mean and median plots of groups with error bars. We start by describing how to plot grouped or stacked frequencies of two categorical variables. Ordering boxplots in base R. This post is dedicated to boxplot ordering in base R. It describes 3 common use cases of reordering issue with code and explanation. Create a multi-panel box plots facetted by group (here, “dose”): (2/2). In the example below, we’ll plot a small fraction (1/5) of the diamonds dataset. Typically, violin plots will include a marker for the median of the data and a box indicating the interquartile range, as in standard box plots. We can also vary the scales according to data. Each panel shows a different subset of the data. The chart will display the bars for each of the multiple variables. The image above is a comparison of a boxplot of a nearly normal distribution and the probability density function (pdf) for a normal distribution. Basic Boxplot in R. Figure 1 visualizes the output of the boxplot command: A box-and-whisker plot. Add varwidth=TRUE to make boxplot widths proportional to the square root of the samples â¦ These plots are suitable compared to box plots when sample sizes are small. The problem is that the variable to be used for the y axis is a string character of either "1" or "2" depending on if the values are related to good or poor survival. Another way to make grouped boxplot is to use facet in ggplot. Is there a quick way to make boxplots groups by two variables? The {ggplot2} package is based on the principles of âThe Grammar of Graphicsâ (hence âggâ in the name of {ggplot2}), that is, a coherent system for describing and building graphs.The main idea is to design a graphic as a succession of layers.. click here if you have a blog, or here if you don't. By that. notchwidth. Create easily plots of mean +/- sd for multiple groups. I am very new to R and to any packages in R. I looked at the ggplot2 documentation but could not find this. It is also useful in comparing the distribution of data across data sets by drawing boxplots for each of them. Plot y = “len” by x = “dose” and color by “supp”. Month can be our grouping variable, so that we get the boxplot for each month separately. In this chapter, we’ll show how to plot data grouped by the levels of a categorical variable. The usability of the boxplot is easy and convenient. Mean points Colored by groups ( supp ) you should initialize ggplot with original (... In formula should be taken these plots are suitable compared to box plots is using... Is also useful in comparing the groups x formula ) should be taken: alpha color. Comparing means include: Read More at: ggpubr-Plot Means/Medians and error bars + mean Colored... To reorder the boxes middle line only indicates the median, the constant is specified using the boxplot two. With facets in ggplot2 then add jitter points + error bars a graph using ggplot2... Box together with a line to g1: g2 Thanks, it is also useful in comparing the.. Durham Durham DH1 3LE http: //www.maths.dur.ac.uk/stats/people/jcr/jcr.html, Thanks, it is possible to a! In high or low temperature ( subgroup ) grouped boxplots with facets in ggplot2 a! Associated article at: add p-values and Significance levels to ggplots bars, we ll., '' 2 '', '' 3 '' ) ) also useful in comparing the.. Exactly in the middle of the observations used as the y-axis categorical variable adding... Common methods for comparing means include: Read More at: ggpubr-Plot Means/Medians and error.. Genomic data interquartile range of a dataset i.e., the constant is specified using the function position_dodge )... Data (, create basic bar/line plots of groups with error bars + points. With ggplot2 Reordering boxplots using reorder ( ) automatically stack values in reverse of! //Www.Maths.Dur.Ac.Uk/Stats/People/Jcr/Jcr.Html, Thanks, it works add jitter points + error bars on top of the notch relative the... First ), enter multiple columns of categorical data that define groups on the scale and the diamond color fill... Create boxplots in multiple ways ( defaults to notchwidth = 0.5 ) plots above: create a box.! Supp as fill color ( legend variable ) categorical variable in R. Figure 1 visualizes the output of the aesthetic. And found it useful, please consider buying our book for plotting ): ( 2/2 ) easy... Boxplot is easy and convenient plots above: create a box plot dot!, with less typing, to reproduce the line plots above: create a box plot accepts only one in. Of them a factor ( one y in y ~ x formula ) supp as fill color legend. Â¦ the facet approach partitions a plot into a data.frame ( or list ) which... Tools for high-throughput data analysis instead the middle of the boxplot for variable... 1/5 ) of the boxplot does not display the bars mult = 1 ) groups with error bars bar. ( which it does n't ), enter multiple columns of categorical data that define groups grouped data box. Looks at the potential interaction of two categorical variables [ R ] boxplot grouped by the strip chart the! Each box together with a line create easily plots of groups with error bars mean/median plots, one category! Show how to display a continuous variable as the y-axis multiple variables as well various... Two different grouping variables are used: dose on x-axis be organised into a (... Hue=ÂYearâ as we want to grouped boxplot for two years that bar align..., create basic bar/line plots of groups with error bars + mean points Colored groups. By default, instead the middle of the diamonds dataset 're looking to post find. Grouped box plots is adjusted using the argument mult ( mult = 1 ) sum of counts each. Recap of the boxplot ( x, data= ), enter multiple columns numeric. Sinaplot is inspired by the quality of the frequencies of two categorical variables for (... To create mean/median plots, one for category 2 be a few boxplots each for a value group. Or stacked frequencies of two categorical variables an easy way, with less typing, reproduce... Use the function reorder ( ) function situation, the Temp can be added a... Are organized in groups and subgroups, it works for instance, letâs take several varieties ( )... Try the `` interaction '' function try the `` interaction '' function subset an... Display a continuous variable as the y-axis data grouping is made easy with the help boxplots! Body ( defaults to notchwidth = 0.5 ) the variables in formula should be taken in a boxplot... Adding mean and standard deviation by median or mean values of speed summary data: Facilitating Exploratory data:... Ggplot with original data (, create basic bar/line plots of groups with error.! Group, we ’ ll use on y axis and len on x-axis specified using the ggplot2. Boxplots are created in R we can also vary the scales according to data,! ( representing individual points ), enter multiple columns of categorical data is innermost. Approach partitions a plot into a data.frame with appropriate factors provided in the datasets package and! Types in R grouped boxplots with facets in ggplot2 you may want boxplot... Change this behavior by using position = position_stack ( reverse = TRUE ) data Science and self-development resources help. Words, it is also useful in comparing the groups we can also the! Exploratory data visualization: Application to TCGA Genomic data by “ supp ” with a.... X, data= ), you code will fail because of incorrect subsetting against factor... Graph variables, enter up to three columns of numeric or date/time data that you want r boxplot grouped by two variables learn on. Étoiles, Statistical tools for high-throughput data analysis ”, “ D ” ) words... In our case, we ’ ll show how to add automatically /! And initialize ggplot with original data (, create basic bar/line plots of mean +/- SD for multiple.. Automatically p-values comparing the groups Genomic data for categorical data that you want to graph times standard! Times when you may want a boxplot summarizes the distribution of a categorical.... This section contains best data Science and self-development resources to help you on your path one for category.! It does n't ), where x is a little bit complicated used for mean... Facets in ggplot2: alpha, color, fill, shape and size observations! A value of group against a factor ( one y in y ~ x formula ) package, will. The constant is specified using the boxplot does not display the mean or... May want a boxplot summarizes the distribution of data across data sets by drawing boxplots for each of.... Are created in R by using position = position_stack ( ) in R with ggplot2 Reordering using! Chart for Simple and Truthful Representation of Single observations over multiple Classes. ” bioRxiv variable for several categories ggplot2! G1: g2 be our grouping variable is used as the x-axis and the last variable is the box,...: Read More at: add p-values and Significance levels to ggplots ~ g1 + is! For comparing means include: Read More at: add p-values and Significance levels to ggplots of data data. To re-order the boxes cut and the diamond color, fill, shape and size not display bars... Colored by groups ( supp ) generated for each value of group second variable ( say default, the!, it works factor ( one y in y ~ x formula ) automatically values! '' function connect the mean plus or minus a constant times the standard deviation get the (. Are as follow: note that, an easy way, with less,! Exploratory data visualization: Application to TCGA Genomic data low temperature ( subgroup ) generated for each separately. Numeric variable y is generated for each month separately numeric variable y is generated for each of the,! N'T ), where x is a little bit complicated have extra space between the which! Ggplot2 Reordering boxplots using reorder ( ) in R we can also vary the scales according data... 5 étoiles, Statistical tools for high-throughput data analysis other words, it works month can our! Is boxplot ( ) function in other words, it is also useful in comparing the of! Re-Order the boxes are: the dataset middle line only indicates the median, the Temp be... The function mean_sdl is used as the y-axis the help of boxplots example a...: the dataset matrix of panels Simple and Truthful Representation of Single observations over Classes.. You on your path x, data= ), you code will fail because of incorrect.! Ll also describe how to plot data grouped by the quality of the frequencies of categorical. With error bars on top of the categories category 1 and the other for category 2 how! Function mean_sdl is used for plotting variables as well as various optimizations: general issue ; Jens Oehlschlägel,... Plot grouped data: Facilitating Exploratory data visualization: Application to TCGA Genomic data grouped boxplots with facets ggplot2., then add jitter points + error bars on top of the r boxplot grouped by two variables in. Be used for adding mean and standard deviation, width of the categories subset of to! Describes how to plot grouped data: box plot, width of the cut and the variable... Equivalent to g1: g2 associated article at: add p-values and Significance levels to ggplots which the variables we. Is generated for each of the categories too with incorrect subsetting function is a little bit complicated two different variables! Example of a continuous variable with multiple groups, or here if you 're looking post! Instance, letâs take several varieties ( group ) that are grown in high low... Facet in ggplot y is generated for each plot function is a little bit complicated might help understand...

How To Edit Text In A Picture In Word,
Maternity Benefit Under Employees' State Insurance Act, 1948,
Belgian Malinois Aggressive,
How To Cut Marble Without Machine,
Fluency Activities For 5th Grade,
How Long Does It Take Demon To Kill Fleas,
Cheese Garlic Bread Recipe Pizza Hut,
Structure Of Sulphate Ion,