user113: I need to plot serial data from Arduino.
I require support for:

Various data formats (e.g. signed, unsigned, 8 bits, 16 bits);
Plots several data on the same axes;
Exports / Imports file data.

As plotting serial data from Arduino is a common need, my question is:
What programs/utilities are available for plotting serial data from Arduino that meet the needs above?
What are the advantages / disadvantages of the method you have suggested?

user25498: I know this is a very old question, but I recently created a mac application that solves this problem very well. You can find more information about it on www.bloonapp.com. There are some demo videos on the website that you can check out.

user16238: I know you were probably after more advanced GUI output, but I managed to replicate a task that one would normally do with an oscilloscope:

using the serial plotter in the Arduino IDE and an ADC module you can get for $3 on eBay. I admit it's a bit crude, but it might be worth playing with the tool for a while, before you invest in Python/Matlab/ect level solutions. It was exceedingly easy to use. It would not take much to add SD card recording to the process.
See: https://edwardmallon.wordpress.com/2016/08/15/using-the-arduino-uno-as-a-basic-data-acquisition-system/

user39585: Serial Plotter is a simple program that I've made with Electron that receives data in the following format:
data1,data2,timestamp; and converts it into a realtime chart.


user3392: You can use MATLAB Student Edition, 
this can save your time for further analysis, too.
You can just open the COM port in MATLAB and plot the received signal and/or save the signal in the workspace or whatever. MATLAB makes everything easy!

user4069: I made an equivalent tool in python that print real time data from ADXL345 accelerometer.
https://github.com/mba7/SerialPort-RealTime-Data-Plotter
may be it will be helpful for someone

Just choose the serial com and speed and sent a serial data on the following format:

3 inputs, every input is a 2 bytes (Two's complement )
6 bytes seperated by a space
the packet is a string terminated by '\n'

Could be easily adapted to change this format 

user186: While I haven't used it myself, "rqt_plot" running on the PC seems to be a popular way to plot data on a PC that comes over a serial port from an Arduino running a sketch that includes the rosserial_arduino library or the ros_arduino_bridge library.

Arduino Oscilloscope Tutorial
rosserial arduino
visualize everything using rqt_plot... my first arduino micro ros project
"7/24: Now that I have the Arduino set up using Kessel, I can visualize the data better using ROS tools"
etc.


user14728: CSV format is most versatile for any data (signed/unsigned, various size and precision). 
Cross-platform (written in Java/Scala) tool Scsvlog can receive/parse CSV strings from serial port / socket, show values and draw charts (up to 8).

user18557: You can try out the software I developed for that propose. It's aimed to be easy to use. See SerialGraphicator - Open Source Free Serial Port Client capable of graph values that are received in JSON format.

user113: Responding to my own question here.. I use Bridge Control Panel as mentioned.
Advantages: Lots of Features.
Disadvantages: Tricky to setup and very poor syntax/error reporting.
To use:
You need to write the Arduino Data over the Serial Port one byte at a time. For an int data type that would look as follows:
// RX8 [h=43] @1Key1 @0Key1
Serial.print("C");
Serial.write(data>>8);
Serial.write(data&0xff);

In Bridge the command to Read Data is:  
RX8 [h=43] @1Key1 @0Key1

RX8 is the read command
[h=43] means the next valid byte is "C" in ASCII
then the High Byte of Key1
then the Low Byte of Key1
It looks like this in Bridge:



user4102: You can try serialchart. It's pretty strait forward program. It does exactly what you asked. The only disadvantage is that it requires data in CSV format (does not meet first point).
Screenshot from project page:


user2810: Nobody had mentioned Processing which is super versatile. You can do a lot more than just plotting but if that's all you want to do you can use the gwoptics library; hook up Arduino and Processing as directed here.

user17188: You might be interested in Telemetry See on Github . It is a communication protocol, highly simple to use, with a clean interface, that enables bidirectionnal communication with Arduino/Mbed devices.
If you don't want to read this long post, see A walkthrough of all the awesome features in it
The power of this library comes from the desktop command line interface (that requires no programming skills in python).
It is able to open high-performance plots (much higher that what can be done with matplotlib) just by typing a command.
The protocol supports complexes data structures. For now arrays and sparse arrays can be send from the embedded board. 
The plots opened from the command line interface understand the type of data, and for arrays, rather than plotting each sample versus time, sample will be plotted against its own index.
In a near future, it is planned to add support for spatial coordinates (xyz data), that will allow you to plot immediately spatial data. Once, again the plots will figure everything out, plot your data in 2D or 3D space and you can focus on developping your app.
I believe those features are simply unique for such a project.
Pytelemetry CLI 
Once installed with pip, the command line can be started with
pytlm

Then you can connect, ls(list) received topics, print data received on a topic, pub(publish) on a topic, or open a plot on a topic to display received data in real-time


Get started
Wiki
PS : I am the author. 
I developed it because I could not find a solution that would allow me to:

write quickly PC scripts to control an Arduino 
debug quickly
plot complex data (not just a time varying value)

all of the above without using proprietary solutions or bloated GUIs.
Using this library, the time to setup a communication between Arduino and PC went from usually half a day to 5 minutes.

user86: I use Matplotlib for any plotting I need to do.
It's not arduino specific in any way, but it is a very excellent Python plotting toolkit.
I've built a number of applications that plot data from a variety of microcontrollers in real-time to a graph, but that was really more of a two-step process: 1. Get data from device into computer, 2. plot realtime data.
Really, I think you should break your question into two parts:

How do you get data from an Arduino/Any serial device into a computer easily.
What is a good plotting library that is easy to use.


user11628: SerialPlot (free).  It does everything you require and much more.
Other features:

Zoom in on data
Click on datapoints to see values
Send commands back to Arduino
Adjust total number of points plotted
Ability to show each channel in its own autoscaled plot
Interprets binary, ASCII and custom packets
Demo mode lets you play with features



user313: GnuPlot
Advantages: It's very flexible, scriptable, and freely available. 
Disadvantages: A bit complex to learn (but I figured out how to get started in a few minutes, and quite functional in an hour or two), runs in a terminal window (if you consider that a disadvantage). 
Something I found very useful was to script it to reload my terminal program's logfile periodically so i got a dynamic graph as my experiment progressed.


Edit: Here is the GnuPlot script that plots it:
#!/usr/local/bin/gnuplot -rv
# Note reverse video here ^^^   til I find a way to put it in the script

# gpFanCtl - Plots DiffThermo fan controller data (aloft, alow, Tdiff, fan-state).
# $Id: gpFanCtl,v 1.8 2014-04-28 09:40:51-04 jrobert Exp jrobert $

set terminal x11 1 noraise
set xtics 3600
set mxtics 4
set xdata time

set ytics 1 nomirror
set mytics 2

set y2range [0:3]
set y2tics 1
set my2tics 4

set grid
set ylabel 'Temperature, degC'
set y2label 'Tdiff, degC' textcolor rgb '#00CD63'

cd '/Users/jrobert/Desktop'
plot "Logfile.txt" using ($0*4):1 title "Aloft" with lines lc rgb "red",\
     "Logfile.txt" using ($0*4):2 title "Alow" with lines lc rgb "#3982FF",\
     "Logfile.txt" using ($0*4):3 title "Tdiff" with lines lc rgb "#00CD63" axis x1y2,\
     "Logfile.txt" using ($0*4):4 title "Fan" with lines lc rgb "orange" axis x1y2;
pause 4
refresh
reread


user3281: There are some good applications for visualizing the serial data, including:

MegunoLink ($39.95; Lite free) - plotting, logging, programming, reporting and more.


Electric UI ($80; free for students) - cross platform, fully featured code based GUI framework for hardware.


MakerPlot ($59) - digital & analog plotting, monitoring, custom interfaces and more.


ArduinoPlot (free) - simple plotting.


arduino-plotter (free) - easy, light-weight plotting with support for all primitive types


Bridge Control Panel (free) - logging, plotting, and more.


RealtimePlotter (free) - 6 channels data plotting.


SimPlot (free) - 4 channel plotting.


Arduino Serial Plotter (free) - built in Arduino Editor under Tools > Serial Plotter.



(This is a community wiki, you can expand the list.)

113: <p>I need to plot serial data from Arduino.</p>

<p>I require support for:</p>

<ol>
<li>Various data formats (e.g. signed, unsigned, 8 bits, 16 bits);</li>
<li>Plots several data on the same axes;</li>
<li>Exports / Imports file data.</li>
</ol>

<p>As plotting serial data from Arduino is a common need, my question is:
What programs/utilities are available for plotting serial data from Arduino that meet the needs above?</p>

<p>What are the advantages / disadvantages of the method you have suggested?</p>
 25498: <p>I know this is a very old question, but I recently created a mac application that solves this problem very well. You can find more information about it on www.bloonapp.com. There are some demo videos on the website that you can check out.<a href="https://i.stack.imgur.com/GiB7R.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/GiB7R.jpg" alt="enter image description here"></a></p>
 16238: <p>I know you were probably after more advanced GUI output, but I managed to replicate a task that one would normally do with an oscilloscope:
<a href="https://i.stack.imgur.com/VhOIW.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/VhOIW.jpg" alt="Arduino Serial Plotter output"></a></p>

<p>using the serial plotter in the Arduino IDE and an ADC module you can get for $3 on eBay. I admit it's a bit crude, but it might be worth playing with the tool for a while, before you invest in Python/Matlab/ect level solutions. It was exceedingly easy to use. It would not take much to add SD card recording to the process.</p>

<p>See: <a href="https://edwardmallon.wordpress.com/2016/08/15/using-the-arduino-uno-as-a-basic-data-acquisition-system/" rel="nofollow noreferrer">https://edwardmallon.wordpress.com/2016/08/15/using-the-arduino-uno-as-a-basic-data-acquisition-system/</a></p>
 39585: <p><a href="https://github.com/ItayRosen/Serial-Plotter" rel="nofollow noreferrer">Serial Plotter</a> is a simple program that I've made with Electron that receives data in the following format:
<code>data1,data2,timestamp;</code> and converts it into a realtime chart.</p>

<p><a href="https://i.stack.imgur.com/ab7to.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ab7to.png" alt="enter image description here"></a></p>
 3392: <p>You can use <a href="http://www.mathworks.com/academia/student_version/" rel="nofollow">MATLAB Student Edition</a>, 
this can save your time for further analysis, too.
You can just open the COM port in MATLAB and plot the received signal and/or save the signal in the workspace or whatever. MATLAB makes everything easy!</p>
 4069: <p>I made an equivalent tool in python that print real time data from ADXL345 accelerometer.
<a href="https://github.com/mba7/SerialPort-RealTime-Data-Plotter" rel="nofollow noreferrer">https://github.com/mba7/SerialPort-RealTime-Data-Plotter</a></p>

<p>may be it will be helpful for someone</p>

<p><img src="https://i.stack.imgur.com/b1Ywo.png" alt="enter image description here"></p>

<p>Just choose the serial com and speed and sent a serial data on the following format:</p>

<ul>
<li>3 inputs, every input is a 2 bytes (Two's complement )</li>
<li>6 bytes seperated by a space</li>
<li>the packet is a string terminated by '\n'</li>
</ul>

<p>Could be easily adapted to change this format </p>
 186: <p>While I haven't used it myself, <a href="http://wiki.ros.org/rqt_plot" rel="nofollow">"rqt_plot"</a> running on the PC seems to be a popular way to plot data on a PC that comes over a serial port from an Arduino running a sketch that includes the <a href="http://wiki.ros.org/rosserial_arduino" rel="nofollow">rosserial_arduino</a> library or the <a href="https://github.com/hbrobotics/ros_arduino_bridge" rel="nofollow">ros_arduino_bridge</a> library.</p>

<ul>
<li><a href="http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20Oscilloscope" rel="nofollow">Arduino Oscilloscope Tutorial</a></li>
<li><a href="http://answers.ros.org/question/28548/rosserial-arduino/" rel="nofollow">rosserial arduino</a></li>
<li><a href="http://defendtheplanet.net/2014/05/21/ultrasonic-sensor-hc-sr04-as-a-ros-range-publisher/" rel="nofollow">visualize everything using rqt_plot... my first arduino micro ros project</a></li>
<li>"7/24: Now that I have the Arduino set up using Kessel, I can <a href="http://bdml.stanford.edu/Main/NikhilLeleSummer" rel="nofollow">visualize the data better using ROS tools</a>"</li>
<li>etc.</li>
</ul>
 14728: <p>CSV format is most versatile for any data (signed/unsigned, various size and precision). </p>

<p>Cross-platform (written in Java/Scala) tool <a href="https://github.com/tardigrade888/scsvlog" rel="nofollow">Scsvlog</a> can receive/parse CSV strings from serial port / socket, show values and draw charts (up to 8).</p>
 18557: <p>You can try out the software I developed for that propose. It's aimed to be easy to use. See <a href="https://github.com/newtonis/SerialGraphicator/" rel="nofollow">SerialGraphicator</a> - Open Source Free Serial Port Client capable of graph values that are received in JSON format.</p>
 113: <p>Responding to my own question here.. I use Bridge Control Panel as mentioned.</p>

<p>Advantages: Lots of Features.</p>

<p>Disadvantages: Tricky to setup and very poor syntax/error reporting.</p>

<p>To use:
You need to write the Arduino Data over the Serial Port one byte at a time. For an int data type that would look as follows:</p>

<pre><code>// RX8 [h=43] @1Key1 @0Key1
Serial.print("C");
Serial.write(data&gt;&gt;8);
Serial.write(data&amp;0xff);
</code></pre>

<p>In Bridge the command to Read Data is:  </p>

<pre><code>RX8 [h=43] @1Key1 @0Key1
</code></pre>

<p>RX8 is the read command
[h=43] means the next valid byte is "C" in ASCII
then the High Byte of Key1
then the Low Byte of Key1</p>

<p>It looks like this in Bridge:</p>

<p><img src="https://i.stack.imgur.com/wO2vf.png" alt="enter image description here"></p>

<p><img src="https://i.stack.imgur.com/BBQqC.png" alt="enter image description here"></p>
 4102: <p>You can try <strong><a href="https://code.google.com/p/serialchart/" rel="noreferrer">serialchart</a></strong>. It's pretty strait forward program. It does exactly what you asked. The only disadvantage is that it requires data in CSV format (does not meet first point).</p>

<p>Screenshot from project page:</p>

<p><img src="https://i.stack.imgur.com/7I9kA.png" alt="example"></p>
 2810: <p>Nobody had mentioned Processing which is super versatile. You can do a lot more than just plotting but if that's all you want to do you can use the gwoptics library; hook up Arduino and Processing as directed <a href="https://learn.sparkfun.com/tutorials/connecting-arduino-to-processing" rel="nofollow">here</a>.</p>
 17188: <p>You might be interested in <code>Telemetry</code> <a href="https://github.com/Overdrivr/Telemetry" rel="noreferrer">See on Github</a> . It is a communication protocol, highly simple to use, with a clean interface, that enables bidirectionnal communication with Arduino/Mbed devices.</p>

<p>If you don't want to read this long post, see <a href="https://github.com/Overdrivr/Telemetry/wiki/Awesome-features-overview" rel="noreferrer"><em>A walkthrough of all the awesome features in it</em></a></p>

<p>The power of this library comes from the desktop command line interface (that requires <strong>no</strong> programming skills in python).</p>

<p>It is able to open high-performance plots (much higher that what can be done with matplotlib) <strong>just by typing a command</strong>.</p>

<p>The protocol supports <strong>complexes data structures</strong>. For now <strong>arrays</strong> and sparse arrays can be send from the embedded board. </p>

<p>The plots opened from the command line interface understand the type of data, and for arrays, rather than plotting each sample versus time, sample will be plotted against its own index.</p>

<p>In a near future, it is planned to add <strong>support for spatial coordinates</strong> (xyz data), that will allow you to plot immediately spatial data. Once, again the plots will figure everything out, plot your data in 2D or 3D space and you can focus on developping your app.</p>

<p>I believe those features are simply <strong>unique</strong> for such a project.</p>

<h2>Pytelemetry CLI <a href="https://badge.fury.io/py/pytelemetrycli" rel="noreferrer"><img src="https://badge.fury.io/py/pytelemetrycli.svg" alt="PyPI version"></a></h2>

<p>Once installed with <code>pip</code>, the command line can be started with</p>

<pre><code>pytlm
</code></pre>

<p>Then you can <code>connect</code>, <code>ls</code>(list) received topics, <code>print</code> data received on a topic, <code>pub</code>(publish) on a topic, or open a <code>plot</code> on a topic to display received data in real-time</p>

<p><a href="https://i.stack.imgur.com/Exo7a.png" rel="noreferrer"><img src="https://i.stack.imgur.com/Exo7a.png" alt="enter image description here"></a></p>

<p><a href="https://i.stack.imgur.com/q3rvr.png" rel="noreferrer"><img src="https://i.stack.imgur.com/q3rvr.png" alt="enter image description here"></a></p>

<h1>Get started</h1>

<p><a href="https://github.com/Overdrivr/Telemetry/wiki" rel="noreferrer">Wiki</a></p>

<p><em>PS : I am the author.</em> </p>

<p>I developed it because I could not find a solution that would allow me to:</p>

<ul>
<li>write quickly PC scripts to control an Arduino </li>
<li>debug quickly</li>
<li>plot complex data (not just a time varying value)</li>
</ul>

<p>all of the above without using proprietary solutions or bloated GUIs.</p>

<p>Using this library, the time to setup a communication between Arduino and PC went from usually half a day to 5 minutes.</p>
 86: <p>I use <a href="http://matplotlib.org/">Matplotlib</a> for any plotting I need to do.</p>

<p>It's not arduino specific in any way, but it is a very excellent <em>Python</em> plotting toolkit.</p>

<p>I've built a number of applications that plot data from a variety of microcontrollers in real-time to a graph, but that was really more of a two-step process: 1. Get data from device into computer, 2. plot realtime data.</p>

<p>Really, I think you should break your question into two parts:</p>

<ul>
<li>How do you get data from an Arduino/Any serial device into a computer easily.</li>
<li>What is a good plotting library that is easy to use.</li>
</ul>
 11628: <p><a href="https://hackaday.io/project/5334-serialplot-realtime-plotting-software" rel="noreferrer">SerialPlot</a> (free).  It does everything you require and much more.</p>

<p>Other features:</p>

<ul>
<li>Zoom in on data</li>
<li>Click on datapoints to see values</li>
<li>Send commands back to Arduino</li>
<li>Adjust total number of points plotted</li>
<li>Ability to show each channel in its own autoscaled plot</li>
<li>Interprets binary, ASCII and custom packets</li>
<li>Demo mode lets you play with features</li>
</ul>

<p><a href="https://i.stack.imgur.com/xvQlV.png" rel="noreferrer"><img src="https://i.stack.imgur.com/xvQlV.png" alt="enter image description here"></a></p>
 313: <p><a href="http://www.gnuplot.info/" rel="noreferrer">GnuPlot</a></p>

<p>Advantages: It's very flexible, scriptable, and freely available. </p>

<p>Disadvantages: A bit complex to learn (but I figured out how to get started in a few minutes, and quite functional in an hour or two), runs in a terminal window (if you consider that a disadvantage). </p>

<p>Something I found very useful was to script it to reload my terminal program's logfile periodically so i got a dynamic graph as my experiment progressed.</p>

<p><img src="https://i.stack.imgur.com/r5x4O.png" alt="Image of GnuPlot"></p>

<p><br><br>
Edit: Here is the GnuPlot script that plots it:</p>

<pre><code>#!/usr/local/bin/gnuplot -rv
# Note reverse video here ^^^   til I find a way to put it in the script

# gpFanCtl - Plots DiffThermo fan controller data (aloft, alow, Tdiff, fan-state).
# $Id: gpFanCtl,v 1.8 2014-04-28 09:40:51-04 jrobert Exp jrobert $

set terminal x11 1 noraise
set xtics 3600
set mxtics 4
set xdata time

set ytics 1 nomirror
set mytics 2

set y2range [0:3]
set y2tics 1
set my2tics 4

set grid
set ylabel 'Temperature, degC'
set y2label 'Tdiff, degC' textcolor rgb '#00CD63'

cd '/Users/jrobert/Desktop'
plot "Logfile.txt" using ($0*4):1 title "Aloft" with lines lc rgb "red",\
     "Logfile.txt" using ($0*4):2 title "Alow" with lines lc rgb "#3982FF",\
     "Logfile.txt" using ($0*4):3 title "Tdiff" with lines lc rgb "#00CD63" axis x1y2,\
     "Logfile.txt" using ($0*4):4 title "Fan" with lines lc rgb "orange" axis x1y2;
pause 4
refresh
reread
</code></pre>
 3281: <p>There are some good applications for visualizing the serial data, including:</p>
<ul>
<li><p><a href="https://www.megunolink.com/" rel="nofollow noreferrer">MegunoLink</a> ($39.95; <a href="https://www.megunolink.com/megunolink-lite/" rel="nofollow noreferrer">Lite</a> free) - plotting, logging, programming, reporting and more.</p>
<p><a href="https://www.megunolink.com/" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/YLakU.png" alt="MegunoLink" /></a></p>
</li>
<li><p><a href="https://electricui.com/features" rel="nofollow noreferrer">Electric UI</a> ($80; free for students) - cross platform, fully featured code based GUI framework for hardware.</p>
<p><a href="https://electricui.com/features" rel="nofollow noreferrer"><img src="https://electricui.com/web_static/plot_examples.gif" alt="Electric UI" /></a></p>
</li>
<li><p><a href="http://www.makerplot.com/" rel="nofollow noreferrer">MakerPlot</a> ($59) - digital &amp; analog plotting, monitoring, custom interfaces and more.</p>
<p><a href="http://www.makerplot.com/" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Nsmeb.jpg" alt="MakerPlot" /></a></p>
</li>
<li><p><a href="https://github.com/gregpinero/ArduinoPlot" rel="nofollow noreferrer">ArduinoPlot</a> (free) - simple plotting.</p>
<p><a href="https://github.com/gregpinero/ArduinoPlot" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/jdTmK.png" alt="ArduinoPlot" /></a></p>
</li>
<li><p><a href="https://github.com/devinaconley/arduino-plotter" rel="nofollow noreferrer">arduino-plotter</a> (free) - easy, light-weight plotting with support for all primitive types</p>
<p><a href="https://github.com/devinaconley/arduino-plotter" rel="nofollow noreferrer"><img src="https://www.dropbox.com/s/2mtg5ig7lyrrffi/plotter_preview.gif?raw=1" alt="arduino-plotter" /></a></p>
</li>
<li><p><a href="https://www.infineon.com/cms/en/design-support/tools/programming-testing/psoc-programming-solutions/" rel="nofollow noreferrer">Bridge Control Panel</a> (free) - logging, plotting, and more.</p>
<p><a href="https://www.infineon.com/cms/en/design-support/tools/programming-testing/psoc-programming-solutions/" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/rQjHY.jpg" alt="Bridge Control Panel" /></a></p>
</li>
<li><p><a href="https://github.com/sebnil/RealtimePlotter" rel="nofollow noreferrer">RealtimePlotter</a> (free) - 6 channels data plotting.</p>
<p><a href="https://github.com/sebnil/RealtimePlotter" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/3okhi.png" alt="RealtimePlotter" /></a></p>
</li>
<li><p><a href="https://github.com/infomaniac50/projectsimplot/releases" rel="nofollow noreferrer">SimPlot</a> (free) - 4 channel plotting.</p>
<p><a href="https://github.com/infomaniac50/projectsimplot/releases" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/YqoOn.jpg" alt="SimPlot" /></a></p>
</li>
<li><p>Arduino Serial Plotter (free) - built in <a href="https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-serial-plotter" rel="nofollow noreferrer">Arduino Editor</a> under <em>Tools &gt; Serial Plotter</em>.</p>
<p><a href="https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-serial-plotter" rel="nofollow noreferrer"><img src="https://docs.arduino.cc/f155cf7066d171d7b88b80f3c921e7b1/potentiometer_plotter.gif" alt="Arduino Serial Plotter" /></a></p>
</li>
</ul>
<p>(This is a community wiki, you can expand the list.)</p>
