Jump to content
Software FX Community

JuanC

Staff
  • Posts

    863
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by JuanC

  1. Can you please check the version of the ChartFX.WPF.dll? If it is version 8.0.3422 it is possible we have already fixed this issue and it is available as a hotfix. You can either download our most recent hotfix here or post/send us a small app that duplicates the issue if you want us to investigate this problem before upgrading your bits. JuanC
  2. We use the series.Content for the different panes in a pie chart so you could use different fonts by using your own visuals but there is no built-in fuctionality that would allow you to set the title size to be smaller in the panes that are not the "main" pane and we do not fire an event when you click on one of the smaller panes. Note that internally we treat them differently, for example highlight and tooltips are disabled in the smaller pies, so it would certainly be possible to add a property that allows you to shrink those titles. That being said, if you resize the titles to be 4x smaller they will probably be unreadable and I am not sure I would sacrifice the readability of the chart because of the transition effect. If I was you I would probably remove the animation with the OnPanelTransitions property. Something else we have considered is to align the title in the 3D pie charts similarly to what we do in 2D where the title is close to the pie (instead of at the top of its available space). The issue with this would be that the title would have to be moved if you rotate the pie. This is the right forum to submit and discuss feature requests. We appreciate all the feedback. JuanC
  3. In your sample app Series.Clear() should have been enough, we have uploaded a new hotfix that fixes this bug so you should NOT need to worry about Data.Series or Data.Points. Also note that if all you wanted was to flip the series Z order to make the bottom visible you can do something like SeriesAttributes s1 = chart.Series[1]; chart.Series.RemoveAt(1); chart.Series.Insert(0, s1); This would avoid having to reprocess the series data. Regards, JuanC
  4. These 2 issues have been fixed on build 3544 or later. I apologize for the issues related to the legend box, we included an optimization related to how we render the legendbox that was in our to-do list for a long time but it was clearly more tricky than we originally thought. JuanC
  5. >> pie gets resized into an oval before starting the animation This is an issue because from a layout point of view there are 2 columns and the extra series share the space in the 2nd column. When there is only 2 series the second series will then occupy the total height, because pie charts want to be round then internally we will limit the height. The code used for the animation was not taking the fact that the chart will use less height into account when animating the RenderTransform, we have uploaded a new hotfix build (marked 3544 or later). Note that this was independent of whether the chart was 2D or 3D. It might be more obvious in 3D because rendering the 3D chart is slower. >> the chart titles seem to be linked to the resizing algorithm Unfortunately the code that handles the animation have no knowledge of the things being animated, in a pie chart with titles there is an extra panel that contains the title and plotarea. It is not possible for us to tweak this without a major rewrite. We have added a boolean property to AnimationAttributes called OnPanelTransitions that you can use to turn off this animation if desired, e.g. chart1.Animation.OnPanelTransitions = false; Regards, JuanC
  6. Although Win/Loss charts can obviously be used to display win/loss/tie records they are also being increasingly used in dashboard scenarios to show a collection of values where there is a binary condition and you want to quickly see which values met such condition, e.g. to display a list of several products where you plot sales per month and want to easily see if the sales quota was met. We will use as a sample and starting point a sparkline chart we created in this post, but will change the gallery to WinLoss and make sure we specify a goal for each product. If you do not specify a goal we will use 0 if there are positive and negative values or half the range if all values are positive/negative. [color= blue] <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]Chart.AllSeries[/color][color= blue]> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]AllSeriesAttributes[/color][color= blue]> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]AllSeriesAttributes.GalleryAttributes[/color][color= blue]> <[/color][color= #a31515]cfxwinloss[/color][color= blue]:[/color][color= #a31515]WinLoss [/color][color= red]Goal[/color][color= blue]="30" /> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]AllSeriesAttributes.GalleryAttributes[/color][color= blue]> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]AllSeriesAttributes[/color][color= blue]> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]Chart.AllSeries[/color][color= blue]>[/color] [img=http://community.softwarefx.com/blogs/wpf/WinLoss1_thumb_4EC3F15B.png] The WinLoss gallery will try to choose a couple of colors in the current palette close to red and blue but you can assign precise colors by using the LossFill, LossStroke, WinFill and WinStroke properties. Additionally we can use ConditionalAttributes to color the biggest and smallest value, note that we use the AndCondition and MaximumValueCondition from the ChartFX.Data assembly, we use the AndCondition to make sure we only mark the biggest/smallest value if it was greater/smaller than the goal. [color= blue]<[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]Chart.AllSeries[/color][color= blue]> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]AllSeriesAttributes[/color][color= blue]> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]AllSeriesAttributes.GalleryAttributes[/color][color= blue]> <[/color][color= #a31515]cfxwinloss[/color][color= blue]:[/color][color= #a31515]WinLoss [/color][color= red]Goal[/color][color= blue]="30" [/color][color= red]LossFill[/color][color= blue]="#FF8B89" [/color][color= red]LossStroke[/color][color= blue]="#FF8B89" [/color][color= red]WinFill[/color][color= blue]="#909090" [/color][color= red]WinStroke[/color][color= blue]="#909090"/> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]AllSeriesAttributes.GalleryAttributes[/color][color= blue]> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]AllSeriesAttributes[/color][color= blue]> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]Chart.AllSeries[/color][color= blue]> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]Chart.ConditionalAttributes[/color][color= blue]> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]ConditionalAttributes [/color][color= red]Fill[/color][color= blue]="#007010" [/color][color= red]Stroke[/color][color= blue]="#007010"> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]ConditionalAttributes.Condition[/color][color= blue]> <[/color][color= #a31515]cfxData[/color][color= blue]:[/color][color= #a31515]AndCondition[/color][color= blue]> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]RangeCondition [/color][color= red]From[/color][color= blue]="30"/> <[/color][color= #a31515]cfxData[/color][color= blue]:[/color][color= #a31515]MaximumValueCondition[/color][color= blue]/> </[/color][color= #a31515]cfxData[/color][color= blue]:[/color][color= #a31515]AndCondition[/color][color= blue]> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]ConditionalAttributes.Condition[/color][color= blue]> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]ConditionalAttributes[/color][color= blue]> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]ConditionalAttributes [/color][color= red]Fill[/color][color= blue]="Red" [/color][color= red]Stroke[/color][color= blue]="Red"> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]ConditionalAttributes.Condition[/color][color= blue]> <[/color][color= #a31515]cfxData[/color][color= blue]:[/color][color= #a31515]AndCondition[/color][color= blue]> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]RangeCondition [/color][color= red]To[/color][color= blue]="30"/> <[/color][color= #a31515]cfxData[/color][color= blue]:[/color][color= #a31515]MinimumValueCondition[/color][color= blue]/> </[/color][color= #a31515]cfxData[/color][color= blue]:[/color][color= #a31515]AndCondition[/color][color= blue]> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]ConditionalAttributes.Condition[/color][color= blue]> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]ConditionalAttributes[/color][color= blue]> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]Chart.ConditionalAttributes[/color][color= blue]>[/color] Finally, we will use WinLoss to show a new feature implemented in Chart FX for WPF which is also useful in bar charts when because of chart size, number of points or the combination of both generates thin bars, the issue is that we calculate sizes and positions using doubles, this allows WPF zoom and pixel independent architecture to work as expected but might generate an issue where the space between the bars is clearly not constant. For example if we now switch to 24 points per product and set the chart size to 120 pixels we might get something like this A new property in PlotArea called PixelSnapMethod now supports three values: None: Default value which uses double for all operations Full: We make sure that the size of the bars and the space between them is constant, note that this might generate white space to the sides of the chart. Marker: Space between bars is kept constant but size of the markers might vary slightly, this approach will not suffer from the same white space issue when using Full [color= blue]<[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]Chart.PlotArea[/color][color= blue]> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]PlotAreaAttributes [/color][color= red]Margin[/color][color= blue]="0" [/color][color= red]AxesStyle[/color][color= blue]="None" [/color][color= red]Background[/color][color= blue]="{[/color][color= #a31515]x[/color][color= blue]:[/color][color= #a31515]Null[/color][color= blue]}" [/color][color= red]Stroke[/color][color= blue]="{[/color][color= #a31515]x[/color][color= blue]:[/color][color= #a31515]Null[/color][color= blue]}" [/color][color= red]PixelSnapMethod[/color][color= blue]="Full"/> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]Chart.PlotArea[/color][color= blue]>[/color] You can see all bars and white spaces sizes have been rounded to integers but because the number of pixels was not evenly divisible by the number of points there is some wasted space around the chart, if you switch PixelSnapMethod to Marker we will only make sure all spaces are the same, by making some bars wider than others it will not generate the empty areas around the plot area. Note that even though in this sample the space wasted by the Full method is not too bad, it could increase as the number of points increase. JuanC
  7. JuanC

    Assembly Names

    I tried something like this Assembly a1 = typeof(System.Windows.Controls.Button).Assembly; Module m1 = a1.ManifestModule; string f1 = m1.FullyQualifiedName; Assembly a2 = typeof(ChartFX.WPF.Chart).Assembly; Module m2 = a2.ManifestModule; string f2 = m2.FullyQualifiedName; And got the ManifestModule Name and FullQuallifiedName in the ChartFX assemblies to be very similar to the .NET framework assemblies, with the main difference being we are normally not on the GAC Can you describe in detail what to do you get with our assemblies? Can you post a small sample app that exhibits this behavior? JuanC
  8. In Chart FX for WPF we try to support the most common gallery types in our core DLL (ChartFX.WPF.dll) but at the same time we want to be very agile supporting additional gallery types, we do this in separate satellite assemblies which allows us to keep our library at a reasonable size but still allowing users to easily create other not-so-common gallery types. If you check the Gallery enumeration which is the list of gallery types we support in our core dll, you will find the following galleries: [color= blue]public enum [/color][color= #2b91af]Gallery[/color]{ Bar, Area, Line, Curve, Pie, Scatter, Bubble, Radar, Polar, Doughnut, Gantt, OpenHighLowClose, Candlestick, HighLowClose, TreeMap, CurveArea, Step, Pyramid, Cube, Funnel, Surface,} Note that we use gallery type in a strict sense, so we are not counting here any variations such as stacked/stacked100, 2D/3D, etc, the galleries will try to honor as many of these common properties as possible. Also note that each gallery in the enumeration is backed up by a class and sometimes these classes will expose additional properties, for example when you create a Radar chart you will get lines connecting the points but you can also paint the area as follows [color= blue]<[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]Chart.AllSeries[/color][color= blue]> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]AllSeriesAttributes[/color][color= blue]> <[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]AllSeriesAttributes.GalleryAttributes[/color][color= blue]> <[/color][color= #a31515]cfxGalleries[/color][color= blue]:[/color][color= #a31515]Radar [/color][color= red]Gallery[/color][color= blue]="Area"/> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]AllSeriesAttributes.GalleryAttributes[/color][color= blue]> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]AllSeriesAttributes[/color][color= blue]> </[/color][color= #a31515]cfx[/color][color= blue]:[/color][color= #a31515]Chart.AllSeries[/color][color= blue]>[/color] Other classes also add interesting functionality, the Bar class allows bar charts to use X values, the Pie class allows you to create 3D pie charts where the height of each slice depends on another variable, etc. You can also set the GalleryAttributes property on a per-series basis, which allows you to use different settings for different series in your chart. In addition to this set of built-in galleries we have developed the following assemblies that support extra gallery types Rose: Sometimes also called wind chart HighLow: Displays 2 series filling the area between the 2 where the color depends on which series is bigger Bullet: Used in dashboards to compare performance against comparative measures. XYZ: Includes support for XYZ surface as well as XYZ scatter plots WinLoss: Used for Win/Loss records and also show values that meet a specific condition. Using these extra gallery types is straightforward, the manual way would be to add a reference to the DLL in your project, then setting (in XAML or code) the SeriesAttributes.GalleryAttributes property to point to the class that implements the new gallery type. Our design time wizard can automate these steps if you use the gallery option Please note that in both Visual Studio 2008 and 2010 our wizard will automatically add the required references to your project but in Blend 3 this is not supported so you have to manually add the reference before running the wizard. We will not show external galleries (or chart styles) if the reference is not present. JuanC
  9. JuanC

    Partial trust

    You can download our most recent hotfix builds here Please note that you will need to run IE as an Administrator if UAC is enabled. JuanC
  10. The chart class does not support binding to the Series property. In order to make our control more useful in MVVM situations we created a separate class called ChartView in the same assembly. This class adds binding support to the Series property. Please note that many collections in WPF do not support bindings, e.g. Grid.ColumnDefinitions, it is possible that other collections in the ChartView class will not support bindings. We will add support for these depending on customer feedback. Regards, JuanC
  11. Although different motifs might default to different line thicknesses you can override those by using the SeriesAttributes either globally (AllSeries) or on a per-series basis. <cfx:Chart.AllSeries> <cfx:AllSeriesAttributes StrokeThickness="5"/> </cfx:Chart.AllSeries> Note that this will also affect other gallery types as their templates will typically honor stroke thickness, e.g. bars will have a wider border. We do not have a way to easily modify the thickness for the lines only. You could alternatively borrow the template for the line, adjust the default line thickness and set it using the template property of the SeriesAttributes class. Regards, JuanC
  12. JuanC

    Clearing Chart

    We have fixed this issue on our most recent build (3538 or ltater) which can be downloaded here Please note that you will need to run IE as an Administrator if UAC is enabled. JuanC
  13. This should be fixed on build 3538 available now. I apologize for the inconvenience. JuanC
  14. Is your app a WPF browser application (XBAP) ? Have you checked if the ChartFX.WPF.dll is being downloaded to the client machine? Does the reference to ChartFX.WPF.dll has the CopyLocal property set to true? Can you post a dummy app that exhibits this problem? About the wizard, please check if when downloading the hotfix you ended up with 2 version of our design dlls. This would explain the wizard dissapearance. You must have a Design folder with all ChartFX.WPF assemblies with the word Design in the name and the version of the Design dlls should match the version of the runtime dlls (e.g. .3488) Regards, JuanC
  15. A bullet chart - designed by Stephen Few from PerceptualEdge - allows you to compare a performance measure against a comparative measure (e.g. compare year revenues against target values), optionally displaying qualitative ranges.This post will describe a new assembly to be included in Chart FX for WPF that will help you create bullet charts. This gallery requires at least 2 series, so let
  16. There is a feature that supports connecting points around null values but unfortunately the current public builds only support this functionality for categorical charts i.e. charts without a numerical/date X axis. We have added support for XY charts in our current internal build but because it contains other changes we are still running some tests on it. Once it is released you will be able to write the following code chart1.Data.InterpolateHidden = true; Regards, JuanC
  17. You have to do the following Move the BindingPathX from AllSeriesAttributes to the Series in the Chart.Series collection. We do not try to use any of the BindingPath* properties from AllSeries Remove the BindingPath from AxisLabelAttributes: You should not use this property when using XY charts. Remove the AxisX.AutoScale = false setting, this is not necessary as we will set it to false internally when you set Min and Max I would also recommend that to improve the formatting in your X axis you choose one of the following If you know your data will never include more than a day you can set Format="Time" and CustomFormat="hh:mm" If your data might include more than a day you might want to set Format="DateTime" (no CustomFormat required) JuanC
  18. I just tried the following and it seemed to work without the RelativeSource in the binding <cfx:Chart Gallery="Bar" ItemsSource="{Binding Path=Employees}" x:Name="chart1"> <cfx:Chart.Series> <cfx:SeriesAttributes BindingPath="TotalBonuses" Content="{Binding Path=TotalBonusesLabel}"/> </cfx:Chart.Series> </cfx:Chart> JuanC
  19. You do not have to use templates if all you want to show is a string, you can use the SeriesAttributes.Content property. Is the TotalBonusesLabel property exposed by the same object that exposes TotalBonuses? JuanC
  20. Our default behavior is only to use the marker size in the legend if there are more than 2 series using different marker sizes. You can customize the marker size used in the legend with this code chart1.LegendBox.ItemAttributes[chart1.Series].MarkerSize = new Size(6, 6);Note that currently there is no way to accomplish this in XAML, we expect to support this in future builds. JuanC
  21. This post will add features to the sparkline chart built on our previous minimizing ink post and it is driven by comments and emails we have received about this topic. Q: One reader asks
  22. We have fixed this issue and also fixed some scaling issues when you set the Stacked property on a per-series basis. This will be included in build 3518 or later. I apologize for the inconvenience. JuanC
  23. We think this might be a Chart FX issue where we mistakenly used a 3.5 SP1 only API and it has been fixed in later builds. You can download our most recent hotfix here (make sure you run IE as an Administrator if UAC is enabled). If you still experience this after upgrading please post or send a sample app that reproduces the issue. Regards, JuanC
  24. JuanC

    Minimizing Ink

    To achieve a gray rectangle showing a range you will want to create an AxisSection in the Y axis. We have made some modifications to axis sections to allow bindings so you will need to download hotfix 3517 or later in a couple of days. I will make an additional blog post showing this and other features soon. JuanC
  25. In part 1 we showed how to use the crosstab transform and the GridPanePanel to create a pane matrix where users can quickly compare multiple variables, in this post we will try to improve other aspects of the chart, one of the main differentiators WPF brings to the table is the use of data templates to include rich information about your data in any control. In our sample let
×
×
  • Create New...