I have 3 series on my chart. Is it possible to give user only one serie to modify (as dragable line) whilst other can't be modify?
This is totally undocumented, but browsing the source for the dragable plugin it is as simple as setting the isDragable property for that series to false.
series:[{},{isDragable:false}] //set the second series to be undraggable.
See working example here.
Related
I have 2 questions need your help.
I would like to add a button on each plot to be a setting button. I use label with event listener and it works well ( as shown in attached file). However, my client asked me to change from normal text to graphic icon? How should I proceed?
As you can see from the attached image, the third plot is macd series. The value rage is from -3e-8 to 3e-8 (by my observation). I manually set the maximum and minimum, and it get incorrect scale as shown.
How should I set the maximum and minimum for yScale?
I don't know how to get maximum and minimum value from a series. Can you suggest me?
A1 – Unfortunately, the current version of AnyChart doesn't provide an opportunity to add custom-made buttons inside the chart. But you can use a trick and use stage based layout. It means that the container includes a stage. The stage includes the stock chart all other elements by layers. Using this approach you can place an image (icon) upon the plot and set a listener just as for the 'settings' label.
For details, please, check the sample in the comment below.
A2 - We are planning to fix this behavior in 8.4.2 update (approximately by the end of November 2018).
I will notify you when the fix becomes available.
As a temporary workaround, you can get min /max value from your MACD indicator. For details, please, check the sample in the comment below.
You can apply min/max to the yScale of plot #0 like this:
chart.plot(0).yScale().minimum(minValue);
chart.plot(0).yScale().maximum(maxValue);
We are glad to inform you that we have released 8.4.2 update which brings many fixes and improvements. This update also includes a fix on the issue you reported. Now calculation of min/max of Y-scale works properly with small values. Update your binaries to get the fix.
I am trying to show machine states over time. Part of this is to reproduce/automate a report that used to be done by hand. It consists of coloring 2minute 'time slices' in Excel based on what the machine is doing.
(Sorry, not enough reputation to post a picture, but it is a classic heatmap where the state drives the color. Some non DC-JS fiddle: http://jsfiddle.net/ww6Lbnc5/4/)
I was able to generate most of what I want in the following jsfiddle:
http://jsfiddle.net/hwhfxz2t/14/
See fiddle for code.
The total state duration (for selected time frame) is shown in the pieChart, followed by the individual state lines and then the heatmap that people are used to. (the ZOOM and date selection buttons do not work in the fiddle but are there to select specific data ranges or zoom in if you like).
The line charts uses the original representation of the states, which consists of a time the state is entered and a duration.
In order to make the heat map work, I had to (I think) take the original data and convert it into individual minute chunks and mark them with a state. So for instance the original data specifying:
RUN state starting 14:30 for 300 seconds
becomes:
14:30=RUN, 14:31=RUN, 14:32=RUN, 14:33=RUN and 14:34=RUN
The code in lines 233-297 loops through the original data and generates a new one that does this. In cases where there is more than one state within a given minute, the last state survives.
This works okay but it seems that this code is exactly what is normally done in group().reduce(add,remove,init). But in this case I need to add multiple timeslots depending on the duration of a state.
Also, because it is now using a different crossfilter, maps do not update each other.
Here are my questions related to this:
Can I display a heatmap without supplying information for all individual
'cells'? (i.e. straddle cells based on a value, similar to rowspan in a table)
Can I add multiple values at once inside group().reduce()?
Is there an easy way to invert the yAxis so 0 is at the top?
When clicking a row in the heatmap, it selects a column and vice-versa?
I'm not sure if this should be in the crossfilter group. If so please ignore my rambling. If someone knows how to keep the charts linked by grouping better, please let me know.
--Nico
Concerning Question 3:
DC.js heatmaps currently do not support custom order functions on axis but there is a pull request that has been merged into the developing branch and should be accessible to the public soon.
You could manually edit the dc.js file to set the sorting in heatmaps to a custom function. In the latest (2.0.0-beta10) version it is the following line:
rowValues.sort(d3.ascending);
and accordingly
colValues.sort(d3.ascending);
I'm building a Google Visualization DataTable. You can see it here:
http://jsfiddle.net/MmyKU/4/
I've built out my United States color coding, but I need to add plots of about 8 US Cities on top of the color coding. I can't find any documentation or other examples online that specifies if/how this is possible. I've taken a few stabs at it with no results.
I'm just trying to:
1) Verify if it's possible?
2) Find a working example or have some help adding a second table to a single drawVisualization instance!
Thanks!
https://developers.google.com/chart/interactive/docs/gallery/geochart#Configuration_Options
add to your options
displayMode: 'markers',
Regions and Markers wont work at the same time.
SO if you want to color the background of the states, using markers mode, you can do it with CSS.
I'm documenting some examples for a Wordpress plugin i developed here:
http://cmoreira.net/interactive-world-maps-demo/advanced-customization/
Check the last example. It's not easy, since you have to find which child path number you want to color, and then you can do it. Example:
#visualization path:nth-child(5) {
fill:#cccccc;
}
Here's a forked example, of your code with the CSS above:
http://jsfiddle.net/cmoreira/Jqkjg/
Hope it helps!
creating simple charts with BIRT is easy, but now I would like to bring some more life to them...
imagine a simple line chart. Let's define as a requirement, that the maximum value should be highlighted. A further requirement would be that if the user clicks on this data point, something happens.
How can I solve this?
I can imagine that I could created a second value series which consists only of the highlighted data points.
But it would be nicer if there was a JavaScript API (or even a server side java api) with which I could loop through the data points and add a highlight on the fly. Is this possible?
I think I've found a good starting point:
http://www.birt-exchange.org/org/devshare/designing-birt-reports/276-birt-chart-scripting-dynamic-markers-and-datapoint-colors/
Now I have to find a way to add on click events to certain data points...
I need to plot and display several jpeg images in a single combined display (or canvas?). For example, suppose I have images {a,b,c,d}.jpg, each of different size, and I would like to plot them on one page in a 2x2 grid. It would be also nice to be able to set a title for each subplot.
I've been thoroughly looking for a solution, but couldn't find out how to do it, so any ideas would really help. I would preferably use a solution that is based on the EBImage package.
There are two ways how to arrange several plots with base graph functions, namely par(mfrow=c(rows,columns)) (substitute rows and columns with integers) and layout(mat) where mat is a matrix like matrix(c(1,2,3,4)).
For further info see ?par, ?layout, and especially Quick-R: Combining Plots.
However, as your question is about images I don't know if it helps you at all. If not, I am sorry for misinterpreting your question.
To add to Henriks solution, a rather convenient way of using the par() function is:
jpeg(filename="somefile.jpg")
op <- par(mfrow=c(2,2)
#plot the plots you want
par(op)
dev.off()
This way, you put the parameters back to the old state after you ran the code. Be aware of the fact this is NOT true if one of the plots gave an error.
Be aware of the fact that R always put the plots in the same order. Using mfrow fills the grid row by row. If you use mfcol instead of mfrow in the code, you fill up column by column.
Layout is a whole different story. Here you can define in which order the plots have to be placed. So layout(matrix(1:4,nrow=2) does the same as par(mfcol=c(2,2)). But layout(matrix(c(1,4,3,2),ncol=2)) places the first plot lefttop, the next one rightbottom, the third one righttop, and the last one leftbottom.
Every plot is completely independent, so the titles you specify using the option main are printed as well. If you want to have more flexibility, you should take a look at lattice plots.
If you do not want the images in a regular grid (the different sizes could imply this), then you might consider using the subplot function from the TeachingDemos package. The last example in the help page shows using an image as a plotting character, just modify to use your different images and sizes/locations.
The ms.image function (same package) used with my.symbols is another possibility.