@@ -123,6 +123,8 @@ void Diagram::generateMarkers(const Data::DataCube &dataCube,
123123 mainBuckets[marker.mainId .seriesId ][marker.mainId .itemId ] = itemIndex;
124124 subBuckets[marker.subId .seriesId ][marker.subId .itemId ] = itemIndex;
125125 }
126+ clearEmptyBuckets (mainBuckets, true );
127+ clearEmptyBuckets (subBuckets, false );
126128 linkMarkers (mainBuckets, true );
127129 linkMarkers (subBuckets, false );
128130}
@@ -140,7 +142,8 @@ void Diagram::generateMarkersInfo()
140142 }
141143}
142144
143- void Diagram::linkMarkers (const Buckets &buckets, bool main)
145+ std::vector<std::pair<uint64_t , double >>
146+ Diagram::sortedBuckets (const Buckets &buckets, bool main)
144147{
145148 size_t maxBucketSize = 0 ;
146149 for (const auto &pair : buckets)
@@ -174,9 +177,38 @@ void Diagram::linkMarkers(const Buckets &buckets, bool main)
174177 }
175178 if (main && options->reverse .get ())
176179 {
177- std::reverse (sorted.begin (), sorted.end ());
180+ std::reverse (sorted.begin (), sorted.end ());
178181 }
179182
183+ return sorted;
184+ }
185+
186+ void Diagram::clearEmptyBuckets (const Buckets &buckets, bool main)
187+ {
188+ for (const auto &pair : buckets)
189+ {
190+ const auto &bucket = pair.second ;
191+
192+ bool enabled = false ;
193+
194+ for (const auto &id : bucket)
195+ {
196+ auto &marker = markers[id.second ];
197+ enabled |= (bool )marker.enabled ;
198+ }
199+
200+ if (!enabled) for (const auto &id : bucket)
201+ {
202+ auto &marker = markers[id.second ];
203+ marker.resetSize ((bool )options->horizontal .get () == !main);
204+ }
205+ }
206+ }
207+
208+ void Diagram::linkMarkers (const Buckets &buckets, bool main)
209+ {
210+ auto sorted = sortedBuckets (buckets, main);
211+
180212 for (const auto &pair : buckets)
181213 {
182214 const auto &bucket = pair.second ;
0 commit comments