Why Second Edition?
        What's nNew in Second Edition
        What This Book Includes
        Is This Book for You
        What Do You Need to Use This Book
        How This Book is Organized
        What is Left Out
        Using Code Examples
        Customer Support

Why Second Edition?

I have received plenty of feedback from readers since the first edition of my book “Practical C# Charts and Graphics” was published a decade ago. Many readers asked for an updated edition. I realize that .NET technology has advanced and changed a lot in the past decade and there is a need to incorporate these new developments in .NET Framework into the book and examples contained therein.

In the first edition, the example projects were built and tested on Visual Studio .NET 2005 under Windows 2000 or XP operating system. In this new edition, I decide to port and rebuild all the examples in the book using the C# Windows Forms App (.NET Framework) template based on the latest Visual Studio 2019 and .NET Framework 4.7.

What's New in Second Edition

In addition to port the example code to the latest .NET technology, the second edition also makes some structural changes and replacement of some chapters with the updated content.

Example Structure

In the first edition, each example was built as a separated project, which results in over 60 independent projects. As several readers pointed out, there are some issues with this approach:

To avoid these problems, in the second edition, I decide to restructure the example project – build all the examples within a single project in Visual Studio. This way, different examples can share common code or use class inheritance to avoid code duplication. I also add the navigation button links on the MainForm window, which allows you to easily switch from one example to another by simply clicking the corresponding navigation link.

Auto-Implemented Properties

In C# 3.0 and later, auto-implemented properties make property-declaration more concise when no additional logic required in the property accessors. For example, in the first edition, the LineStyle class in Exmaple3_2 has the following code:

using System;
using System.Drawing;
using System.Drawing.Drawing2D;

namespace Example3_2
    public class LineStyle
        private DashStyle linePattern = DashStyle.Solid;
        private Color lineColor = Color.Black;
        private float LineThickness = 1.0f;
        private bool isVisible = true;

        public bool IsVisible
            get { return isVisible; }
            set { isVisible = value; }

        virtual public DashStyle Pattern
            get { return linePattern; }
            set { linePattern = value; }

        public float Thickness
            get { return LineThickness; }
            set { LineThickness = value; }

        virtual public Color LineColor
            get { return lineColor; }
            set { lineColor = value; }


While in the second edition, with the auto-implemented properties, the above code reduces to the following:

using System.Drawing;
using System.Drawing.Drawing2D;

namespace CsharpChart.Chapter03.Example3_2
    public class LineStyle
        public bool IsVisible { get; set; } = true;
        public float LineThickness { get; set; } = 1.0f;
        virtual public DashStyle LinePattern { get; set; } = DashStyle.Solid;
        virtual public Color LineColor { get; set; } = Color.Black;

When you declare a property as shown in the above example, the compiler creates a private, anonymous backing field internally that can only be accessed through the property’s get and set accessors.

Note that we also add initializers to auto properties, which is a new feature introduced in C# 6. Prior to C# 6, you need to set the property value in a constructor. The auto-property initializer allows you to set the value of a property at the same time you declare it in a class.

The example code in the second edition uses auto-implemented properties with initializers, which greatly simplifies implementation and makes coding faster.


.NET Framework 4.6 and later provides a SIMD (Single Instruction Multiple Data) enabled types through the System.Numerice namespace. SIMD operations can be parallelized at the hardware level. That increases the throughput of the vectorized computations, which are common in mathematical, scientific, and graphics applications.

The .NET SIMD-enabled types include the following:

In this edition, we will use the vectors and matrices defined in the System.Numerics namespace, while in the first edition, we used the matrix in the System.Drawing.Drawing2D namespace and Point3 created by our own for 3D matrix operations.

Embed JavaScript Chart Library

In the second edition, we have replaced Chapter 8 “DataGridView and Chart User Controls” in the first edition by the new Chapter 8 “Embed JavaScript Charts”. The reason for doing this is that the DataGridView control provides a way to display data in a tabular format, but it does not add any unique feature to charts and graphics. Another reason is the rapid advancement in client-side chart and graphics applications. Instead of creating your own charting package from scratch, I want to show you another way to create charts and graphics – embed a client-side JavaScript charting library called ECharts into your Windows-Forms desktop applications via WebBrowser control. There are many client-side JavaScript charting libraries, including HighCharts, Chartist, Chart.js, Google Charts API, etc. Any of these packages will work as long as it provides features you need in your applications.

Embed Gincker Graphics

The second edition also uses the new Chapter 9 “Embed Gincker Graphics” to replace the old Chapter 9 “Excel Charts in C# Applications” in the first edition. Gincker Graphics is a much more powerful chart and graphics platform than Excel.

With Gincker Graphics, you can create a variety of charts and graphics, ranging from simple to sophisticated, just by typing in a mathematic formula, pasting a dataset, or uploading a data file; you do not need to write a single line of code or rely on any special software package. It converts different chart and graphics applications into templates and implements a common interface and standardized input/output format by encapsulating all the programming details internally. Gincker Graphics allows you to save your work into gincker – a unique URL link, which can be used to regenerate, manipulate, modify, and customize charts and graphics.

Furthermore, you can embed the Gincker Graphics into your WinForms applications using the WebView control. This way, you can create advanced charts and graphics within your desktop application without the need to write any code on chart and graphics programming.

The following is the updated content, which is basically similar to that in the first edition.


Welcome to Practical C# Charts and Graphics. This book is intended for C# .NET developers who want to add professional graphics and charts to their applications. My hope is to write the ultimate C# chart and graphics programming guide, useful to C# application programmers of all skill levels.

We have all heard the saying "a picture is worth a thousand words". Creating charts and graphics plays a very important role in every Windows application. Charts and graphics can make data easier to understand, can add interest to a report, and can have wide applications in our daily life. For instance, in the scientific, engineering, and mathematics community, there is always the need to present data and results graphically. Microsoft Visual C# programming language is one of the best of the few available development tools that provide the computational capability to both generate data as a simulation engine and display it in a variety of graphical representations based on its Graphical Device Interface (GDI+).

The power of the C# programming language, combined with the simplicity of implementing Windows Form applications in Visual Studio .NET, makes real-world Windows program development faster and easier than ever before. Visual C# is a versatile and flexible tool that allows users with even the most elementary programming abilities to produce sophisticated charts, graphics, and graphical user interfaces (GUIs). The level of complexity and sophistication of the graphics and charting applications you create is limited only by your needs, curiosity, and imagination.

As you may have already noticed, most bookstores offer hundreds of C# programming books. The vast majority of these books are general-purpose user guides and tutorials that explain the basics of the C# tool and how to use it to implement simple C# applications. Some of these books contain a chapter or two covering graphics and charts. None, however, provide the level of detail that you will find in this book.

This book is written with the intent of providing you with a complete and comprehensive explanation of the C# graphics and chart capability, and pays special attention to creating charts that can be used directly in your own real world C# Applications. Much of this book contains original work based on my own programming experience in developing commercial Computer Aided Design (CAD) packages. Without C# and the .NET framework, development of advanced graphics and charts can be a difficult and time-consuming task. Often, adding even simple charts or graphs to your applications requires you to waste either effort creating a chart program, or money buying commercial graphics and chart add-on packages.

Using third-party graphics and chart add-on products in your applications has several drawbacks, however:

Visual C# and its powerful GDI+ class make it possible to easily implement your own professional graphics and chart package using entirely managed C# codes. However, Visual C# provides no tools for creating three-dimensional (3D) graphics objects. Even a 3D point, the simplest 3D graphics object, must first be defined in a suitable 3D coordinate system before it can be used as a 3D graphics object.

Practical C# Charts and Graphics provides everything you need to create advanced charts and graphics in your .NET applications. In this book I will show you how to create a variety of graphics and charts that range from simple two-dimensional (2D) X-Y plots to complicated three-dimensional (3D) surface graphs using managed C# code. I try my best to introduce readers to the C# graphics program in a simple way--simple enough to be easily followed by C# beginners who have never had experience developing C# graphics and chart applications. You will learn from this book how to create a full range of color graphics applications and how to use C# controls to create impressive graphic and chart effects without having to buy expensive third-party add-ons.

Practical C# Charts and Graphics is not just a book, but a powerful 2D and 3D chart and graphics package in its own right. You may find that some of the examples in this book can be immediately used in solving your real-world problems, and that some may give you inspiration for adding advanced graphical and sophisticated chart capabilities to your own applications.

What This Book Includes

This book and its sample code listings, which are available for download at this website, provide you with:

Is This Book for You

You do not have to be an experienced C# developer or expert to use this book. I designed this book to be useful to people of all levels of C# programming experience. In fact, I believe if you have some experience with programming languages other than C#, you will be able to sit down in front of your computer, start up Microsoft Visual Studio .NET and C#, follow the examples provided in this book, and quickly become familiar with C# graphics programming. For those of you who are already experienced C# developers, I believe this book has much to offer you as well. There is much information in this book about graphics and chart programming that is not available in any other C# tutorial and reference book. In addition, most of the example programs provided in this book can be used directly in your real-world application development. This book will provide you with a level of detail, explanation, instruction, and sample program code that will enable you to do just about anything graphics and charts-related using Visual C#.

Perhaps you are a scientist, engineer, mathematician, student, or teacher instead of a professional programmer: this book is still a good bet for you. In fact, my own background is in theoretical physics, a field involving extensive numerical calculations, as well as graphical and charting representations of calculated data. I have dedicated my effort to this field for many years, starting from my undergraduate up to my Ph.D. My first computer experience was with FORTRAN. Later on, I had programming experience with Basic, C, C++, and MATLAB. I still remember how hard it was in the early days to present computational results graphically. I often spent hours creating a publication-quality chart by hand, using a ruler, graph paper, and rub-off lettering. A year later, our group bought a graphics and chart package. However, I still needed to prepare my data in a proper format in order to process the data with this package. During that time, I started paying attention to various development tools that could be used to create integrated applications. I tried to find an ideal development tool that would easily allow me to not only generate data (computation capability) but also represent data graphically (graphics and chart power). The C# and Microsoft Visual Studio .NET development environment made it possible to develop such integrated applications. Ever since Microsoft .NET 1.0 came out, I have been in love with the C# language, and have been able to use this tool to successfully create powerful graphics and chart applications, including commercial CAD packages.

The majority of the example programs in this book can be routinely used by C# developers and technical professionals. Throughout this book, I will emphasize the usefulness of C# chart and graphics programming to real-world applications. If you follow this book closely, you will be able to easily develop various practical graphics and chart applications, from simple 2D x-y plots to sophisticated 4D slice graphs. At the same time, I will not spend too much time discussing program style, execution speed, and code optimization, because there is already a plethora of books out there dealing with these topics. Most of the example programs in this book omit error handlings. This makes the code easier to understand by focusing on the key concepts.

What Do You Need to Use This Book

To make the best use of this book and understand the algorithm, you will need no special equipment. To run and modify the sample programs, you need a computer that is capable of running Windows 10 or Windows 7 operating system. The software installed on your computer should include Visual Studio 2019 or 2017 (Community version is fine).

All of the example programs in this book were created and tested in the Visual Studio 2019 Community Version under Windows 10, so it is better to run the example project on the same platform.

How This Book Is Organized

This book is organized into nine chapters, each of which focuses on a different topic concerning creating C# graphics and chart solutions. The following summaries of each chapter will give you an overview of this book contents:

Chapter 1, C# Graphics Basics
This chapter reviews some of the fundamental aspects of C# graphics programming. If you are an experienced C# programmer, some of this material may already be familiar to you. It includes discussions of various coordinate systems; basic graphics shapes in the GDI+ class; the color system; and advanced custom color maps used in C# applications.

Chapter 2, 2D Matrices and Transformations
This chapter covers the mathematical basics of 2D graphics programming. 2D matrices and transformations in homogeneous space are discussed, including translation, scaling, reflection, and rotation. These 2D matrices and transformations allow a C# application to perform a wide variety of graphical operations on graphics objects in a simple and consistent manner.

Chapter 3, 2D Line Charts
This chapter contains instructions of how to create elementary 2D X-Y line charts. It introduces basic chart elements including chart area, plot area, axes, title, labels, ticks, symbols, and legend. These basic chart elements are common in other types of charts as well.

Chapter 4, Specialized 2D Charts
This chapter covers the specialized charts often found in commercial chart packages and spreadsheet applications. These specialized charts include bar charts, stair-step charts, stem charts, charts with error bars, pie charts, area charts, polar charts, and stock charts.

Chapter 5, 3D Matrices and Transformations
This chapter extends the concepts described in Chapter 2 into the third dimension. It explains how to define 3D graphics objects, and how to translate, scale, reflect, and rotate these 3D objects. It also describes the transformation matrices that represent projections and transformations that allow you to view 3D graphics objects on a 2D screen.

Chapter 6, 3D Charts
This extensive chapter begins with a description of the coordinate system used in 3D charts and graphics, and shows you how to create 3D coordinate axes, tick marks, axis labels, and grid lines. It then explains techniques for creating a wide variety of 3D charts, including 3D line charts, 3D mesh and surface charts, contour charts, 3D bar charts, 4D slice charts, and 3D combination charts. In creating these charts, a few specialized techniques, such as Z-order, are used to manipulate the data displayed on your 2D computer screen.

Chapter 7, Charts and User Controls
This chapter shows you how to put 2D and 3D chart applications in a custom user control, and how to use such a control in your C# applications. It begins by explaining the basics of the custom user controls in a C# Windows application, including how to provide design-time support to the controls. Then, it describes in detail the procedure of creating custom user controls for 2D and 3D chart applications, and demonstrates how to use these controls in real-world C# applications.

Chapter 8, Embed JavaScript Charts
This chapter illustrates how to embed a JavaScript charting library into a Windows Forms application using a WebBrowser control. It shows how to create various charts and graphics using the client-side charting library.

Chapter 9, Embed Gincker Graphics
This chapter explains how the Gincker Graphics platform can be embedded into a C# application through a WebView control. It shows how to create various charts and graphics in C# Windows Forms applications using Gincker Graphics without the need to write a single line of code.

What Is Left Out

This book provides an in-depth description of C# chart and graphics programming for real-world .NET applications. The background material concerning C# graphics was selected for inclusion in the book specifically according to the graphical needs of creating C# chart applications. Thus, this book does not cover image processing, such as the technique for manipulating bitmapped images and image animation. Advanced ray traced images that display reflective, shadowed, transparent, and textured objects are beyond the scope of this book and are not addressed.

Using Code Examples

You may use the code in this book in your applications and documentation. You do not need to contact me or the publisher for permission unless you are reproducing a significant portion of the code. For example, writing a program that uses several chunks of code from this book does not require permission. Selling or distributing the example code listings does require permission. Incorporating a significant amount of example code from this book into your applications and documentation does require permission. Integrating the example code from this book into your commercial products is not allowed without the written permission from the author.

Customer Support

I am always interested in hearing from readers, and would like to hear your thoughts on this book. You can send me comments by e-mail: jxu at I will also provide updates, bug fixes, and ongoing support on this very website.

You can also obtain the complete source code for all of examples in this book from this website by clicking here.