This article describes how to create a map with bar charts and a legend.
Required software
Quantum GIS (qgis.org)
LegendSVG (qgis.nl)
Inkscape (optional) (inkscape.org)
Required files
Map layer with areas
Map layer with data
As an example, a vector map of the Dutch provinces is used. On top of this a layer is placed from a csv file. It contains the x and y coordinates of the centroids and the number of inhabitants by province, divided into three age groups.
Limitations
This technique is not suitable if a lot of areas are to be displayed. The map would become very cluttered. Another limitation is that bar width is not adjustable.
Preparation
Make sure the required layers have been opened and are fully visible.
Displaying bar charts
Select the properties of the layer with the data (right mouse button) and go to the tab ‘Overlay’. Put a check mark before ‘Display diagrams’ and select ‘Bar chart’ as chart type. Now, the attributes can be added one at a time. In this case, the population numbers per age group. Select an attribute, click ‘Add’, and repeat this for the other attributes.
Now you must specify the bar height. Usually, the attribute with the highest maximum value at the regional level will be used to determine the maximum bar height. Unfortunately, that will go wrong if this attribute is zero in one or more regions. Click ‘Find maximum value’ to determine the maximum value for the selected attribute and set the maximum bar height (‘Size’). In the current stable version of QGIS (1.7.4) it has no effect to select ‘Map units’ as size unit in stead of millimeters. Click ‘Apply’ to see the effect of the settings on the map. If necessary, move the dialog somewhat to the left, in order to see the map. Write down the settings for maximum value and maximum bar height. You will need this information later, if you create a legend. If the result is what you want, click ‘OK’ to exit the dialog box.
You can also enter the maximum value manually. For the readability of the legend it is better to use a rounded number.
Sometimes you also need to make the points symbols 100 percent transparent (on the ‘Style’ tab). Otherwise, point symbols will appear in areas with very low values for the selected attributes.
Create legend
Currently, QGIS has no option to automatically create a legend for a map with bar, pie or circle charts. For this I wrote the program LegendSVG, to be downloaded on this site. Unzip the file somewhere on your computer and double click LegendSVG.exe.
With this program, a map legend in SVG format can be made. The legend can be added to the map in the Print Composer. LegendSVG uses points a measuring unit. One point is 1/72 inch and one inch is 2.54 cm. Dimensions in millimeters (S) can be converted to points with the formula: 72 x S / 25.4.
First, select the chart type (‘Bar chart’). The bar height and the corresponding maximum value that you wrote down, can be filled in at ‘Object size’ and ‘Maximal value’. At ‘Categories’, set the number of bars to 3. Because the bars have a fixed width of 5 mm in QGIS, you don’t have to change ‘Bar width’. Now you can customize all text that will appear in the legend. For the different ways to set the colors I refer to the help text of the program. Legend height is calculated automatically, based on the data you have entered. This is not (yet) done with legend width. If the settings are complete, click on the ‘Build SVG code’ button. Several lines of code will appear. A SVG file is basically a text file. Now save the results with the ‘Save to file’ button. Choose a filename. The file extension should remain ‘svg’. With the ‘Show measures’ button you can see what the dimensions in millimeters have become. Write these dimensions down, because you will need them later in QGIS.
Before you combine the legend with the map in QGIS, you can inspect the result with Inkscape. With this program you can modify the legend, if you wish. You could also choose to finish the entire map with Inkscape, or some other graphical program. However, this will not explained further.
Map lay-out
Open a new Print Composer (“Print layouter”) from the ‘File’ menu. Make sure the map is displayed and add a title. The legend can now be added with the ‘Add image’ button. You can also use the ‘Layout’ menu. Now click on the spot where the legend should appear. A white rectangle appears. Select this rectangle and in the right panel on the ‘Item’ tab enter the right size (unfortunately, QGIS unfortunately does not do this automatically). Then open the legend file using the button with the three dots next to the ‘Load’ box. If all went well the legend will appear.
Now it may seem as if something went wrong. In the current stable version of QGIS (1.7.4) the appearance of the bars in the Print Composer differs from the appearance on the map canvas. After you save the map with ‘Export as image’ or ‘Export as SVG’, the size of the bar charts on the map will match the size on the legend again.
You can also save your map in PDF format, but currently the menu option ‘Export as PDF’ does not work well with bar charts. You can solve this by printing to a virtual printer such as PDF Creator.
I cant find the way to do this in QGIS 2.0
The procedure in QGIS 2.0:
1) Select the layer with the data and open the Properties dialog.
2) Go to the Diagrams tab, enable ‘Display diagrams’ and select diagram type ‘Histogram’.
3) On the Appearance tab choose the fields for each bar to be displayed.
4) On the Size tab select the field for diagram size.
Hello,
thank you for a great plug.
Could you tell me how to get rid of the black thin border around the legend? I’m trying to avoid any borders in my final map layout.
Open the SVG file with a text editor (Notepad) and remove lines 4 (comment) and 5 (rectangle command). More extensive editing can be done with Inkscape.
It is great but I want to know how to create and visualize graph only for selected region or Polygons. Many Thanks
Ranjan