11:16 pm

Top

January 30, 2014

Anyone know how to make matlab plot a bar (column) graph instead of a line?

I've got this graph

which I would like to plot as a bar graph with a different colors for positive and negative values.

What I am looking for is kind of like the stem plots (https://au.mathworks.com/help/thingspeak/thingspeakstem.html) but I would really like solid bars rather than lines with circles on the ends.

8:02 am

Admin

January 18, 2011

1:20 pm

MathWorks

August 22, 2015

Histogram is a good option if you want to look at frequency of observations or variation. However, if you want a "traditional" bar or column chart, take a look at the bar and barh commands in MATLAB.

For example, to make a bar graph of the cars going east bound for the past 10 minutes from our car counter:

cars = thingSpeakRead(38629,'OutputFormat','table','NumMinutes',10);

bar(datenum(cars.Timestamps),cars.NumberOfEastboundCars)

datetick

Rob

Senior Development Manager for IoT and Hardware Interfacing for MATLAB at MathWorks. Visit ThingSpeak.com to explore the IoT Analytic platform that speaks MATLAB made for engineers and scientists. You can collect, analyze, and act in 5 minutes or less!

9:30 pm

Top

January 30, 2014

Thanks Rob.. I got this code that works but looks pretty crappy. Do you know how I can set the width so the bars dont have gaps between them? I tried the width parameter but it seems to make no difference.

https://thingspeak.com/apps/matlab_visualizations/89481

% Draw a bar graph of Interconnector power

% red for positive, blue for negative

power = unique(thingSpeakRead(148317,'OutputFormat','table','NumDays',1));

pos=power(power.Interconnect > 0,:)

neg=power(power.Interconnect <= 0,:)

%bar(datenum(power.Timestamps),power.Interconnect,1.0)

bar(datenum(neg.Timestamps),neg.Interconnect,'r')

hold on

bar(datenum(pos.Timestamps),pos.Interconnect,'b')

hold off

datetick

1:34 pm

MathWorks

August 22, 2015

Now you're getting into aesthetics.

The doc pages linked earlier provide a lot of info and examples on the large number of parameters you can tweak to your liking. Based on your comment, you want "BarWidth" to be 1. I'd suggest setting EdgeColor to match the FaceColor as well.

cars = thingSpeakRead(38629,'OutputFormat','table','NumMinutes',10);

h = bar(datenum(cars.Timestamps),cars.NumberOfEastboundCars,'r',...

'BarWidth',1,'EdgeColor','r');

hold on

h2 = bar(datenum(cars.Timestamps),-cars.NumberOfWestboundCars,'b',...

'BarWidth',1,'EdgeColor','b');

datetick

hold off

-Rob

Senior Development Manager for IoT and Hardware Interfacing for MATLAB at MathWorks. Visit ThingSpeak.com to explore the IoT Analytic platform that speaks MATLAB made for engineers and scientists. You can collect, analyze, and act in 5 minutes or less!

11:42 pm

Top

January 30, 2014

Rob/

Thanks for the info.

One-day graph looks much better..

https://thingspeak.com/apps/matlab_visualizations/89481

however extending the time-frame to 3 days still leaves a little to be desired

https://thingspeak.com/apps/matlab_visualizations/89640

% Draw a bar graph of Interconnector power

% red for positive, blue for negative

power = unique(thingSpeakRead(148317,'OutputFormat','table','NumDays',3));

pos=power(power.Interconnect > 0,:)

neg=power(power.Interconnect <= 0,:)

%bar(datenum(power.Timestamps),power.Interconnect,1.0)

bar(datenum(neg.Timestamps),neg.Interconnect,'r','BarWidth',1,'EdgeColor','r')

hold on

bar(datenum(pos.Timestamps),pos.Interconnect,'b','BarWidth',1,'EdgeColor','b')

hold off

grid on

title 'South Australian Interconnector Load'

ylabel 'Net Power (MW)'

legend('Buying Power','Selling Power')

datetick('x','dd/mm')

9:19 am

MathWorks

August 25, 2015

Given the amount of data that your looking to plot in a single chart, another option to consider is an area chart. Here is an example code snippet:

power = unique(thingSpeakRead(148317,'OutputFormat','table','NumDays',3));

% Make a copy of the data to manipulate for the area plot

pos = power.Interconnect;

% For the positive data define all points less than or equal to zero to be NaN

pos(pos <= 0) = NaN;

% Make a copy of the data to manipulate for the area plot

neg=power.Interconnect;

% For negative data define all points greater than zero to be NaN

neg(neg > 0) = NaN;

% Plot the negative data

area(datenum(power.Timestamps),neg, 'FaceColor', 'r');

hold on

% Plot the positive data

area(datenum(power.Timestamps),pos, 'FaceColor', 'b');

% Additional settings

hold off

grid on

title 'South Australian Interconnector Load'

ylabel 'Net Power (MW)'

legend('Buying Power','Selling Power')

datetick('x','dd/mm')

7:15 pm

Top

January 30, 2014

Thanks Adarsh, that looks great.

https://thingspeak.com/apps/matlab_visualizations/90293

Is there an easy way to reduce the areas of unused space at the beginning and end of the plotted data? Currently my plot has 3 days of data but a 4-day timescale.

Most Users Ever Online: 166

Currently Online:

29 Guest(s)

Currently Browsing this Page:

1 Guest(s)

Top Posters:

rw950431: 272

Vinod: 240

piajola: 95

turgo: 70

vespapierre: 63

Adarsh_Murthy: 62

Member Stats:

Guest Posters: 1

Members: 8665

Moderators: 1

Admins: 2

Forum Stats:

Groups: 3

Forums: 14

Topics: 1600

Posts: 5760

Newest Members:

kusmumichael, petersmith99, Rambant, blakeharriss09, optisol, Niyonzima FilsModerators: cstapels: 460

Administrators: Hans: 405, lee: 457