Results for

New in R2022b: GridSizeChangedFcn
tiledlayout() creates a TiledChartLayout object that defines a gridded layout of axes within a figure. When using the 'flow' option, the grid size becomes dynamic and updates as axes are added or as the figure size changes. These features were introduced in R2019b and if you're still stuck on using subplot, you're missing out on several other great features of tiledlayout.
Starting in MATLAB R2022b you can define a callback function that responds to changes to the grid size in flow arrangements by setting the new gridSizeChangedFcn.
Use case
I often use a global legend to represent data across all axes within a figure. When the figure is tall and narrow, I want the legend to be horizontally oriented at the bottom of the figure but when the figure is short and wide, I prefer a vertically oriented legend on the right of the figure. By using the gridSizeChangedFcn, now I can update the legend location and orientation when the grid size changes.
Demo
gridSizeChangeFcn works like all other graphics callback functions. In this demo, I've named the gridSizeChangedFcn "updateLegendLayout", assigned by an anonymous function. The first input is the TiledChartLayout object and the second input is the event object that indicates the old and new grid sizes. The legend handle is also passed into the function. Since all of the tiles contain the same groups of data, the legend is based on data in the last tile.
As long as the legend is valid, the gridSizeChangedFcn updates the location and orientation of the legend so that when the grid is tall, the legend will be horizontal at the bottom of the figure and when the grid is wide, the legend will be vertical at the right of the figure.
Since the new grid size is available as a property in the TiledChartLayout object, I chose not to use the event argument. This way I can directly call the callback function at the end to update the legend without having to create an event.
Run this example from an m-file. Then change the width or height of the figure to demonstrate the legend adjustments.
% Prepare data
data1 = sort(randn(6))*10;
data2 = sort(randn(6))*10;
labels = ["A","B","C","D","E","F"];
groupLabels = categorical(["Control", "Test"]);
% Generate figure
fig = figure;
tcl = tiledlayout(fig, "flow", TileSpacing="compact", Padding="compact");
nTiles = height(data1);
h = gobjects(1,nTiles);
for i = 1:nTiles
ax = nexttile(tcl);
groupedData = [data1(i,:); data2(i,:)];
h = bar(ax,groupLabels, groupedData, "grouped");
title(ax,"condition " + i)
end
title(tcl,"GridSizeChangedFcn Demo")
ylabel(tcl,"Score")
legh = legend(h, labels);
title(legh,"Factors")
% Define and call the GridSizeChangeFcn
tcl.GridSizeChangedFcn = @(tclObj,event)updateLegendLayout(tclObj,event,legh);
updateLegendLayout(tcl,[],legh);
% Manually resize the vertical and horizontal dimensions of the figure
function updateLegendLayout(tclObj,~,legh)
% Evoked when the TiledChartLayout grid size changes in flow arrangements.
% tclObj - TiledChartLayout object
% event - (unused in this demo) contains old and new grid size
% legh - legend handle
if isgraphics(legh,'legend')
if tclObj.GridSize(1) > tclObj.GridSize(2)
legh.Layout.Tile = "south";
legh.Orientation = "horizontal";
else
legh.Layout.Tile = "east";
legh.Orientation = "vertical";
end
end
end
Give it a shot in MATLAB R2022b
- Replace the legend with a colorbar to update the location and orientation of the colorbar.
- Define a GridSizeChangedFcn within the loop so that it is called every time a tile is added.
- Create a figure with many tiles (~20) and dynamically set a color to each row of axes.
- Assign xlabels only to the bottom row of tiles and ylabels to only the left column of tiles.
Learn about other new features
This article is attached as a live script.
Dear Community, I using the free/community edition and I would like to know how long my data will remain accessible/stored in ThingSpeak.
I'm planning to store data for many years. Before making this a reality, I would like to be sure I have selected the correct plaform.
Thanks a lot ;)
Simulink is a block diagram environment used to design systems with multidomain models, simulate before moving to hardware, and deploy without writing code. In this livestream, Sam and Nishan will build up the basics of getting started using Simulink to build models.
Sign up here to get notification when it start streaming at 11:00 am (EDT) on Oct 13 view your timezone
Hopefully you are aware that MATLAB is built into ThingSpeak. Right now, MathWorks is hosting two contentsthat can help you learn MATLAB and then improve your IoT project.
I just set a calendar reminder to do a Cody problem each day. I can't win a prize but I can still get a virtual badge if I get a streak going.
hello :
I'm success using http send/receive between 16 bits MCU and Thingspeak.com via wifi , lan (ESP32(wifi) and LAN module )
but recently I have a new device it's BC95-B8 NBIOT device from quectel which it can only use UDP mode.
I want to connect / send /receive data with Thingspeak.com . but can't find any knowledge explain how to
Please advise
Thanks
I am working on a LoRaWAN project. My setup consists of 100 or more end-devices talking to a network server through a single gateway (private). My problem now is this.
I want the end-devices to belong to one of four groups with each group having a fixed range of spreading factors that can be used. Eg group 1 can only use SF 12, group 2 can only use SF 7, and so on. When an end device sends a join request, the network server should know which group the end device belongs to so it can assign the correct transmission parameter.
How can I achieve this? How can I encode the group that each end device belongs to into the join request for the network server, using maybe the AppEui or DevEui or AppKey or something? Any ideas?
Hello, I run a weather station that consists of several sensors. Sensor1 supplies external weather data, Sensor2 internal room data and Sensor3 particulate matter values.
Can I display the variables of all sensors in a "Weather Station" channel and display them in charts?
If so, how do I do that with ThingSpeak?
Many Thanks
Just in case, I have my license of MATLAB. I just have this question and I didn't find any information. I wouldn't like to create another account, for this reason I prefer to ask here.

Uniform spacing and the problem of round-off error
The vector [3 4 5 6 7 8 9] is uniformly spaced with a step size of 1. So is [3 2 1 0 -1 -2] but with a step size of -1.
The vector [1 2 4 8] is not uniformly spaced.
A vector v with uniform spacing has the same finite interval or step size between consecutive elements of the vector. But sometimes round-off error poses a problem in calculating uniformity.
Take, for example, the vector produced by
format shortg
v = linspace(1,9,7)
v = 1x7
1 2.3333 3.6667 5 6.3333 7.6667 9
Linspace produces linearly spaced vectors but the intervals between elements of v, computed by diff(v), are not identical.
dv = diff(v)
dv = 1x6
1.3333 1.3333 1.3333 1.3333 1.3333 1.3333
dv == dv(1)
ans = 1×6 logical array
1 0 0 1 0 1
diff(dv)
ans = 1x5
4.4409e-16 0 -4.4409e-16 8.8818e-16 -8.8818e-16
Some extra steps are therefore necessary to set a tolerance that ignores error introduced by floating point arithmetic.
New in R2022b: isuniform
Determining uniformity of a vector became a whole lot easier in MATLAB R2022b with the new isuniform function.
isuniform returns a logical scalar indicating whether vector v is uniformly spaced within a round-off tolerance and returns the step size (or NaN if v is not uniform).
Let's look at the results for our vector v,
[tf,step] = isuniform(v)
tf = logical
1
step =
1.3333
How about non-uniformly spaced vector?
[tf,step] = isuniform(logspace(1,5,4))
tf = logical
0
step =
NaN
Give it a shot in MATLAB R2022b
- What happens when all elements of v are equal?
- Can you produce a vector with uniform spacing without using colons or linspace?
- What additional steps would be needed to use isuniform with circular data?
References
- isuniform - documentation
- Floating point numbers - documentation
- Floating point numbers - Cleve's Corner (blog)
This article is attached as a live script.
Always or usually. They're fun.
18%
Sometimes, some of them.
7%
Not yet, but probably will some day
25%
Never, and don't plan to.
50%
3937 votes
I wanted to ask that can we send bulk data through ThingSpeak ESP32 library using:
POST /channels/266256/bulk_update.csv HTTP/1.1
Host: api.thingspeak.com
Content-Type: application/x-www-form-urlencoded
time_format: relative
I saw it on mathswork "Bulk-Write CSV Data" (link: https://www.mathworks.com/help/thingspeak/bulkwritecsvdata.html)
Does ThingSpeak library supports the capability to send bulk csv data, any guidance?
Thanks and looking forward for your positive reply
Maybe %lld instead of %d?
I would like to know the maximum amount of storage space in the Data Logger.
We are thrilled to share that more than 400,000 people have subscribed to MATLAB YouTube channel to watch MATLAB and Simulink videos!🎉🙌🥳🎉🙌🥳🎉🙌🥳
The channel started way back in 2006, only one year after YouTube launched. Since then, people have spent more than 2.3 million hours watching our videos. It took us 12 years to reach 100k subscribers, two more years to get to 200k subs, and only 2 years to double that and grow to 400,000!
Did you know that in 2021, there were almost 10 million views to our videos on YouTube?
Thank you again for supporting our community inside and outside MATLAB Central!
You are invited to enter 2 fun community contests: MATLAB Mini Hack 2022 and Cody 10th Anniversary. The contests are designed for you to have fun, win prizes, and sharpen MATLAB skills. Participants across all skill levels are welcome to join!
How to Play
1. MATLAB Mini Hack 2022 contest:
Use up to 280 characters of MATLAB code to generate an interesting image. Sounds challenging? You can still participate by simply voting for the images you love.
2. Cody 10th Anniversary contest:
Solve at least 1 Cody problem per day during the 4-week contest period. We will reward participants with the longest streak of days of problem-solving!
Prizes
You will have opportunities to win compelling prizes, including Amazon gift cards, MathWorks T-shirts, and virtual badges. We will give out both weekly prizes and grand prizes. Check out the rules & prize section on each contest page for details.

Interested in joining? Follow the contests!
Click the ‘Follow the contests’ button to follow/register for the contest. You will get notified when the contests start. After contests start, you will also receive important announcements and prize information.

I have a data.

And, I want to substract the data using for.
But, I want to ignore the nan values and substract others.
For example, [1, 2, 3, NaN, 6, 9, 12, 14] ---- substract---> [1, 1, 3, 3, 2]
How can I do this?
Grace Hopper Celebration is an event that celebrates the legacy of Grace Hopper who acted as the inspiration for generations of women in tech. My female coworkers in highly accomplished technical roles will be speaking at the event. Come meet, connect and network with them at GHC22.
Hi guys,
I'm very new to matlab, so this might a rookie mistake. However, it seems that I have messed up some important part with the plot function. The program does not give my any kind of error messages, but still does not plot anything. What can I have done wrong and how do I fix this?
Best regards
My code:
close all
for t = -2:0.1:3
if (t<0 || t>1)
xvalue = 0;
end
if (t<= 1 && t>= 0)
xvalue = exp(2*t+1);
end
yvalue = -1*(xvalue) + exp(1);
hold on
figure(1);
plot(t, yvalue);
hold off
end
grid on;
Help us please, we need to send email after measurement from sonde (GSM report) is under limit for three days.
"React" on the limit, is non for three days under limit., and time control is days or weeks runner.
I propose trigger on time control but what is the code?
????
% Read the recent data.
moistureData = thingSpeakRead(channelID,'NumDays',3,'Fields',1); {is that right, that I read last three days measurement (3000x)?}
% Check to make sure the data was read correctly from the channel.
if isempty(moistureData)
alertBody = ' No data read from plant. ';
else
%{need if
% moistureData is for three days under limit from sonde then send
% email}
span = max(moistureData) - min(moistureData);
dryValue = span;
% Get the most recent point in the array of moisture data.
lastValue = moistureData(end);
% Set the outgoing message
if (lastValue<=dryValue)
alertBody = ' I need water! ';
elseif (lastValue>dryValue)
alertBody = ' No water needed. ';
end
really thanks so much
Congratulations, Walter, for this amazing run!
You hit 100k points on 14th Aug, 2020. So, these 25k points took just over 2 years to earn.
Thank you for your contribution to the community!
MATLAB Central Team