I have some data that I would like to plot as a bubble chart. The data is formatted as {{val1_mean,val1_sd,val2_mean,val2_sd},{val1_mean,......}}. What I would like to do is plot a bubble chart where the x/y location of the bubble is val1_mean,val2_mean and the width/height of the bubble is val1_sd,val2_sd.
So far I've been able to do circular bubble charts with the inbuilt function but am a bit lost as to how to make the bubbles ellipses instead of circles.
Here's the code I've written so far;
bubleData={{1.88308*10^6, 1024.85, 149446., 6636.62}, {1.98345*10^6, 15022.5,
126966., 7071.75}, {1.94677*10^6, 9281.83, 131930.,
7435.15}, {1.88308*10^6, 1024.85, 127423., 8718.36}};
BubbleChart[bubbleData[[All, 1 ;; 3]],ChartStyle -> Directive[Opacity[0.5]]]
Answer
To use BubbleChart
as you have indicated in your comment to Jonathan's answer, a bit of work is required. First, BubbleChart
expects data of the form:
{x, y, w}
So, we need to turn your data into something like that, but we need to take a pointer from the documentation to include all of the data. To do that, we add the extra information as metadata:
{#1, #2, 1} -> {##3}& @@@ bubbledata
which returns
{{1.88308*10^6, 1024.85, 1} -> {149446., 6636.62},
{1.98345*10^6, 15022.5, 1} -> {126966., 7071.75},
{1.94677*10^6, 9281.83, 1} -> {131930., 7435.15},
{1.88308*10^6, 1024.85, 1} -> {127423., 8718.36}}
where the 1
acts as a placeholder. Now we create a custom ChartElementFunction
:
f[_, v_, {meta_}, ___] := Disk[Most @ v, meta]
where I determined from experimentation that the third parameter is the data point itself, so we strip off the last element. Putting it all together,
BubbleChart[{#1, #2, 1} -> {##3}& @@@ bubbledata,
ChartElementFunction -> f,
PlotRange -> {{1.70*^6, 2.15*^6}, {-10000, 23000}},
PerformanceGoal -> "Speed"
]
gives
Two things to note about the final code:
- The
PlotRange
required a lot of manual adjustment. - I used
PerformanceGoal -> "Speed"
to eliminate the mouseover effects that are normally there as they only show the placeholder I used, so they are not that useful here.
Comments
Post a Comment