The pgfplots
package is a powerful tool, based on tikz
, dedicated to create scientific graphs.
- 32D plots
- 43D Plots
Microsoft plots the end of Visual Basic. Microsoft said this week that it will support Visual Basic on.NET 5.0 but will no longer add new features or evolve the language. 'Starting with.NET 5, Visual Basic will support Class Library, Console, Windows Forms, WPF, Worker Service, and ASP.NET Core Web API to provide a good path forward for the existing VB customer who want to migrate their applications to. It is also easy to plot a variety of symbols in a variety of colours at each of the data points. This will be very useful when plotting more than one set of data in the next module. Create a plot of y = t 3 - t using 21 equally spaced points on -2, 2 with a red '.' at each point and points joined by a dashed line.
Introduction
Pgfplots is a visualization tool to make simpler the inclusion of plots in your documents. The basic idea is that you provide the input data/formula and pgfplots does the rest.
Since pgfplot is based on tikz the plot must be inside a tikzpicture environment. Then the environment declaration begin{axis}
, end{axis}
will set the right scaling for the plot, check the Reference guide for other axis environments.
To add an actual plot, the command addplot[color=red]{log(x)};
is used. Inside the squared brackets some options can be passed, in this case we set the colour of the plot to red; the squared brackets are mandatory, if no options are passed leave a blank space between them. Inside the curly brackets you put the function to plot. Is important to remember that this command must end with a semicolon;.
To put a second plot next to the first one declare a new tikzpicture environment. Do not insert a new line, but a small blank gap, in this case hskip 10pt
will insert a 10pt-wide blank space.
The rest of the syntax is the same, except for the addplot3 [surf,]{exp(-x^2-y^2)*x};
. This will add a 3dplot, and the option surf inside squared brackets declares that it's a surface plot. The function to plot must be placed inside curly brackets. Again, don't forget to put a semicolon; at the end of the command.
Note: It's recommended as a good practice to indent the code - see the second plot in the example above - and to add a comma , at the end of each option passed to addplot
. This way the code is more readable and is easier to add further options if needed.
The document preamble
To include pgfplots in your document is very easy, add the next line to your preamble and that's it:
usepackage{pgfplots}
Some additional tweaking for this package can be made in the preamble. To change the size of each plot and also guarantee backwards compatibility (recommended) add the next line:
pgfplotsset{width=10cm,compat=1.9}
This changes the size of each pgfplot figure to 10 centimeters, which is huge; you may use different units (pt, mm, in). The compat parameter is for the code to work on the package version 1.9 or later.
Since LaTeX was not initially conceived with plotting capabilities in mind, when there are several pgfplot figures in your document or they are very complex, it takes a considerable amount of time to render them. To improve the compiling time you can configure the package to export the figures to separate PDF files and then import them into the document, add the code shown below to the preamble:
usepgfplotslibrary{external}
tikzexternalize
See this help article for further details on how to set up tikz-externalization in your Overleaf project.
2D plots
Pgfplots 2D plotting functionalities are vast, you can personalize your plots to look exactly what you want. Nevertheless, the default options usually give very good result, so all you have to do is feed the data and LaTeX will do the rest:
Plotting mathematical expressions
To plot mathematical expressions is really easy:
Let's analyse the new commands line by line:
axis lines = left
.- This will set the axis only on the left and bottom sides of the plot, instead of the default box. Further customisation options at the reference guide.
xlabel = $x$
andylabel = {$f(x)$}
.- Self-explanatory parameter names, these will let you put a label on the horizontal and vertical axis. Notice the ylabel value in between curly brackets, this brackets tell pgfplots how to group the text. The xlabel could have had brackets too. This is useful for complicated labels that may confuse pgfplot.
addplot
.- This will add a plot to the axis, general usage was described at the introduction. There are two new parameters in this example.
domain=-10:10
.- This establishes the range of values of x{displaystyle x}.
samples=100
.- Determines the number of points in the interval defined by domain. The greater the value of samples the sharper the graph you get, but it will take longer to render.
addlegendentry{$x^2 - 2x - 1$}
.- This adds the legend to identify the function x2−2x−1{displaystyle x^{2}-2x-1}.
To add another graph to the plot just write a new addplot
entry.
Plotting from data
Scientific research often yields data that has to be analysed. The next example shows how to plot data with pgfplots:
There are some new commands and parameters here:
title={Temperature dependence of CuSO$_4cdot$5H$_2$O solubility}
.- As you might expect, assigns a title to the figure. The title will be displayed above the plot.
xmin=0, xmax=100, ymin=0, ymax=120
.- Minimum and maximum bounds of the x and y axes.
xtick={0,20,40,60,80,100}, ytick={0,20,40,60,80,100,120}
.- Points where the marks are placed. If empty the ticks are set automatically.
legend pos=north west
.- Position of the legend box. Check the reference guide for more options.
ymajorgrids=true
.- This Enables/disables grid lines at the tick positions on the y axis. Use
xmajorgrids
to enable grid lines on the x axis.
grid style=dashed
.- Self-explanatory. To display dashed grid lines.
mark=square
.- This draws a squared mark at each point in the cordinates array. Each mark will be connected with the next one by a straight line.
coordinates {(0,23.1)(10,27.5)(20,32)..}
- Coordinates of the points to be plotted. This is the data you want analyse graphically.
If the data is in a file, which is the case most of the time; instead of the commands addplot
and coordinates
you should use addplot table {file_with_the_data.dat}
, the rest of the options are valid in this environment.
Scatter plots
Scatter plots are used to represent information by using some kind of marks, these are common, for example, when computing statistical regression. Lets start with some data, the sample below is to show the structure of the data file we are going to plot (see the end of this section for a link to the LaTeX source and the data file):
GPA ma ve co un
Tv pilots 2021. 3.45 643 589 3.76 3.52
2.78 558 512 2.87 2.91
2.52 583 503 2.54 2.4
3.67 685 602 3.83 3.47
3.24 592 538 3.29 3.47
2.1 562 486 2.64 2.37
The next example is a scatter plot of the first two columns in this table:
The parameters passed to the axis and addplot environments can also be used in a data plot, except for scatter. Below the description of the code:
enlarge limits=false
- This will shrink the axes so the point with maximum and minimum values lay on the edge of the plot.
only marks
- Really explicit, will put a mark on each point.
scatter
- When scatter is used the points are coloured depending on a value, the colour is given by the
meta
parameter explained below.
mark=halfcircle*
- The kind of mark to use on each point, check the reference guide for a list of possible values.
mark size=2.9pt
- The size of each mark, different units can be used.
table[meta=ma]{scattered_example.dat};
- Here the table command tells latex that the data to be plotted is in a file. The meta=ma parameter is passed to choose the column that determines the colour of each point. Inside curly brackets is the name of the data file.
Bar graphs
Bar graphs (also known as bar charts and bar plots) are used to display gathered data, mainly statistical data about a population of some sort. Bar plots in pgfplots are highly customisable, but here we are going to show an example that 'just works':
The figure starts with the already explained declaration of the tikzpicture and axis environments, but the axis declaration has a number of new parameters:
x tick label style={/pgf/number format/1000 sep=}
- This piece of code defines a complete style for the plot. With this style you may include several
addplot
commands within this axis environment, they will fit and look nice together with no further tweaks (theybar
parameter described below is mandatory for this to work).
enlargelimits=0.05
.- Enlarging the limits in a bar plot is necessary because these kind of plots often require some extra space above the bar to look better and/or add a label. Then number 0.05 is relative to the total height of of the plot.
legend style={at={(0.5,-0.2)}, anchor=north,legend columns=-1}
- Again, this will work just fine most of the time. If anything, change the value of -0.2 to locate the legend closer/farther from the x-axis.
ybar interval=0.7,
- Thickness of each bar. 1 meaning the bars will be one next to the other with no gaps and 0 meaning there will be no bars, but only vertical lines.
The coordinates
in this kind of plot determine the base point of the bar and its height.
The labels on the y-axis will show up to 4 digits. If in the numbers you are working with are greater than 9999 pgfplot will use the same notation as in the example.
3D Plots
pgfplots has the 3d Plotting capabilities that you may expect in a plotting software.
Plotting mathematical expressions
There's a simple example about this at the introduction, let's work on something slightly more complex:
Most of the commands here have already been explained, but there are 3 new things:
hide axis
- This option in the axis environment is self descriptive, the axis won't be shown.
colormap/cool
- Is the colour scheme to be used in the plot. Check the reference guide for more colour schemes.
mesh
- This option is self-descriptive too, check also the surf parameter in the introductory example.
Note: When working with trigonometric functions pgfplots uses degrees as default units, if the angle is in radians (as in this example) you have to use de deg
function to convert to degrees.
Contour plots
In pgfplots is possible to plot contour plots, but the data has have to be pre calculated by an external program. Let's see:
This is a plot of some contour lines for the same equation used in the previous section. Plots buzon. The value of the title parameter is inside curly brackets because it contains a comma, so we use the grouping brackets to avoid any confusion with the other parameters passed to the begin{axis}
declaration. There are two new commands:
view={0}{90}
- This changes the view of the plot. The parameter is passed to the axis environment, which means this can be used in any other type of 3d plot. The first value is a rotation, in degrees, around the z-axis; the second value is to rotate the view around the x-axis. In this example when we combine a 0° rotation around the z-axis and a 90° rotation around the x-axis we end up with a view of the plot from top.
contour gnuplot={levels={0.8, 0.4, 0.2, -0.2}}
- This line of code does two things: First, tells LaTeX to use the external software gnuplot to compute the contour lines; this works fine in ShareLaTeX but if you want to use this command in your local LaTeX installation you have to install gnuplot first (matlab will also work, in such case write matlab instead of gnuplot in the command). Second, the sub parameter
levels
is a list of values of elevation levels where the contour lines are to be computed.
Microsoft Plots End Visual Basic
Plotting a surface from data
To plot a set of data into a 3d surface all we need is the coordinates of each point. These coordinates could be an unordered set or, in this case, a matrix:
The points passed to the coordinates
parameter are treated as contained in a 3 x 3 matrix, being a white row space the separator of each matrix row.
All the options for 3d plots in this article apply to data surfaces.
Parametric plot
The syntax for parametric plots is slightly different. Let's see:
There are only two new things in this example: first, the samples y=0
to prevent pgfplots from joining the extreme points of the spiral and; second, the way the function to plot is passed to the addplot3
environment. Each parameter function is grouped inside curly brackets and the three parameters are delimited with parenthesis.
Reference guide
Command/Option/Environment | Description | Possible Values |
---|---|---|
axis | Normal plots with linear scaling | |
semilogxaxis | logaritmic scaling of x and normal scaling for y | |
semilogyaxis | logaritmic scaling for y and normal scaling for x | |
loglogaxis | logaritmic scaling for the x and y axes | |
axis lines | changes the way the axes are drawn. default is 'box | box, left, middle, center, right, none |
legend pos | position of the legend box | south west, south east, north west, north east, outer north east |
mark | type of marks used in data plotting. When a single-character is used, the character appearance is very similar to the actual mark. | *, x , +, |, o, asterisk, star, 10-pointed star, oplus, oplus*, otimes, otimes*, square, square*, triangle, triangle*, diamond, halfdiamond*, halfsquare*, right*, left*, Mercedes star, Mercedes star flipped, halfcircle, halfcircle*, pentagon, pentagon*, cubes. (cubes only work on 3d plots). |
colormap | colour scheme to be used in a plot, can be personalized but there are some predefined colormaps | hot, hot2, jet, blackwhite, bluered, cool, greenyellow, redyellow, violet. |
Further reading
For more information see:
- The pgfplots package documentation.
Overleaf guides
LaTeX Basics
Mathematics
Figures and tables
References and Citations
Languages
Document structure
Formatting
Fonts
Presentations
Commands
Field specific
Class files
Advanced TeX/LaTeX
Feedback on Our Courses
'As usual - I already love the course on Irresistible Fiction, rewriting a lot and improving greatly even after the first lesson. Thanks so much for the great courses.'
- Kitty Safken
'Essentials of Fiction proved that I could indeed write and I wrote every day, much to my boyfriend's dismay (waa sniff).'
- Jill Gardner
'I am loving the course and the peer interaction on the blog is fantastic!!!'
- Bill Lane
'I'm enjoying the weekly email course, Essentials of Poetry Writing. Thank you for offering a basic, no nonsense basic poetry course at a reasonable price.'
- Michele
'Thank you for all the material in this course. I have learnt so much.'
- Jacqueline Tasik
How sloths reproduce. All sloths are solitary by nature, and come together only to mate. Two-toed male sloths use anal secretions on tree branches to advertise their presence while females in season emit high-pitched mating calls. Males move toward the screaming female, sometimes fighting each other if two manage to reach her at once. The gestation period for a three toed lasts for 150 days. Sloths give birth while hanging in the trees. The young ones of sloths are born with claws and wrap themselves around their mother for nine months after their birth. Female sloths, nurture their newborn for six months. Reproduction The pale- and brown-throated three-toed sloths mate seasonally, while the maned three-toed sloth breeds at any time of the year. The reproduction of pygmy three-toed sloths is unknown. Litters are of one newborn only, after six months' gestation for three-toed, and 12 months' for two-toed. Sloths mate between Semptember and November, which is the dry season in the atlantic forest. The pregnancy lasts for six to eleven months and results in only one offspring per year. The sloth gives birth hanging upside-down in a tree, and the newborn sloth crawls up onto its mother's stomach. The newborn sloth is born already very well developed.
Plots End Visual Basic
'I was pleasantly surprised at the quality of the lessons and feel they were very helpful in introducing new ideas and perspectives to my writing. I am sure I will go back frequently to review them for reference during many of my future writing projects. Thanks again!'
- Jenny Jacks
Tv pilots 2021. 3.45 643 589 3.76 3.52
2.78 558 512 2.87 2.91
2.52 583 503 2.54 2.4
3.67 685 602 3.83 3.47
3.24 592 538 3.29 3.47
2.1 562 486 2.64 2.37
The next example is a scatter plot of the first two columns in this table:
The parameters passed to the axis and addplot environments can also be used in a data plot, except for scatter. Below the description of the code:
enlarge limits=false
- This will shrink the axes so the point with maximum and minimum values lay on the edge of the plot.
only marks
- Really explicit, will put a mark on each point.
scatter
- When scatter is used the points are coloured depending on a value, the colour is given by the
meta
parameter explained below.
mark=halfcircle*
- The kind of mark to use on each point, check the reference guide for a list of possible values.
mark size=2.9pt
- The size of each mark, different units can be used.
table[meta=ma]{scattered_example.dat};
- Here the table command tells latex that the data to be plotted is in a file. The meta=ma parameter is passed to choose the column that determines the colour of each point. Inside curly brackets is the name of the data file.
Bar graphs
Bar graphs (also known as bar charts and bar plots) are used to display gathered data, mainly statistical data about a population of some sort. Bar plots in pgfplots are highly customisable, but here we are going to show an example that 'just works':
The figure starts with the already explained declaration of the tikzpicture and axis environments, but the axis declaration has a number of new parameters:
x tick label style={/pgf/number format/1000 sep=}
- This piece of code defines a complete style for the plot. With this style you may include several
addplot
commands within this axis environment, they will fit and look nice together with no further tweaks (theybar
parameter described below is mandatory for this to work).
enlargelimits=0.05
.- Enlarging the limits in a bar plot is necessary because these kind of plots often require some extra space above the bar to look better and/or add a label. Then number 0.05 is relative to the total height of of the plot.
legend style={at={(0.5,-0.2)}, anchor=north,legend columns=-1}
- Again, this will work just fine most of the time. If anything, change the value of -0.2 to locate the legend closer/farther from the x-axis.
ybar interval=0.7,
- Thickness of each bar. 1 meaning the bars will be one next to the other with no gaps and 0 meaning there will be no bars, but only vertical lines.
The coordinates
in this kind of plot determine the base point of the bar and its height.
The labels on the y-axis will show up to 4 digits. If in the numbers you are working with are greater than 9999 pgfplot will use the same notation as in the example.
3D Plots
pgfplots has the 3d Plotting capabilities that you may expect in a plotting software.
Plotting mathematical expressions
There's a simple example about this at the introduction, let's work on something slightly more complex:
Most of the commands here have already been explained, but there are 3 new things:
hide axis
- This option in the axis environment is self descriptive, the axis won't be shown.
colormap/cool
- Is the colour scheme to be used in the plot. Check the reference guide for more colour schemes.
mesh
- This option is self-descriptive too, check also the surf parameter in the introductory example.
Note: When working with trigonometric functions pgfplots uses degrees as default units, if the angle is in radians (as in this example) you have to use de deg
function to convert to degrees.
Contour plots
In pgfplots is possible to plot contour plots, but the data has have to be pre calculated by an external program. Let's see:
This is a plot of some contour lines for the same equation used in the previous section. Plots buzon. The value of the title parameter is inside curly brackets because it contains a comma, so we use the grouping brackets to avoid any confusion with the other parameters passed to the begin{axis}
declaration. There are two new commands:
view={0}{90}
- This changes the view of the plot. The parameter is passed to the axis environment, which means this can be used in any other type of 3d plot. The first value is a rotation, in degrees, around the z-axis; the second value is to rotate the view around the x-axis. In this example when we combine a 0° rotation around the z-axis and a 90° rotation around the x-axis we end up with a view of the plot from top.
contour gnuplot={levels={0.8, 0.4, 0.2, -0.2}}
- This line of code does two things: First, tells LaTeX to use the external software gnuplot to compute the contour lines; this works fine in ShareLaTeX but if you want to use this command in your local LaTeX installation you have to install gnuplot first (matlab will also work, in such case write matlab instead of gnuplot in the command). Second, the sub parameter
levels
is a list of values of elevation levels where the contour lines are to be computed.
Microsoft Plots End Visual Basic
Plotting a surface from data
To plot a set of data into a 3d surface all we need is the coordinates of each point. These coordinates could be an unordered set or, in this case, a matrix:
The points passed to the coordinates
parameter are treated as contained in a 3 x 3 matrix, being a white row space the separator of each matrix row.
All the options for 3d plots in this article apply to data surfaces.
Parametric plot
The syntax for parametric plots is slightly different. Let's see:
There are only two new things in this example: first, the samples y=0
to prevent pgfplots from joining the extreme points of the spiral and; second, the way the function to plot is passed to the addplot3
environment. Each parameter function is grouped inside curly brackets and the three parameters are delimited with parenthesis.
Reference guide
Command/Option/Environment | Description | Possible Values |
---|---|---|
axis | Normal plots with linear scaling | |
semilogxaxis | logaritmic scaling of x and normal scaling for y | |
semilogyaxis | logaritmic scaling for y and normal scaling for x | |
loglogaxis | logaritmic scaling for the x and y axes | |
axis lines | changes the way the axes are drawn. default is 'box | box, left, middle, center, right, none |
legend pos | position of the legend box | south west, south east, north west, north east, outer north east |
mark | type of marks used in data plotting. When a single-character is used, the character appearance is very similar to the actual mark. | *, x , +, |, o, asterisk, star, 10-pointed star, oplus, oplus*, otimes, otimes*, square, square*, triangle, triangle*, diamond, halfdiamond*, halfsquare*, right*, left*, Mercedes star, Mercedes star flipped, halfcircle, halfcircle*, pentagon, pentagon*, cubes. (cubes only work on 3d plots). |
colormap | colour scheme to be used in a plot, can be personalized but there are some predefined colormaps | hot, hot2, jet, blackwhite, bluered, cool, greenyellow, redyellow, violet. |
Further reading
For more information see:
- The pgfplots package documentation.
Overleaf guides
LaTeX Basics
Mathematics
Figures and tables
References and Citations
Languages
Document structure
Formatting
Fonts
Presentations
Commands
Field specific
Class files
Advanced TeX/LaTeX
Feedback on Our Courses
'As usual - I already love the course on Irresistible Fiction, rewriting a lot and improving greatly even after the first lesson. Thanks so much for the great courses.'
- Kitty Safken
'Essentials of Fiction proved that I could indeed write and I wrote every day, much to my boyfriend's dismay (waa sniff).'
- Jill Gardner
'I am loving the course and the peer interaction on the blog is fantastic!!!'
- Bill Lane
'I'm enjoying the weekly email course, Essentials of Poetry Writing. Thank you for offering a basic, no nonsense basic poetry course at a reasonable price.'
- Michele
'Thank you for all the material in this course. I have learnt so much.'
- Jacqueline Tasik
How sloths reproduce. All sloths are solitary by nature, and come together only to mate. Two-toed male sloths use anal secretions on tree branches to advertise their presence while females in season emit high-pitched mating calls. Males move toward the screaming female, sometimes fighting each other if two manage to reach her at once. The gestation period for a three toed lasts for 150 days. Sloths give birth while hanging in the trees. The young ones of sloths are born with claws and wrap themselves around their mother for nine months after their birth. Female sloths, nurture their newborn for six months. Reproduction The pale- and brown-throated three-toed sloths mate seasonally, while the maned three-toed sloth breeds at any time of the year. The reproduction of pygmy three-toed sloths is unknown. Litters are of one newborn only, after six months' gestation for three-toed, and 12 months' for two-toed. Sloths mate between Semptember and November, which is the dry season in the atlantic forest. The pregnancy lasts for six to eleven months and results in only one offspring per year. The sloth gives birth hanging upside-down in a tree, and the newborn sloth crawls up onto its mother's stomach. The newborn sloth is born already very well developed.
Plots End Visual Basic
'I was pleasantly surprised at the quality of the lessons and feel they were very helpful in introducing new ideas and perspectives to my writing. I am sure I will go back frequently to review them for reference during many of my future writing projects. Thanks again!'
- Jenny Jacks
'Thanks very much for this course. It's been really helpful and well-explained. I look forward to any more courses you run.'
- Robin Gott
'I'm learning so much. This course is amazing.'
- Karl Tobar
'Thank you so much!! You're always there.. The course is great. You are always looking forward to the next lesson like a good novel!!!'
- Nuria Alberti
'Thank you for a course that builds writing skills with direction to excellence. Everything was included, possibly more than college courses can offer.'
- Janett Lee Wawrzyniak
'It was a nice journey for me to be able to write in answer to your e-mail lessons. Being able to post the answers on WordPress is exciting. I had not done that before taking your writing class. I plan to take another of your e-mail class, either the 8-week descriptive or the new poetry class.'
- James Sciullo
'The Irresistible Fiction course is going well. I see why it's a bestseller. I can't wait for the next email.'
- Kayode
Microsoft Plots End Basic
'Thank you so much for putting together this writing course. It was of good value to me as it got me started thinking more deeply about my characters. I don't have a lot of time to write, working two jobs, but I am doing the ten-minute exercise with each lesson, and each evening, trying to get in the habit of sitting myself down to write.. I would recommend the course to anyone.'
- Barrie Creamer