See the attached modified demo with the dbf file.
The problem is that you essentially need two x values - one for the labels (years), and one for plotting, and the latter ones must be equidistant. If you'd use TAChart of Lazarus trunk you'd have the possibility to use multiple x values. But in the release version - which I am assuming in the demo project - this is not possible. However, you can extend the Text field of the data point record by the year values:
Chart1ListSource1.Item[datapoint_index]^.Text := Format('%s|%g', [
Chart1ListSource1.Item[datapoint_index]^.Text,
Chart1ListSource1.Item[datapoint_index]^.X ]);
As you can see this adds the x value as a string the the original farm name, separated by a pipe character ('|').
Then for drawing the axis labels you must extract the year string from the combined Text field by finding the separator character and copying the text afterwards. This happens in the OnGetMarkText event of the x axis (or the OnMarkToText event)
The same is needed for the series labels - if you want to display them - by picking the text before the pipe character. This is the responsibility of the OnGerMark event of the series.
Since your data are not entered in an ordered fashion you must sort them. You can either sort the data set (which is preferred because it will also sort the DBGrid), or you can sort the ListChartSource (
ListChartSource.Sorted := true).
When the data is sorted you iterate through the dataset and populate the ListSource. I avoid the DBChartSource at all because it turned out that it does not report the RecordCount correctly - which would show many empty bars in the chart...
After (or during) population of the ListChartSource the Text field is extended as explained above, and the X field is set to the running index to make it equidistant.
I think I should note that it is important to enclose the population steps of the ListChartSource by a BeginUpdate/EndUpdate block because otherwise the extent of the axis wil not be up-to-date.
I hope this description is clear enough so that you understand the principle. Study the code provided. Otherwise ask again.