I have an application that dumps statistics once every minute into ElasticSearch. Using Kibana, I've created a lens to visualize the values over time. All good.
Occasionally, the application skips a dump (which is a separate issue I'll be working on), so I may have occasional missing values. In the Lens, the Line chart breaks the line when a value is missing for a certain time (see screenshot).
How can I interpolate between the available values and show a continuous line instead?
EDIT
To make it clear, I'm asking how to fix the chart in the Lens. The issue of skipped dumps is a separate one and needs to be addressed separately. I may still have some missing values (unlikely but not impossible), and I would like my Lens to show a continuous chart anyway.
UPDATE
While I found the "Missing values" setting in "Visual Options" and I set it to "Linear", the interpolation is rendered with a dashed line. How can I make it the same as the main line?
Related
I'm working on an application that get values from different cryptocurrency exchanges and I'm trying to plot that values on Kibana (V 7.12.1) to visually compare the oscillations, everything is working fine (I think), the main application is getting the values from the exchanges and sending to ElasticSearch (V 7.12.1) and I can see the values on Kibana/Discover. I don't have much experience on ElasticSearch/Kibana.
So, in Kibana, I created a new dashboard with a Lens panel, I added the DateTime field to X-axis, ask price and bid price to Y-axis and the exchange name as a break down. The plot looks nice as you can see:
The problem is, at this moment, the values are between 42940 and 43080, a very small difference comparing to the total size of the Y-axis and I can not adjust the Y-axis to get a small window to only see the values of interest.
I don't need different scales to each line, in really it must be the same scale. And values will change over the time, so, the value window will change in size too.
Thanks in advance.
Update:
I did all the same tests on ElasticSearch 7.16.3 and Kibana 7.16.3 and I got exact the same results.
Finally I found it.
There is an Up-Down button to set up the Y-axis, clicking on that button we get the window "Left axis". In that window, the field "Bounds" does this adjust.
Full: to see all the graph;
Data bounds: to automatically adjust the zoom;
Custom: to insert your own limits;
I have a job runner app that runs jobs sporadically throughout the day, and I'm reporting metrics for them. They don't run continuously, so AI interpolates between the gaps and the graph looks weird. I would like the graph to either not interpolate or just start/end at zero, so for now I am going to try reporting non-pre-aggregated zero values before and after the jobs, so at least this interpolation will be at the bottom of the graph and be easier to read.
Is there a correct way to indicate the end of a segment of values and the start of another, to avoid this?
Here is a good example of what I'm talking about:
This is a single job runner from our staging env. which ran four jobs in this timeframe, and you can see where the dotted lines are between jobs. This is what I'm trying to avoid. This is exacerbated in a real environment with multiple runners or if you need to compare, e.g.:
What I would like to do is somehow avoid the dotted lines and just go to/from zero (have all the dotted lines at the bottom so they don't interfere with other series). Maybe it's not possible.
I tried sending zero values (both direct and pre-aggregated) at the beginning and end of the jobs and using Operations hoping they would "bookend" the jobs, but neither seemed to do anything.
Metrics Troubleshooting Guide explains the dashes on the line chart type. Generally, the line chart is a great option for showing the continuity and trends. It is a poor option for showing sparse data points. It is so because this type of the chart is rendered by drawing the line segments between known values but without visualizing each value. For better illustration, think about how the line would look when there is only one known value on the entire chart. The two options could be: 1 - show a horizontal line (that’s what we do, but in addition, we add the dashed visualization so that you know the other values are missing) or 2 - not show the line and switch visualization to display just a dot (we let you do it manually by picking scattered plot chart option).
I'm working with a lot of rank data that would benefit from a way to simultaneously display its respective year on the x-axis. For example, I want to create the following graph adapted from the dygraph gallery:
Note how the rank information (red arrow) for a particular weekend (green arrow) are both displayed on the x axis.
I know this might not be possible with dygraphs now, at least it wasn't available in these demos, so I guess my follow up question would be are there any plans to make this possible (how about in the [r] {dygraph} package)? Apparently a plotter called flot can do this.
UPDATE 1
If indeed this feature does not exist yet, then the following, although potentially obvious to Dygraph developers, is a thought for accomplishing the task easily (perhaps I'm wrong). At first I thought it would be necessary to provide input data of the form shown in Table A
However such input is a major deviation from the existing Dygraph parser model who expects one abscissa. Such suggests that a modification to the parser to accept a "Dual Label" option, requiring that both labels be contained in a single abscissa element as in Table B, would be easier. Thereafter, with the option specified, the parser would manage CSV as it usually would with the exception that it is now "bin cognizant" and detects division between labels 1 and 2 by use of an acceptable delimiter (in this case a single quotation mark - maybe not the best choice) and divisions between label 1 abscissa elements by name change. Behind the scenes each point gets its unique x coordinate and the "Dual Label" option causes the dygraph to visually scoot up a couple pixels to accommodate an extra label. Not sure how to handle full zoomed scrolling put simply leaving a label 1 element centered until an adjacent label 1 element comes on screen is an option.
Dygraphs rule!
There's no simple way to do this with dygraphs now. As you say, there's a fairly deep assumption that there's only a single x-axis.
Your best bet would be to either modify the existing legend plugin to do this, or to create a new plugin which renders just the "Weekend 1", "Weekend 2" line. While the plugins API isn't official yet, it is at least somewhat documented.
If you get this to work, please share your code!
I use Jenkins and its Plot Plugin to generate statistics.
Example:
For every Build I plot the line of codes. Lets say I have like 500.000 lines and it changes about +-100 lines per build.
Since the plot y-axis always starts with 0 the whole plot is meaningless. It looks like 1 straight line.
Same goes for other metrics, if the value is too high.
Question: is there any configuration to set minimum y-axes to the minimum value?
Unfortunately, I think the answer to your question is currently 'no'.
First of all, the documentation does not give any hints towards such an option.
Secondly, Given that the Jenkins Plot Plugin uses JFreeChart for the plotting, the setting of a range for the Y-axis should be done using the 'getRangeAxis' function. A search in the source-code does not reveal a call to this function.
Lastly, you do not seem to be the only one that has this problem. Issue JENKINS-2841 asks for the same functionality, but appears not be solved yet.
I have a real-time line chart. For that I use TimeSeries. Now I get new values every second. But I don’t want to get a x-axis line every second. I like to get one every ten seconds.
So maybe, first it would be important to know where the x-axis lines were painted. Is it xymultipleseriesdataset.addSereies(timeSeries)? So maybe I can create a loop that add every 10 second a new title for the x-Axis... or am I totally wrong?
If I am right, you are asking for a way to control which labels are shown on the x-axis.
To do that, you may use the XYMultipleSeriesRenderer.addXTextLabel(timeInMillis, "requiredlabel").
This will cause the automatic generation of labels to stop and you can then have complete control on which labels are shown and which are not.
Edit:
Seems like I was wrong about automatic generation of labels stopping.
Use the method XYMultipleSeriesRenderer.setXLabels(0) to stop the generation of labels. This method is used to set how many labels should be generated for the x axis. Passing 0 should stop automatic labels to stop altogether.