I'm creating a stacked bar chart with ZingChart. Assuming I am viewing daily data, each day shows 2 bars which are stacks of 5 values each.
According to the documentation, ZingChart should be capable of handling null values. However, if the first array of values in the series object is composed entirely of null values, the chart completely breaks and nothing appears on the canvas. Replacing even one of the null values with another value (including 0) will render the chart perfectly.
Here is an example CodePen:
https://codepen.io/Leandri/pen/NjVQaz
Try replacing one of the null values with another value, and the chart draws correctly. I have no idea what could be causing this and I'm thinking it must be a ZingChart bug. Please help!
Definitely a ZingChart bug.
If the FIRST series.values array has no length or all null values, combined with stacked bars and the stack attribute. The chart will not render. There is an obvious workaround for now.
Remove the first series object itself since its essentially doing nothing anyways. You can dynamically add the series using the API if you need it. This seems the most plausible.
Place a single 0 value inside the array for it to render.
This is not a high priority bug and has been pushed into our internal ticketing system.
Related
I am using the chartobject mouvemove event to display supplemental data depending one which data point index is being pointed at with the mouse.
My problem is that if in one series I have two events, they are represented by a single shape object on the chart so I can't display data respective for each data point. (Here the color means they are from the same organisation)
I suppose I could make a separate data series for every single datapoint but that is not elegant and I suspect excel will get mad at me if I try to add 50 or so dataseries
I have 2 sets of actual data that need to be stacked. At the current month I want to show 2 sets of projected data also stacked but the transition is currently gradual as if the empty cells are treated as zeroes. I want a vertical separation between the actual and projected.
I'm using Excel (2013). I've tried:
- The Hidden and Empty cells setting... but it locked on Zero (other options greyed out)
- Using #N/A
- Changing ranges (this works when the gap is at the end but not for the Projected values.
Separate the data with the zero into two series ie either side of the zero , then plot the two series ie left part and right part.
Another way would be to have a second chart, transarent except for the second part of the data series sitting on top...
Used to do that with forecasting based on previous values, what looked like one line actually had two charts overlaid one on the other.
So, based on the comment built this:
So, you can now follow and complete the detail you need.
I wanted to make a dynamic chart that plots out the graph of a standard curve for a bio assay we perform frequently. Often to boost the fit of the curve you may drop one or two data points on either end of the data set. So using vlookups and if statements I have a scheme that performs that data trimming, such that my data always starts in Row 1 and the column length simply shortens.
My table works great, but my xy scatter chart goes bananas on these changes. I have the plot on a log log scale, which looks fine if the full data set is present. I lose the x axis detail when I perform a trim. The x- axis then resets to range of 1 to length of my data set.
How can I prevent this?
UPDATE
I added some information. I know there are VBA ways to do this but I would prefer to keep the spreadsheet as simple as possible. I would think excel should be able to handle this.
So if I have a bad fit I may want to trim the data series either from the beginning or end of the data set. I accomplish that with the spinner buttons to dynamically change the table but the following happens
My formula that updates the columns looks like the following. Its messy.
=IF(ISNA(IF(VLOOKUP(F6,$C$4:$D$11,2,FALSE)+1>8-($B$5-1),"",INDEX(C$4:C$11,VLOOKUP(F6,$C$4:$D$11,2,FALSE)+1))),"",IF(VLOOKUP(F6,$C$4:$D$11,2,FALSE)+1>8-($B$5-1),"",INDEX(C$4:C$11,VLOOKUP(F6,$C$4:$D$11,2,FALSE)+1)))
In the formulas use NA() instead of "". Filling cell with "" does not result in a true empty cell and is the reason why you are experiencing issues with your chart.
Hope that helps.
I may be missing the obvious here, but just hard-code the graph with a range of your choosing. In the sample screenshot, making the graph auto defaults the max range to 100,000. I went in and hard-coded the maximum to 50,000 (circled). Afterwards, the 5th data point is not displayed in the chart. Doesn't matter what the data shows at this point.
My problem is as follows:
The user inputs two numbers between 2 and 25, these numbers are used to create a grid. Every point on the grid has (x,y) coordinates. Based on the amount of points the user chose, my excel sheet is filled up with up to 25x25 (x,y) coordinates.
Example: A 6x7 grid is chosen by the user, the table is filled with 42 (x,y) coordinates and all other values in the table are set to "".
Now I want to use a scatterplot with lines connecting each array to plot the data.
Problem 1: If I only select the 6x7 part of the table that has values in it and create the scatterplot the result is correct. Until the user specifies a different grid, for example 8x9, then the graph is obviously missing two rows and two columns of input data.
Problem 2: If I select the entire 25x25 part of the table, including all the "" values, the graph axes get messed up. The y-axis works properly, but the x-axis shows sequential values (0-7) instead of the x-coordinates.
Problem 3: If I replace all the "" values in the table to 0 or NaN and plot the entire table the axes are correct, but the lines between the scatter data get messed up.
Question:
Is there a way to automatically change the input data for the plot, or is there a way to correctly display the values on the x-axis if I select all the data?
Not sure this will work in your case, but it's worth a try, especially since no one's addressed your post in 3+ hours. I've had success with this approach: 1) charting the largest data set, 2) copying the resulting chart, and 3) trimming the data it draws from to produce all smaller data sets.
To get this to work takes a lot of thought in laying out that largest data set so that all the other plots follow as needed. To illustrate, I've somewhat mimicked your data and in the animated gif I show largest data set, plus 2 others produced by copying it. Then I demonstrate how to make the second one, including the rescaling required to make all plots scaled equally. Notice that I've arranged things so that only one set of x-values feeds all the series. If you can do this, it makes working with the Excel's interface much easier.
After wrestling with it all night I came to the following solution:
Instead of setting all the empty cells to "" or zero the cells should be be set to #N/A (not available). The graph properly ignores the #N/A cells exactly like I want it to and updates when values are entered into them.
I am facing this difficulty :
I want to indicate where my user is in a range of data in a chart, as well as where the average is.
That's not too difficult, that part I figured out already :)
However, if I have several charts in 1 report, my "user bar'" sometimes gets a different color, according whether it's below or above average.
This is very confusing for my users, because they can't think, let's say, "the yellow bar is always me".
The legend always has to be read, and that's not so user-friendly.
I'll illustrate the problem in an attachment.
I know how to have the same series color, but within this series, I want 1 particular color to always represent the value of the average, another to represent my user, etc.
Is this possible ?!
Thanks a lot in advance.
IMAGE CAN BE FOUND HERE : http://www.kava.be/cms_bldn/jaspercharts.jpg
EDIT: I'm working with the ChartCustomizer now :
BarRenderer renderer = (BarRenderer) chart.getCategoryPlot().getRenderer();
renderer.setSeriesPaint(0, Color.blue);
renderer.setSeriesPaint(1, Color.yellow);
renderer.setSeriesPaint(2, Color.green);
renderer.setSeriesPaint(3, Color.red);
Still, this handles the series in the order they arrive from the resultset.
What I'm looking for is how I can use the series expression (as entered in 'series expression' field in the categorie series dialogue), instead of fixed indexes like 0-3.
I would suggest checking whether the sequence of your series is same in both the chart's chart data, plus color series in chart properties is also or not.
If it is same than it should print same.