I would like to show a time series over 6 months with a line chart and daily data points (so roughly 180 points). But I would only like to show tick lines (and labels) for the first of each month. If I use BaseUnit="Months" I only get one data point per month displayed. If I don't, I can't seem to suppress the tickmarks for each day which gets overly crowded.
A simple example of what I'm going for attached.
I imagine I'm missing something simple but can't see it. Would appreciate any advice. Thanks.
3 Answers, 1 is accepted
I partially solved the problem. I can show only the labels for the first day of each month with the code below. But I would also like to show the corresponding vertical gridlines for those days. Anyone know if that is possible programmatically in the same loop? Thanks.
-Dan
AvgPriceChart.PlotArea.XAxis.Items.Clear();for (int i = 0; i < 180; i++){ AxisItem newAxisItem = new AxisItem(); //show x-axis labels only for 1st day of each month DateTime dtx = dt.AddDays(-180 + i).Date; DateTime dtx2 = new DateTime(dtx.Year, dtx.Month, 1); if (dtx == dtx2) { string formattedLabelText = string.Format("{0:M/d}", dt.AddDays(-180 + i)); newAxisItem.LabelText = formattedLabelText; } else { newAxisItem.LabelText = ""; } AvgPriceChart.PlotArea.XAxis.Items.Add(newAxisItem);}Hi Dan,
I've answered your support ticket on this question and I am pasting my answer here for anyone else having a similar situation.
The underlying Kendo Chart widget exposes a step for the major grid lines. This property is not exposed in the RadHtmlChart server wrapper, though, so you can try something like the code below to set the property to the kendo chart configuration which will redraw the chart with the new settings:
<telerik:RadHtmlChart ID="AvgPriceChart" runat="server" Width="520" Height="320" Transitions="true"> <ClientEvents OnLoad="OnLoad" /> <Appearance> <FillStyle BackgroundColor="White" /> </Appearance> <ChartTitle Text="Avg. Daily Price (Last 6 months)"> <Appearance Align="Center" BackgroundColor="White" Position="Top"></Appearance> </ChartTitle> <PlotArea> <Appearance> <FillStyle BackgroundColor="#FFFFFF" /> </Appearance> <Series> <telerik:LineSeries DataFieldY="AveragePrice" Name=""> <Appearance FillStyle-BackgroundColor="DarkBlue" /> <LineAppearance Width="2" /> <TooltipsAppearance Visible="true" BackgroundColor="White"> <ClientTemplate> #= kendo.format(\'{0:C2}\', dataItem.AveragePrice) #<br /> #= kendo.format(\'{0:d}\', dataItem.dates) # </ClientTemplate> </TooltipsAppearance> <LabelsAppearance Visible="false" /> <MarkersAppearance Visible="false" /> </telerik:LineSeries> </Series> <XAxis DataLabelsField="dates" MajorTickType="Outside" MinorTickType="None" Type="Date" BaseUnit="Days" BaseUnitStep="1"> <LabelsAppearance Visible="true" RotationAngle="0" Step="30" /> <TitleAppearance Position="Center" RotationAngle="0" Text="" /> <MinorGridLines Visible="false" /> </XAxis> <YAxis> <LabelsAppearance Visible="true" DataFormatString="{0:C}" /> <TitleAppearance Position="Center" RotationAngle="0" Text="Avg. Price" /> <MinorGridLines Visible="false" /> </YAxis> </PlotArea></telerik:RadHtmlChart><script> function OnLoad(htmlChart) { var kendoWidget = htmlChart.get_kendoWidget(); var options = kendoWidget.options; options.categoryAxis.majorGridLines.step = 30; kendoWidget.setOptions(options); }</script>
protected void Page_Load(object sender, EventArgs e){ if (!Page.IsPostBack) { AvgPriceChart.DataSource = GetChartData(); AvgPriceChart.DataBind(); }}protected DataTable GetChartData(){ DataTable tbl = new DataTable(); tbl.Columns.Add(new DataColumn("AveragePrice", typeof(decimal))); tbl.Columns.Add(new DataColumn("dates", typeof(DateTime))); for (int i = 0; i < 181; i++) { tbl.Rows.Add(new object[] { i, DateTime.Now.AddDays(i) }); } return tbl;}Regards,
Marin Bratanov
Progress Telerik