I have set up a basic Bar Chart but I'm having problems properly implementing zoom behaviour. I am running into 3 issues mainly:
x-axis is expanding to the left side of the origin on zoom and y-axis is expanding below the origin. I want the values on the axes to zoom but the origin should remain at (0,0) for both y and x axis
The heights of the bars don’t increase/decrease when i zoom in/zoom out. Meaning if one bar stands at $400 on the y-axis for a particular value on x, and then when I zoom out the height of the bar should rescale according to the new y-axis. In this case the height should become smaller because the zoomed out axis will now contain a broader range of values.
I have looked at different examples as possible solutions but whats different in my implementation is that I'm using scaleBand instead of scaleLinear in my x-axis and hence I can't use rescaleX on it - which would solve my problems. (I cant use scaleLinear on axis because the values in the x-axis can be dynamic and follow no sequence.
This is a seemingly simple task but I'm having quite a trouble figuring out the best solution. Can anybody guide me?
Examples I've looked at:
https://github.com/d3/d3-zoom/issues/134
Somebody has asked in the comments how can you prevent x-axis from going to the left of the origin but the link provided in reply has been expired
http://jsfiddle.net/r19LL1a4/40/
Here the x-axis domain keeps adjusting according to zoom but mine isn't because it 'overflows' to the left
Codepen: https://codepen.io/abreezasaleem/pen/RwyYBeP
Related
I have used the zoom plugin for zooming my chart and it was quite useful but I am getting some really difficulty in zooming out. On my x-axis there are dates and I am zooming only the x-axis. If I zoom in and then zoom out it is not doing and showing the chart back to its position however if I simply plot the counting numbers along side the x-axis it zoom out successfully. I have searched but nothing helps in this regard.
Another suggestion I want is can I have a scroll depend on the zoom? like on x-axis when I zoom in graph go out of the canvas total width and we cannot see the future points. So can I have the scroll that increase the scroll as the zoom and we can scroll the graph? Or another suggestion is may be we can have a drag option like drag the chart to the position like we move and pull the chart to and fro.
Is there any way to limit the number of x axis values that will be displayed given that there are many points to be displayed on the graph? Otherwise,the x-axis labels overlap if you don't zoom. For example, please see the fiddle I've created http://jsfiddle.net/ggggg/jx3q8uoy/10/
enter code here. You can zoom in and out with the mouse wheel. If you click on update I reload new data on the graph but since there are many points for the size of the graph the x-axis values get mixed with each other which is not good. One cannot make a difference which is which unless they zoom. Is there any way to limit the number of x-axis labels to be shown to just a few so that they don't get mixed in such a way when the point amount is big and if you zoom in then you will be able to see the specific x-axis labels? For example, please have a look at the vis.js graph here http://visjs.org/examples/graph2d/03_groups.html. See when you zoom in or zoom out with the mouse wheel the x-axis labels get rescaled and many of them get hidden and if you zoom in they are shown. I need something like for flot.js
Thanks
Is there a way to create a horizontal bar chart (or modify the row chat)?
The row chart does almost what I want, however I want the y axis to be a continuous variable and it seems the row chart defines the y axis in terms of discrete/ordinal variables.
I was also thinking about rotating the svg with d3. (Rotating the whole div worked, however the brush effect did not rotate too).
I was thinking:
dc.renderAll();
d3.select("body").select("#barChart3").select("svg").attr("transform", function(d) { return "rotate(90)"});
however that erased the whole chart rather than rotating it.
Any suggestions?
Update:
I am having some success with rotating the svg (the brush works), however the graph is being cut off and I can't figure out why...
The two charts are completely different codebases and have different features. The Y axis of a row chart does not even use a scale, so you are quite right that it can't be made continuous in its present form.
It is an eventual goal to merge them, but for now I think rotating is your best bet.
As for the clipping problem you're having, look for the clip-path attribute on the generated SVG. It would need to be rotated as well, but for a quick fix you can probably remove it.
I am trying to use webgl-surface-plot to give a 3D surface plot of data. At several orientations, the axes labels get clipped. At other orientations, part of the graph gets clipped. Is there a way to expand the canvas size and/or move the axes labels closer to the axes?
You can change the default scale/zoom in the code and then just increase the canvas dimensions via the input options. I plan to add the starting zoom as an option to the chart, when I get a chance. I want to fix the axis labels as well. Currently they are at a fixed distance from the axes. They should, instead, be at a distance dictated by the length of the tick labels. Fixing this will be quite tricky, though.
I have a temperature line graph, and I want to draw a red vertical line when the two temperatures (surface temp and dew point) cross. So far what I do is I draw a vertical rectangle on top of my graph at places I calculated it crosses.
It works correctly, but there are a few downsides to this :
The line kind of stands out of the graph ... we can tell I added it later and not in the graph itself;
The pixels are hardcoded, if I change the graph width it might not be good (I could probably fix this, but still)
I would like a little tooltip when I highlight a line, but since it's a simple rectangle, it just sits there and is not dynamic at all.
What would be my best option to integrate this line better un my graphs?
Thanks!
plotLines are your best way to draw the line - http://api.highcharts.com/highcharts#xAxis.plotLines
Two things:
1) The difficult part will be calculating where the lines cross. if they do not cross at a data point, which they most likely won't, there will need to be some guesswork involved, as there is no value you can retrieve from the chart to tell you the axis value where they cross.
2) if you are using separate y axes for these two series, which I assume you must be since they are completely different units and scales, then the point where the lines cross will be COMPLETELY arbitrary and meaningless, as where they cross will be strictly a matter of how the scaling for each axis is set up, and the values have no actual correlation to each other.