Mathematica Asked by Hanna on February 10, 2021
So here is the code I have so far:
data17 = {48100, 205900, 2500};
data18 = {237746, 990328, 372746};
data19 = {674063, 2086526, 1393438};
data20 = {1243167, 3702396, 2709820};
data21 = {2325703, 6131327, 4668959};
Magnify[BarChart[{Labeled[data17, $279000, Above,
Background -> Yellow],
Labeled[data18, $1600820, Above, Background -> Yellow],
Labeled[data19, $4154027, Above, Background -> Yellow],
Labeled[data20, $7655383, Above, Background -> Yellow],
Labeled[data21, $13307990, Above, Background -> Yellow]},
ChartLayout -> "Stacked", Joined -> True,
ChartStyle -> "DarkRainbow",
ChartLegends -> {"Region1", "Region2", "Region3"},
ChartLabels -> {Range[2017, 2021], None},
AxesLabel -> {"year", "US$"}, BarSpacing -> {0, 0.3},ImageSize -> 500,
LabelingFunction -> (Placed[Row[{"$", #}], Center] &),
PlotLabel -> Style["Revenues by Region (2017-2021)", "Title", 18]],
2]
Using the option ScalingFunctions -> "Log"
labels = {"$279000", "$1600820", "$4154027", "$7655383", "$13307990"};
labeleddata = Labeled[#, #2, Above, Background -> Yellow] & @@@
Transpose[{{data17, data18, data19, data20, data21}, labels}];
BarChart[labeleddata, ChartLayout -> "Stacked", Joined -> True,
ChartStyle -> "DarkRainbow",
ChartLegends -> {"Region1", "Region2", "Region3"},
ChartLabels -> {Range[2017, 2021], None},
AxesLabel -> {"year", "US$"}, BarSpacing -> {0, 0.3},
ImageSize -> 500,
LabelingFunction -> (Placed[Row[{"$", #}], Center] &),
PlotLabel -> Style["Revenues by Region (2017-2021)", "Title", 18],
ScalingFunctions -> "Log"]
Answered by kglr on February 10, 2021
How you display the data depends on what feature of the data you want to get across to your audience. If it is just the data values and the numbers to many digits accuracy are important, then a table would be better.
If it is the change over time for each Region that is important, then all values need the same baseline for the audience to be able to ascertain the trend over time. Stacked bar charts are notoriously poor ways to convey such trends. Yes, they are more colorful but while the bottom category's trend (Region 1 in this case) can be readily determined, it's difficult at best for the other categories because of the changing baseline. Using a log scale (just so the numeric labels can be seen) makes it even harder to interpret.
So if a change over time is the message you want to accurately display, here is an admittedly less flashy way to do so:
data17 = {48100, 205900, 2500};
data18 = {237746, 990328, 372746};
data19 = {674063, 2086526, 1393438};
data20 = {1243167, 3702396, 2709820};
data21 = {2325703, 6131327, 4668959};
data17 = {2017, #/1000000} & /@ data17;
data18 = {2018, #/1000000} & /@ data18;
data19 = {2019, #/1000000} & /@ data19;
data20 = {2020, #/1000000} & /@ data20;
data21 = {2021, #/1000000} & /@ data21;
data = Transpose[{data17, data18, data19, data20, data21}];
ListPlot[data, PlotStyle -> PointSize -> Large, Frame -> True,
PlotRange -> {{2016.5, 2021.5}, Automatic},
PlotLegends -> {"Region 1", "Region 2", "Region 3"},
FrameTicks -> {{Automatic, None}, {{2017, 2018, 2019, 2020, 2021}, None}},
FrameLabel -> (Style[#, Bold, Larger] &) /@ {"Year", "Millions of dollars"}]
No single graph is optimal for all features that you want to display. If there is more than one feature to highlight, then use multiple graphs (and/or tables).
For example, if it is also a change in percentage of revenues over time that is a feature to highlight, then consider the following:
GraphicsRow[
Table[PieChart[{data[[1, year - 2016, 2]], data[[2, year - 2016, 2]], data[[3, year - 2016, 2]]},
ChartLabels -> Placed[{"Region 1", "Region 2", "Region 3"}, "RadialCenter"],
PlotLabel -> year], {year, Range[2017, 2021]}], ImageSize -> Full]
Answered by JimB on February 10, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP