VB2010 Setting logarithmic scale intervals - vb.net

I'm developing a financial application in which I need to display data in a chart with a logarithmic scale on the Y axis. Everything works fine except for the intervals. With the following:
chart.ChartAreas(0).AxisY.IsLogarithmic = True
chart.ChartAreas(0).AxisY.LogarithmBase = 10
chart.ChartAreas(0).AxisY.Interval = 1
chart.ChartAreas(0).AxisY.Minimum = CalcMinYVal(minYVal)
I get the CalcMinYVal multiplied by 10^0,10^1,10^2,10^3 and so on for the Y-axis values.
I would like to have the Y axis values increased by 1. How can I have the interval be REALLY 1?

You can enable the MinorGrid property
chart.ChartAreas(0).AxisY.MinorGrid = True
to show the horizontal lines in between the powers of 10 like shown below.
But there is a limitation in showing the value for each subdivision. They can only appear in fixed intervals by using the Interval property of the LabelStyle.
For example to show 10 subdivisions, you can set:
Chart.ChartAreas(0).AxisY.LabelStyle.Interval = 0.1
The number of the horizontal lines of the MinorGrid can be controlled by using its Interval propery:
Chart.ChartAreas(0).AxisY.MinorGrid.Interval = 1
and the values of the labels can be rounded by using the format property:
Chart.ChartAreas(0).AxisY.LabelStyle.Format = "{0.0}"

Related

add horizontal Line in existing Trend Indicator

I am using the MTrendSqueeze Indicator which is based on a simple moving average value.
I want TradingView to draw a line, once this condition is met:
Barclose divided through current trend indicator value = 50 or less
That means in the example picture it would be:
4,89 / 0.2 = 24,45
It´s less than 50, so draw a line there
MTrend example

Graph to show departure and arrival times between stations

I have the start and end times of trips made by a bus, with the times in an Excel sheet. I want to make the graph as below :
I tried with Matlab nodes and graphs but did not got the exact figure, below is the Matlab code which I tried as an example:
A = [1 4]
B = [2 3]
weights = [5 5];
G = digraph(A,B,weights,4)
plot(G)
And the figure it generates:
I have got many more than 4 points in the Excel sheet, and I want them to all be displayed as in the first image.
Overview
You don't need any sort of complicated graph package for this, just use normal line plots! Here are methods in Excel and Matlab.
Excel
Give each bus stop a number, and list the bus stop number by the time it arrives/leaves there. I'll use stops number 0 and 1 for this example.
0 04:41
1 05:35
1 05:40
0 06:34
0 06:51
1 07:45
1 15:21
0 16:15
Then simply highlight the data and insert a "scatter with straight lines"
The rest is formatting. You can format the y-axis and tick "values in reverse order" to get the time increasing as in your desired plot. You can change the x-axis tick marks to just show integer stop numbers, get rid of the legend etc.
Final output:
Matlab
Here is the Matlab documentation for converting Excel formatted dates into Matlab datetime arrays: Convert Excel Date Number to Datetime.
Once you have the datetime objects, you can do this easily with the standard plot function.
% Set times up as a datetime array, could do this any number of ways
times = datetime(strcat({'1/1/2000 '}, {'04:41', '05:35', '05:40', '06:34', '06:51', '07:45', '15:21', '16:15'}, ':00'), 'format', 'dd/MM/yyyy HH:mm:ss');
% Set up the location of the bus at each of the above times
station = [0,1,1,0,0,1,1,0];
% Plot
plot(station, times) % Create plot
set(gca, 'xtick', [0,1]) % Limit to just ticks at the 2 stops
set(gca, 'ydir', 'reverse') % Reverse y axis to have earlier at top
set(gca,'XTickLabel',{'R', 'L'}) % Name the stops
Output:

Scale chart Y axis labels

I have a vb.net windows form chart control on a form that displays a line chart of data that is made available in milli-gravities.
e.g. 5 gravities is given as 5000 milli-gravities, meaning that the Y-axis label is 5000
Is it possible to plot the same data but, have the Y-axis use labels in gravities, instead of milli-gravities? That is, for a Y data point of 5000, the Y axis label should be 5, or in other words have label value = auto label value / 1000
The data is currently bound to the chart using the following syntax
Chart1.Series.Add("Z Axis") 'Add multiple series
Chart1.Series.Add("Z RMS")
For Each Series In Chart1.Series 'Set each series to line type
Series.ChartType = SeriesChartType.Line
Next
Chart1.ChartAreas(0).AxisY.Maximum = 100000 'Start the Y axis limits at 100 gravities
Chart1.ChartAreas(0).AxisY.Minimum = 100000 'The max & min are changeable by user input
Chart1.ChartAreas(0).RecalculateAxesScale()
Chart1.Series("Z Axis").Points.DataBindY(record.Samples, "Z") 'Add the Y data points
Chart1.Series("Z RMS").Points.DataBindY(record.Samples, "RmsZ")
I thought maybe setting the Chart1.ChartAreas(0).AxisY.LabelStyle.Format might help, but I'm not sure how to use a format string to shorten an integer?

how can i plot a graph in in vb to to show a large amount of data

I want to plot graph to show the difference of Net connectivity in one hour . i found the average speed of One hour and the different between the Speed. and i add the difference percentage in a ListBox . I have to show the numbers in graph of one hour ? How can I Plot the Graph Any Suggestion Please .
enter code here
Dim Per As Double
For x As Integer = 0 To ListBox2.Items.Count - 1
Per = Math.Abs((avg - Val(ListBox2.Items.Item(x).ToString)) / (avg)) * 100
ListBox3.Items.Add(Per)
i have to plot all the number of ListBox3 contains more than 3000.
i found it...
For y As Integer = 0 To ListBox3.Items.Count - 1
s.Points.AddXY(y, Val(ListBox3.Items.Item(y).ToString))
Next
Chart1.Series.Add(s)

Bar and Line charts are not synced when in the same chart area

I have problem with a chart in vb.net. The problem is that line and bar are not synced in the chart area. I've attached a picture to make it clear what I mean
Here is the code where I populate the chart. I´m getting the data from a database.
Dim theDate As Date
For i As Integer = Count - 1 To 0 Step -1
'Chart1.Series("serRxTime").Points.AddY(dv(i)(0) / 60)
theDate = dv(i)(1)
Chart1.Series("serTime").Points.AddXY(theDate.ToString("dd-MMM HH:MM", enUS), dv(i)(0) / 60)
Chart1.Series("serAdd").Points.AddY(dv(i)(2))
Next
Line and column series have the same XValues that's why their centres are aligned. You would need to generate different XValues for the two series. XValues that are offset by a small margin. Something like this:
Chart1.Series("serTime").XValues = {0.8, 1.8, 2.8, 3.8,,...,count - 0.2}
Chart1.Series("serAdd").XValues = {1, 2, 3, 4,..., count}
I used 0.2 difference, but this will be different in your case (especially since it seems you have date axis set?). This would push the line series to the left.
I created an example for you. On the first picture you can see the data for the columns. Their x values are 1,2,3,4,...,12 and their y values are marked with blue.
And this is the values for the XY chart. As you can see I moved the x values by 0.2 to the left.