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

3 次查看(过去 30 天)
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');

采纳的回答

Amy Haskins
Amy Haskins 2018-6-12
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 个评论
Xel Ch
Xel Ch 2018-6-18
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 2018-6-25
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'),:)

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Geographic Plots 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by