Barplot in r

Barplot in r DEFAULT

When a variable takes a few values, it is common to summarize the information with a frequency table that can be represented with a barchart or barplot in R. In this article we are going to explain the basics of creating bar plots in R.

The R barplot function

For creating a barplot in R you can use the base R function. In this example, we are going to create a barplot from a data frame. Specifically, the example dataset is the well-known . First, load the data and create a table for the column with the function.

Recall that to create a barplot in R you can use the function setting as a parameter your previously created table to display absolute frequency of the data. However, if you prefer a bar plot with percentages in the vertical axis (the relative frequency), you can use the function and multiply the result by 100 as follows.

Absolute and relative frequencies

Note that you can also create a barplot with factor data with the function.

Bar chart created with the plot function

In addition, you can show numbers on bars with the text function as follows:

Bar plot with numbers representing the count of each bar

Assigning a bar plot inside a variable will store the axis values corresponding to the center of each bar.

You can also add a grid behind the bars with the function.

Adding a grid to a barplot in R

Barplot graphical parameters: title, axis labels and colors

Like other plots, you can specify a wide variety of graphical parameters, like axis labels, a title or customize the axes. In the previous code block we customized the barplot colors with the parameter. You can set the colors you prefer with a vector or use the function with the number of bars as parameter as we did or use other color palette functions. You can also change the border color of the bars with the argument.

Customized barplot in R

Change group labels

The label of each group can be changed with the argument. In our example, the groups are labelled with numbers, but we can change them typing something like:

Changing group labels in the barchart

Barplot width and space of bars

You can also modify the space between bars or the width of the bars with the and arguments. For the space between groups, consult the corresponding section of this tutorial.

Changing the width and space between bars of a barplot in R

The vector represents the space of the bar respect to the previous, so the first element won’t be taken into account.

Barplot from data frame or list

In addition, you can create a barplot directly with the variables of a dataframe or even a matrix, but note that the variable should be the count of some event or characteristic. In the following example we are counting the number of vehicles by color and plotting them with a bar chart. We will use each car color for coloring the corresponding bars.

Bar plot from list or data frame

Barplot for continuous variable

In case you are working with a continuous variable you will need to use the function to categorize the data. If not, in case of no ties, you will have as many bars as the length of your vector and the bar heights will equal to 1. In the following example we will divide our data from 0 to 45 by steps of 5 with the argument.

Bar chart for continuous variable

Horizontal barplot

By default, barplots in R are plotted vertically. However, it is common to represent horizontal bar plots. You can rotate 90º the plot and create a horizontal bar chart setting the argument to .

Horizontal bar plot in R

R barplot legend

A legend can be added to a barplot in R with the argument, where you can specify the names you want to add to the legend. Note that in RStudio the resulting plot can be slightly different, as the background of the legend will be white instead of transparent.

Barchart with legend

Note that, by using the argument, the legend can overlap the barplot.

The easiest method to solve this issue in this example is to move the legend. This can be achieved with the argument, where you can set graphical parameters within a list. You can set the position to , , , , and .

Changing the position of a legend

Equivalently, you can achieve the previous plot with the legend with the function as follows with the and arguments.

Nevertheless, this approach only works fine if the legend doesn’t overlap the bars in those positions. A better approach is to move the legend to the right, out of the barplot. You can do this setting the argument passed as a element of a list within the argument as follows.

Correct position of a barplot legend to avoid overlap

You could also change the axis limits with the or arguments for vertical and horizontal bar charts, respectively, but note that in this case the value to specify will depend on the number and the width of bars. Recall that if you assign a barplot to a variable you can store the axis points that correspond to the center of each bar.

Other alternative to move the legend is to move it under the bar chart with the , and functions. This approach is more advanced than the others and you may need to clear the graphical parameters before the execution of the code to obtain the correct plot, as graphical parameters will be changed.

Legend under bar plot in R

Grouped barplot in R

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 chart will display the bars for each of the multiple variables.

Grouped bar graph in R

Note that if we had specified instead of the X-axis would represent the number of cylinders instead of the transmission type.

Space between groups

As we reviewed before, you can change the space between bars. In the case of several groups you can set a two-element vector where the first element is the space between bars of each group (0.4) and the second the space between groups (2.5).

Changing the space between bar groups

Numeric values in groups

Barplots also can be used to summarize a variable in groups given by one or several factors. Consider, for instance, that you want to display the number of cylinders and transmission type based on the mean of the horse power of the cars. You could use the function to create the corresponding table:

Now, you can create the corresponding barplot in R:

Summary by group

Barplot with error bars in R

By default, you can’t create a barplot with error bars. However, the following function will allow you to create a fully customizable barplot with standard error bars.

Barplot with error bars

Even you can add error bars to a barplot, it should be noticed that a boxplot by group could be a better approach to summarize the data in this scenario.

Stacked barplot in R

A stacked bar chart is like a grouped bar graph, but the frequency of the variables are stacked. This type of barplot will be created by default when passing as argument a table with two or more variables, as the argument defaults to .

Stacked bargraph in R

Related to stacked bar plots, there exists similar implementations, like the spine plot and mosaic plot. This type of plots can be created with the and functions of the package.

The mosaic plot allows you to visualize data of two or more quantitative variables, where the area of each rectangle represents the proportion of that variable on each group.

Mosaic plot in R

The spineplot is a special case of a mosaic plot, and its a generalization of the stacked barplot. In this case, unlike stacked barplots, each bar sums up to one.

Spine plot in R

Note that, by default, axes are interchanged with respect to the stacked bar plot you created in the previous section. You can create the equivalent plot transposing the frequency table with the function.

Transposed spine plot

Barplot in R: ggplot2

The library is a well know graphics library in R. You can create a barplot with this library converting the data to data frame and with the and functions. In the argument you have to pass the variable names of your dataframe. In the categorical variable and in the numerical.

Bar plot with geom bar

Horizontal barplot ggplot2

If you want to rotate the previous barplot use the function as follows.

Horizontal ggplot2 barchart
Sours: https://r-coder.com/barplot-r/

barplot: Bar Plots

Description

Creates a bar plot with vertical or horizontal bars.

Usage

barplot(height, …)

# S3 method for default barplot(height, width = 1, space = NULL, names.arg = NULL, legend.text = NULL, beside = FALSE, horiz = FALSE, density = NULL, angle = 45, col = NULL, border = par("fg"), main = NULL, sub = NULL, xlab = NULL, ylab = NULL, xlim = NULL, ylim = NULL, xpd = TRUE, log = "", axes = TRUE, axisnames = TRUE, cex.axis = par("cex.axis"), cex.names = par("cex.axis"), inside = TRUE, plot = TRUE, axis.lty = 0, offset = 0, add = FALSE, ann = !add && par("ann"), args.legend = NULL, …)

# S3 method for formula barplot(formula, data, subset, na.action, horiz = FALSE, xlab = NULL, ylab = NULL, …)

Arguments

height

either a vector or matrix of values describing the bars which make up the plot. If is a vector, the plot consists of a sequence of rectangular bars with heights given by the values in the vector. If is a matrix and is then each bar of the plot corresponds to a column of , with the values in the column giving the heights of stacked sub-bars making up the bar. If is a matrix and is , then the values in each column are juxtaposed rather than stacked.

width

optional vector of bar widths. Re-cycled to length the number of bars drawn. Specifying a single value will have no visible effect unless is specified.

space

the amount of space (as a fraction of the average bar width) left before each bar. May be given as a single number or one number per bar. If is a matrix and is , may be specified by two numbers, where the first is the space between bars in the same group, and the second the space between the groups. If not given explicitly, it defaults to if is a matrix and is , and to 0.2 otherwise.

names.arg

a vector of names to be plotted below each bar or group of bars. If this argument is omitted, then the names are taken from the attribute of if this is a vector, or the column names if it is a matrix.

legend.text

a vector of text used to construct a legend for the plot, or a logical indicating whether a legend should be included. This is only useful when is a matrix. In that case given legend labels should correspond to the rows of ; if is true, the row names of will be used as labels if they are non-null.

beside

a logical value. If , the columns of are portrayed as stacked bars, and if the columns are portrayed as juxtaposed bars.

horiz

a logical value. If , the bars are drawn vertically with the first bar to the left. If , the bars are drawn horizontally with the first at the bottom.

density

a vector giving the density of shading lines, in lines per inch, for the bars or bar components. The default value of means that no shading lines are drawn. Non-positive values of also inhibit the drawing of shading lines.

angle

the slope of shading lines, given as an angle in degrees (counter-clockwise), for the bars or bar components.

col

a vector of colors for the bars or bar components. By default, grey is used if is a vector, and a gamma-corrected grey palette if is a matrix.

border

the color to be used for the border of the bars. Use to omit borders. If there are shading lines, means use the same colour for the border as for the shading lines.

main,sub

overall and sub title for the plot.

xlab

ylab

xlim

ylim

xpd

logical. Should bars be allowed to go outside region?

log

string specifying if axis scales should be logarithmic; see .

axes

logical. If , a vertical (or horizontal, if is true) axis is drawn.

axisnames

logical. If , and if there are (see above), the other axis is drawn (with ) and labeled.

cex.axis

expansion factor for numeric axis labels.

cex.names

expansion factor for axis names (bar labels).

inside

logical. If , the lines which divide adjacent (non-stacked!) bars will be drawn. Only applies when (which it partly is when ).

plot

logical. If , nothing is plotted.

axis.lty

the graphics parameter applied to the axis and tick marks of the categorical (default horizontal) axis. Note that by default the axis is suppressed.

offset

a vector indicating how much the bars should be shifted relative to the x axis.

add

logical specifying if bars should be added to an already existing plot; defaults to .

ann

logical specifying if the default annotation (, , , ) should appear on the plot, see .

args.legend

list of additional arguments to pass to ; names of the list are used as argument names. Only used if is supplied.

formula

a formula where the variables are numeric data to plot against the categorical variables. The formula can have one of three forms:

y ~ x y ~ x1 + x2 cbind(y1, y2) ~ x

, see the examples.

data

a data frame (or list) from which the variables in formula should be taken.

subset

an optional vector specifying a subset of observations to be used.

na.action

a function which indicates what should happen when the data contain values. The default is to ignore missing values in the given variables.

arguments to be passed to/from other methods. For the default method these can include further arguments (such as , and ) and graphical parameters (see ) which are passed to , and .

Value

A numeric vector (or matrix, when ), say , giving the coordinates of all the bar midpoints drawn, useful for adding to the graph.

If is true, use for the midpoints of each group of bars, see example.

References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

Murrell, P. (2005) R Graphics. Chapman & Hall/CRC Press.

See Also

, ; for bars of a continuous variable. , more sophisticated to visualize several categorical variables.

Examples

# NOT RUN { # Formula method barplot(GNP ~ Year, data = longley) barplot(cbind(Employed, Unemployed) ~ Year, data = longley) ## 3rd form of formula - 2 categories : op <- par(mfrow = 2:1, mgp = c(3,1,0)/2, mar = .1+c(3,3:1)) summary(d.Titanic <- as.data.frame(Titanic)) barplot(Freq ~ Class + Survived, data = d.Titanic, subset = Age == "Adult" & Sex == "Male", main = "barplot(Freq ~ Class + Survived, *)", ylab = "# {passengers}", legend = TRUE) # Corresponding table : (xt <- xtabs(Freq ~ Survived + Class + Sex, d.Titanic, subset = Age=="Adult")) # Alternatively, a mosaic plot : mosaicplot(xt[,,"Male"], main = "mosaicplot(Freq ~ Class + Survived, *)", color=TRUE) par(op) # Default method require(grDevices) # for colours tN <- table(Ni <- stats::rpois(100, lambda = 5)) r <- barplot(tN, col = rainbow(20)) #- type = "h" plotting *is* 'bar'plot lines(r, tN, type = "h", col = "red", lwd = 2) barplot(tN, space = 1.5, axisnames = FALSE, sub = "barplot(..., space= 1.5, axisnames = FALSE)") barplot(VADeaths, plot = FALSE) barplot(VADeaths, plot = FALSE, beside = TRUE) mp <- barplot(VADeaths) # default tot <- colMeans(VADeaths) text(mp, tot + 3, format(tot), xpd = TRUE, col = "blue") barplot(VADeaths, beside = TRUE, col = c("lightblue", "mistyrose", "lightcyan", "lavender", "cornsilk"), legend = rownames(VADeaths), ylim = c(0, 100)) title(main = "Death Rates in Virginia", font.main = 4) hh <- t(VADeaths)[, 5:1] mybarcol <- "gray20" mp <- barplot(hh, beside = TRUE, col = c("lightblue", "mistyrose", "lightcyan", "lavender"), legend = colnames(VADeaths), ylim = c(0,100), main = "Death Rates in Virginia", font.main = 4, sub = "Faked upper 2*sigma error bars", col.sub = mybarcol, cex.names = 1.5) segments(mp, hh, mp, hh + 2*sqrt(1000*hh/100), col = mybarcol, lwd = 1.5) stopifnot(dim(mp) == dim(hh)) # corresponding matrices mtext(side = 1, at = colMeans(mp), line = -2, text = paste("Mean", formatC(colMeans(hh))), col = "red") # Bar shading example barplot(VADeaths, angle = 15+10*1:5, density = 20, col = "black", legend = rownames(VADeaths)) title(main = list("Death Rates in Virginia", font = 4)) # Border color barplot(VADeaths, border = "dark blue") # } # NOT RUN { <!-- % lwd = 2 &lt;&lt; not passed --> # } # NOT RUN { <!-- %notyet barplot(VADeaths, inside = FALSE, main = "barplot(*, inside = FALSE)") --> # } # NOT RUN { # Log scales (not much sense here) barplot(tN, col = heat.colors(12), log = "y") barplot(tN, col = gray.colors(20), log = "xy") # Legend location barplot(height = cbind(x = c(465, 91) / 465 * 100, y = c(840, 200) / 840 * 100, z = c(37, 17) / 37 * 100), beside = FALSE, width = c(465, 840, 37), col = c(1, 2), legend.text = c("A", "B"), args.legend = list(x = "topleft")) # }
Sours: https://www.rdocumentation.org/packages/graphics/versions/3.6.2/topics/barplot
  1. Warframe prime accessories
  2. Montgomery county judiciary
  3. Rockler router table
  4. Ford 2000 tractor
  5. Bojack horseman episodes

Bar Plots

Create barplots with the barplot(height) function, where height is a vector or matrix. If height is a vector, the values determine the heights of the bars in the plot. If height is a matrix and the option beside=FALSE then each bar of the plot corresponds to a column of height, with the values in the column giving the heights of stacked “sub-bars”. If height is a matrix and beside=TRUE, then the values in each column are juxtaposed rather than stacked. Include option names.arg=(character vector) to label the bars. The option horiz=TRUE to createa a horizontal barplot.

Simple Bar Plot

simple barplot click to view

horizontal barplot click to view

(To practice making a simple bar plot in R, try this interactive video.)

Stacked Bar Plot

stacked barplot click to view

Grouped Bar Plot

grouped barplot click to view

Notes

Bar plots need not be based on counts or frequencies. You can create bar plots that represent means, medians, standard deviations, etc. Use the aggregate( ) function and pass the results to the barplot( ) function.

By default, the categorical axis line is suppressed. Include the option axis.lty=1 to draw it.

With many bars, bar labels may start to overlap. You can decrease the font size using the cex.names = option. Values smaller than one will shrink the size of the label. Additionally, you can use graphical parameters such as the following to help text spacing:

 Barplot with graphic parameters click to view

 

Sours: https://www.statmethods.net/graphs/bar.html

R - Bar Charts



A bar chart represents data in rectangular bars with length of the bar proportional to the value of the variable. R uses the function barplot() to create bar charts. R can draw both vertical and Horizontal bars in the bar chart. In bar chart each of the bars can be given different colors.

Syntax

The basic syntax to create a bar-chart in R is −

barplot(H,xlab,ylab,main, names.arg,col)

Following is the description of the parameters used −

  • H is a vector or matrix containing numeric values used in bar chart.
  • xlab is the label for x axis.
  • ylab is the label for y axis.
  • main is the title of the bar chart.
  • names.arg is a vector of names appearing under each bar.
  • col is used to give colors to the bars in the graph.

Example

A simple bar chart is created using just the input vector and the name of each bar.

The below script will create and save the bar chart in the current R working directory.

Live Demo

# Create the data for the chart H <- c(7,12,28,3,41) # Give the chart file a name png(file = "barchart.png") # Plot the bar chart barplot(H) # Save the file dev.off()

When we execute above code, it produces following result −

Bar Chart using R

Bar Chart Labels, Title and Colors

The features of the bar chart can be expanded by adding more parameters. The main parameter is used to add title. The col parameter is used to add colors to the bars. The args.name is a vector having same number of values as the input vector to describe the meaning of each bar.

Example

The below script will create and save the bar chart in the current R working directory.

Live Demo

# Create the data for the chart H <- c(7,12,28,3,41) M <- c("Mar","Apr","May","Jun","Jul") # Give the chart file a name png(file = "barchart_months_revenue.png") # Plot the bar chart barplot(H,names.arg=M,xlab="Month",ylab="Revenue",col="blue", main="Revenue chart",border="red") # Save the file dev.off()

When we execute above code, it produces following result −

Bar Chart with title using R

Group Bar Chart and Stacked Bar Chart

We can create bar chart with groups of bars and stacks in each bar by using a matrix as input values.

More than two variables are represented as a matrix which is used to create the group bar chart and stacked bar chart.

# Create the input vectors. colors = c("green","orange","brown") months <- c("Mar","Apr","May","Jun","Jul") regions <- c("East","West","North") # Create the matrix of the values. Values <- matrix(c(2,9,3,11,9,4,8,7,3,12,5,2,8,10,11), nrow = 3, ncol = 5, byrow = TRUE) # Give the chart file a name png(file = "barchart_stacked.png") # Create the bar chart barplot(Values, main = "total revenue", names.arg = months, xlab = "month", ylab = "revenue", col = colors) # Add the legend to the chart legend("topleft", regions, cex = 1.3, fill = colors) # Save the file dev.off()  Stacked Bar Chart using R
Sours: https://www.tutorialspoint.com/r/r_bar_charts.htm

R barplot in

Basic R barplot customization


This is the most basic barplot you can build with R and the barplot() funtion. It was described in graph #208.

This post describes how to custom this basic barplot.


Here are 2 examples showing how to custom the barplot color:

  • uniform color with , asking one color only
  • using a palette coming from
  • change border color with the argument

Usual customizations with , , and .


Usual customizations with , , and .


It is possible to control the space between bars and the width of the bars using and .

Can be usefull to represent the number of value behind each bar.


Change bar texture with the and arguments.

Related chart types


Barplot

Spider / Radar

Wordcloud

Parallel

Lollipop

Circular Barplot

Sours: https://www.r-graph-gallery.com/209-the-options-of-barplot.html
Bar Charts using ggplot geom_bar - R Lesson 16

Barplot





Welcome to the barplot section of the R graph gallery. A barplot is used to display the relationship between a numeric and a categorical variable. This section also include stacked barplot and grouped barplot where two levels of grouping are shown. If you're looking to go further, this online course offers good material for barcharts with ggplot2.

Step by step - and


allows to build barplot thanks to the function. The examples below will guide you through the basics of this tool:



Base R and the function


Basic R can build quality barplots thanks to the function. Here is a list of examples guiding you through the most common customization you will need.

Related chart types


Barplot

Spider / Radar

Wordcloud

Parallel

Lollipop

Circular Barplot

Sours: https://www.r-graph-gallery.com/barplot.html

You will also like:

ggplot2 barplots : Quick start guide - R software and data visualization

This R tutorial describes how to create a barplot using R software and ggplot2 package.

The function geom_bar() can be used.

ggplot2 barplot - R software and data visualization


Data

Data derived from ToothGrowth data sets are used. ToothGrowth describes the effect of Vitamin C on Tooth growth in Guinea pigs.

  • len : Tooth length
  • dose : Dose in milligrams (0.5, 1, 2)

Create barplots

ggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualization

Change the width and the color of bars :

ggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualization

Choose which items to display :

ggplot2 barplot - R software and data visualization

Bar plot with labels

ggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualization

Barplot of counts

In the R code above, we used the argument stat = “identity” to make barplots. Note that, the default value of the argument stat is “bin”. In this case, the height of the bar represents the count of cases in each category.

To make a barplot of counts, we will use the mtcars data sets :

ggplot2 barplot - R software and data visualization

Change outline colors

Barplot outline colors can be automatically controlled by the levels of the variable dose :

ggplot2 barplot - R software and data visualization

It is also possible to change manually barplot line colors using the functions :

  • scale_color_manual() : to use custom colors
  • scale_color_brewer() : to use color palettes from RColorBrewer package
  • scale_color_grey() : to use grey color palettes

ggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualization

Read more on ggplot2 colors here : ggplot2 colors

Change fill colors

In the R code below, barplot fill colors are automatically controlled by the levels of dose :

ggplot2 barplot - R software and data visualization

It is also possible to change manually barplot fill colors using the functions :

  • scale_fill_manual() : to use custom colors
  • scale_fill_brewer() : to use color palettes from RColorBrewer package
  • scale_fill_grey() : to use grey color palettes

ggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualization

Use black outline color :

ggplot2 barplot - R software and data visualization

Read more on ggplot2 colors here : ggplot2 colors

ggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualization

The allowed values for the arguments legend.position are : “left”,“top”, “right”, “bottom”.

Read more on ggplot legend : ggplot2 legend

The function scale_x_discrete can be used to change the order of items to “2”, “0.5”, “1” :

ggplot2 barplot - R software and data visualization

Data

Data derived from ToothGrowth data sets are used. ToothGrowth describes the effect of Vitamin C on tooth growth in Guinea pigs. Three dose levels of Vitamin C (0.5, 1, and 2 mg) with each of two delivery methods [orange juice (OJ) or ascorbic acid (VC)] are used :

  • len : Tooth length
  • dose : Dose in milligrams (0.5, 1, 2)
  • supp : Supplement type (VC or OJ)

Create barplots

A stacked barplot is created by default. You can use the function position_dodge() to change this. The barplot fill color is controlled by the levels of dose :

ggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualization

Change the color manually :

ggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualization

Add labels

Add labels to a dodged barplot :

ggplot2 barplot - R software and data visualization

Add labels to a stacked barplot : 3 steps are required

  1. Sort the data by dose and supp : the package plyr is used
  2. Calculate the cumulative sum of the variable len for each dose
  3. Create the plot

ggplot2 barplot - R software and data visualization

If you want to place the labels at the middle of bars, you have to modify the cumulative sum as follow :

ggplot2 barplot - R software and data visualization

If the variable on x-axis is numeric, it can be useful to treat it as a continuous or a factor variable depending on what you want to do :

ggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualization

The helper function below will be used to calculate the mean and the standard deviation, for the variable of interest, in each group :

Summarize the data :

The function geom_errorbar() can be used to produce a bar graph with error bars :

ggplot2 barplot - R software and data visualization

ggplot2 barplot - R software and data visualization

Change fill colors manually :

ggplot2 barplot - R software and data visualizationggplot2 barplot - R software and data visualization

This analysis has been performed using R software (ver. 3.1.2) and ggplot2 (ver. 1.0.0)


Enjoyed this article? I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Twitter, Facebook or Linked In.

Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
Avez vous aimé cet article? Je vous serais très reconnaissant si vous aidiez à sa diffusion en l'envoyant par courriel à un ami ou en le partageant sur Twitter, Facebook ou Linked In.

Montrez-moi un peu d'amour avec les like ci-dessous ... Merci et n'oubliez pas, s'il vous plaît, de partager et de commenter ci-dessous!





This page has been seen 1776176 times
Sours: http://www.sthda.com/english/wiki/ggplot2-barplots-quick-start-guide-r-software-and-data-visualization


4963 4964 4965 4966 4967