Bubblecloud Plots in MATLAB®

How to make Bubblecloud Plots in MATLAB® with Plotly.


Create Bubble Cloud with Table Data

Create a table with three variables. For example, create a table that shows the number of mislabeled Halloween costumes in 10 states. Of the 10,000 princess kits sold, 1,000 had spooky monster labels by mistake.

n = [58 115 81 252 180 124 40 80 50 20]';
loc = ["NJ" "NY" "MA" "OH" "NH" "ME" "CT" "PA" "RI" "VT"]';
plant = ["Plant A" "Plant A" "Plant A" "Plant A" ...
       "Plant A" "Plant A" "Plant A" "Plant B" "Plant B" "Plant B"]';
tbl = table(n,loc,plant,'VariableNames',["Mislabeled" "State" "Manufacturing Plant"])

fig2plotly()
tbl=10×3 table
    Mislabeled    State    Manufacturing Plant
    __________    _____    ___________________

        58        "NJ"          "Plant A"     
       115        "NY"          "Plant A"     
        81        "MA"          "Plant A"     
       252        "OH"          "Plant A"     
       180        "NH"          "Plant A"     
       124        "ME"          "Plant A"     
        40        "CT"          "Plant A"     
        80        "PA"          "Plant B"     
        50        "RI"          "Plant B"     
        20        "VT"          "Plant B"     

Create a bubble cloud to visualize the mislabeled costumes by state.

bubblecloud(tbl,"Mislabeled","State")

fig2plotly()

Divide the bubbles into groups by specifying the groupvar argument. In this case, the groups are in the variable called "Manufacturing Plant".

bubblecloud(tbl,"Mislabeled","State","Manufacturing Plant")

fig2plotly()

Create Bubble Cloud with Vector Data

Define n as a vector of bubble sizes with the numbers from a survey of favorite ice cream flavors. Define flavs as a string vector containing the flavor names. Then create a bubble cloud that shows the distribution of favorite ice cream flavors.

n = [58 115 81 252 200 224 70 120 140];
flavs = ["Rum" "Pumpkin" "Mint" "Vanilla" "Chocolate" ...
    "Strawberry" "Twist" "Coffee" "Cookie"];
bubblecloud(n,flavs)

fig2plotly()

Define ages as a categorical vector containing the age group that prefers each flavor. Specify the order of the categories by calling the reordercats function. Then create a new bubble cloud with the bubbles grouped by age, and return the BubbleCloud object as b. When you specify group data, the chart displays a legend by default. Add a title to the legend by setting the LegendTitle property of b.

ages = categorical(["40-90+" "5-15" "16-39" "40-90+" ...
   "5-15" "16-39" "5-15" "16-39" "40-90+"]);
ages = reordercats(ages,["5-15" "16-39" "40-90+"] );
b = bubblecloud(n,flavs,ages);
b.LegendTitle = 'Age Range';

fig2plotly()

Customize Bubble Color

Load the patients data set, and create a bubble cloud of 20 patient weight measurements with the corresponding self-assessed health status values ('poor', 'fair', 'good', or 'excellent'). Customize the color of the bubbles by specifying the FaceColor name-value argument. Return the BubbleCloud object as b, so you can set properties on the object later.

load patients
b = bubblecloud(Weight(1:20),SelfAssessedHealthStatus(1:20), ...
    'FaceColor',[0.3 0.6 0.4]);

fig2plotly()

Group the bubbles according to whether the patients are smokers. When you group the data, a legend automatically appears in the figure. Specify a title for the legend. Then, retain the visibility of the bubble labels by increasing the size of the figure and setting the font size to 9 points.

b.GroupData = Smoker(1:20);
b.LegendTitle = "Smoker";
f = gcf;
f.Position([3 4]) = [655 395];
b.FontSize = 9;

fig2plotly()

To visualize the groups with different colors, set the FaceColor property back to the default value of 'flat'. To make the edges of the bubbles use those same colors, set the EdgeColor property to 'flat'.

b.FaceColor = 'flat';
b.EdgeColor = 'flat';

fig2plotly()

To customize the group colors, set the ColorOrder property to a matrix containing the RGB triplets for the new colors.

b.ColorOrder = [0.3 0.6 0.4; 0.4 0.3 0.6];

fig2plotly()

Alternatively, you can pass the BubbleCloud object to the colororder function to set this property. When you use this function, you can specify the colors as RGB triplets, hexadecimal color codes, or predefined color names. For example, specify the hexadecimal color codes for two colors.

colororder(b,["#E6CC1A"; "#4D9966"])

fig2plotly()

Visualize Categorical Data with Bubble Cloud

Define c as a categorical array. Use the histounts function to bin the categorical data and return the bubble sizes and the labels. Then pass the bubble sizes and labels to the bubblecloud function.

c = categorical(["Pumpkin" "Princess" "Princess" "Princess" "Spooky Monster" ...
    "Spooky Monster" "Spooky Monster" "Spooky Monster" "Spooky Monster"]);
[sz,labels] = histcounts(c);
bubblecloud(sz,labels)

fig2plotly()