Search This Site

Search Google

Showing posts with label excel. Show all posts
Showing posts with label excel. Show all posts

Friday, May 8, 2009

Useful Excel Charting Tip - Useful Script

So you have lot of data variables in a spreadsheet, and would like to eyeball it in a chart and get a quick idea of relationships between variables etc, but it is too cluttered because of so many series if you tried to put them all one on chart. Wouldn't it be great if there was a quick way to toggle individual series "on" and "off" while looking at your chart?

The usual method is to limit the number of series, delete series or change line properties manually to make them disappear one by one, but thats a lot of work. Besides, to undo the change is just as much work.

Here's a script I put together that lets you toggle series on and off just by selecting and then double clicking the series legend text!

It works by toggling each line series linestyle property between a solid line and no-line, giving the illusion of switching off the line series. It won't remove markers but you could easily adapt it to do that. One limitation- it only works on a chart thats on its own sheet (i.e. not embedded inside a worksheet.)

Instructions:

1. Create your Line or XY chart as you desire, but located as its own sheet. (NB not embedded in another worksheet). Make sure you have a legend (i.e. list of series names displayed), and this works best with line only chart types, although you could adapt it for markers as well.
2. On the menu, Click Tools -> Macro -> Visual Basic Editor
3. When visual basic edit loads, explore and find VBAproject ("Yourfile name")
4. Expand the Microsoft Excel Objects items and find the name of your chart (usually "Chart1")
5. Doubleclick on the name of your chart- it will put the cursor in the code window.
6. Copy and paste the following code into the code window:

Private Sub Chart_BeforeDoubleClick(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long, Cancel As Boolean)

If ElementID = xlLegendEntry Then
If SeriesCollection(Arg1).Border.LineStyle = xlLineStyleNone Then
SeriesCollection(Arg1).Border.LineStyle = xlSolid
Else
SeriesCollection(Arg1).Border.LineStyle = xlLineStyleNone
End If
End If
Cancel = True
End Sub

7. Go to the menu File -> Close and Return to Excel
8. Voila... it should work. To test click on one of the legend texts in the legend box, then double click individual legends to toggle them off and on.
9. Remember to save.
10. Repeat for any additional charts you wish to make.

New to Excel VBA? This might help:

Saturday, March 31, 2007

Quick Tip: Zooming in and out of Excel / Openoffice

If you have a mouse with a scroll wheel, the chances are good that you can take advantage of this tip if you don't already know:

Hold down the CONTROL button whilst rotating the scroll wheel on your mouse -

and you should find that the view zooms in or out of your sheet or graph, centered on whatever the moise is pointing at.

Monday, March 19, 2007

Quick Tip: Adding Vertical (or Horizontal) lines to an Excel chart

When using CUSUM's or other charts it may be useful to highlight a period or point through the use of vertical lines. You could draw it on manually, but what if you need to change the graph or the value? With an XY chart it is fairly simple to add a vertical line. Lets say you need to add a vertical dotted line at x=7 and your y-axis scale extends from 0 to 10. Here's how you do it:

1. Add a news series to your graph (right click, "source data", series tab, add)
2. For the x-values enter this: ={7,7}
3. For the y-values enter this: ={0,10}
4. Right click one of the new points eg. x=7, y=10 and format data series
5. Click "auto" for Pattern > line and "none" for Pattern > Marker
6. Change line style to dotted (if you prefer, or keep for solid).
7. Voila!

If you need to make the values variable then just enter the cell reference to pick up:
eg. instead of ={7,7} you would like to use the value in cell B2
You guessed it, just enter ={B2,B2} for the x-values.

Sunday, March 18, 2007

Interpreting CUSUM graphs


To interpret the CUSUM graph one needs to look at the slope of the graph, and specifically where slope changes occur. A constant slope is an indication of a stable value in the underlying data despite the presence of noise. In the example given earlier, a number of relatively "constant" slope areas can be identified, and these are shown superimposed on the graph. Points at which the slope changes are the turning points and these have been denoted with vertical lines.

So what do you do with the turning points? We'll this gives you an indication of where to average values from. In the example given, the first identified period is from t=1..14s, and the average for this period is 1.0. For the second period t=15..30s, the average is 6.4, and so on. I haven't shown this but you you could add this graphically to the bottom series as straight lines between the turning points for clarity, at the appropriate y-axis average value.
There is some danger in identifying too many turning points, as you could start reading something into the data which just isn't there. The greater the change in slope, the more convincing the turning point. In this example the turning points near 48, 72 and 84 are the most convincing.
To assist in calculating the average from the graph, one can add a calibration scale/mask which shows the relationship between set slopes and average values. We'll save details on how to do that for a later post though.


Saturday, March 17, 2007

Applying the CUSUM to your spreadsheet data


The CUSUM is, simply put the cumulative sum of the differences of your data from its mean value.

i.e. CUSUM(t) = CUSUM(t-1) + data(t)-(mean value)


in spreadsheet for if your data is in range from A2..A32, the cusum could be implemented as follows in cells B2..B32: (Make sure cell B1 is empty equal to zero (0).)


B2=B1+A2-average($a$2..$a$32)

Then copy down to cells B3..B32.

Alternatively you could work out the average in a seperate cell and then absolute reference it.

eg. A1=average($a$2..$a$32)

then B2 would simplify to:

B2=B1+A2-$A$1

In the next post we'll cover the interpretation of the CUSUM.

In the graph shown an example of some noisy data (bottom series) and its corresponding CUSUM is presented. Click here to see the data spreadsheet.

Friday, March 9, 2007

Quick Tip: Absolute references fast with F4


This might be old hat to some, but its pretty useful if you don't know. Change from relative references (like "=A1") to absolute (like $A$1, $a1, a$1) in formulas just by clicking on the reference whilst editing and pressing F4 (excel) or Shift F4 (openoffice).

Thursday, March 8, 2007

Graphing (more) like a Pro



Ever noticed the differences between a stock-standard excel XY graph and graphs you see in papers published in Journals? They tend to look cleaner and professional whilst the standard ones in excel (minus tweaking) look like a high school project?





<<>>

So here are some tips to get a more professional look:


1. Get rid of the gray background (Right click & Format Plot Area)


2. Get rid of gridlines, unless they really do add value to your data (Right click & Chart Options)


Quite often a single dotted line to show a threshold value will suffice and at the same time save clutter on your graph.


3. Choose appropriate scaling and keep the axes out of the graph area by choosing where the x and y axes cross each other (Right click the axes, format, scale)


4. Put ticks whether major or minor on the inside. (right click, format, patterns)


5. Keep axes labels short and sweet and give the units in brackets, eg. time [seconds]


6. Place the legend in the graph, this gives a bigger graph view in the same space and its easier for your readership to see where the legend is.


7. Use markers and lines sizing carefully to make the data clear. You often don't need both markers and lines.


8. Don't put too many series on one graph unless it really is necessary.






Monday, March 5, 2007

Exponential Filter/Smoothing


#1
The problem...
The problem is you've got noisy time series data. Ideally you would like to plot it on graph to show the average trend or compare it with another variable. BUT its too noisy and clutters the graph if you plot it with markers and lines. With just markers it appears as a scatter cloud?

Aha, then you see that Excel has the option to add a "trendline". But you can't seem to find one that does the data justice -or- its just plain wrong in places. The "moving average" seems the better one of the options, but to get good smoothing you have to average many periods. That has some bad effects: it delays when changes occurs, especially when comparing to another variable (plotted in another series).
Resist the temptation of moving average!!!

A solution ...
A nice easy way to sort out this data is to apply a simple exponential filter or smoothing. There are better, but this is simple and for 80% of the time will work great.

How does it work?

I will illustrate this in the spreadsheet, but the maths is simply like this:

New Smoothed value = (1-factor) * actual data + (factor)*(previous smoothed value)
or:
y_n=(1-k)*x_n + k*y_n-1
y = smoothed value
x = actual (noisy) data
k = smoothing factor, a real number between 0 and 1. 0= no smoothing

How to set this up in a spreadsheet:

1. Estimate a value for the starting smoothed average. I usually use the first raw actual data point or take an average of the first few points.
2. Setup the filter to the right of the actual data points.
3. Reference the smoothing constant "k" as cell using absolute $ reference eg. $b$1. This will allow you to adjust it easily.
4. Copy the filter down so that you have two columns- to the left your original data and to your right the smoothed values.
5. Play and adjust "k" to suit your needs. As a first guess use 0.5. I commonly use anywhere from 0.5 to 0.85. Be wary of values above this as you could be over smoothing, but it does depend on your application.
6. For graphing purposes I suggest keeping your original raw data series (but use markers only, i.e. scatter plot) and then plotting the smoothed trend as a second series (lines only).

http://www.4shared.com/file/11752632/8565b041/exponential_filter.html

 

Subscribe to feed

Subscribe in a reader