How to delete the 'SourceTable' property of a set of data when using GeoBubble?

3 vues (au cours des 30 derniers jours)
I am trying to plot a set of earthquakes from an excel spreadsheet. I am using their magnitudes to create corresponding bubble sizes and colors based on how extreme the earthquake was. The size of bubble works well, but when I include the 'ColorData' piece, I am given the error message, "Setting the 'ColorData' property after setting the 'SourceTable' property is not supported." I am not sure how I set the 'SourceTable' property or if there is a way to get rid of it. Or if there is a way to use ColorData with the 'SourceTable' property, that would be appreciated as well. As soon as the " 'ColorData','Magnitude' " section is taken out, the code runs well. I have tried the command "clear all", in case I had accidentally set the 'SourceTable' property to something in a previous run, but that didn't change the error message at all. Here is the code:
p = readtable('RealQuakes.xlsx');
figure gb = geobubble(p,6,7,'SizeVariable','Magnitude','ColorData','Magnitude','Basemap','colorterrain');

Réponse acceptée

Amy Haskins
Amy Haskins le 12 Juin 2018
You will need to use either all 'Variable' properties or all 'Data' properties with geobubble. The properties whose names end in 'Variable' are for specifying a column from the source table. The ones that end in 'Data' should be used when you have vector data. In this case, replacing 'ColorData' with 'ColorVariable' will fix the error you saw, but you will get another error because the function also expects the 'ColorVariable' to be categorical. For this, you could add a new column to the table using the discritize function to bin the magnitudes into categories. It would look something like this:
p.MagnitudeCat = discretize(p.Magnitude,0:2:10,'categorical');
gb = geobubble(p,6,7,'SizeVariable','Magnitude','ColorVariable','MagnitudeCat')
The 'SourceTable' property stores the table you specified as the first input argument (p). You could in theory set the 'SourceTable' to a different table with the same column names thereby updating your chart. For example, if you had data for 2017 and 2018 in separate tables you could do the following:
p2017 = readtable('RealQuakes2017.xlsx');
p2017.MagnitudeCat = discretize(p2017.Magnitude,0:2:10,'categorical');
gb = geobubble(p2017,6,7,'SizeVariable','Magnitude','ColorVariable','MagnitudeCat')
p2018 = readtable('RealQuakes2018.xlsx');
p2018.MagnitudeCat = discretize(p2018.Magnitude,0:2:10,'categorical');
gb.SourceTable = p2018; % Swap out the 2017 data with 2018 data
To instead use the 'Data' properties would look like the following. Note, in this workflow you are supplying vectors of data pulled from the table and not the table itself. There is no need to add a new column to the table with this workflow, instead you can supply the data directly. The 'SourceTable' property will be empty in this case.
gb = geobubble(p.Latitude,p.Longitude, ...
'SizeVariable',p.Magnitude, ...
'ColorVariable',discretize(p.Magnitude,0:2:10,'categorical'))
  4 commentaires
Xel Ch
Xel Ch le 18 Juin 2018
Hi Amy, thanks for the response! Unfortunately I'm getting an error that says, " Undefined operator '==' for input arguments of type 'cell'. "
Do you know how I could try getting around this? I have checked and there is data from 2006, the column's first cell is the word "Year" spelled properly. Thanks!
Amy Haskins
Amy Haskins le 25 Juin 2018
My guess is that the data in your year column is for some reason in a char format instead of a numeric one. You would either need to convert it to a numeric format using something like str2double, or use strcmp instead of ==.
tsunamisEQ = tsunamis(strcmp(tsunamis.Cause, 'Earthquake'),:)

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Geographic Plots dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by