ダイアグラムをAPI側から操作する方法は以下のリンクにほぼ集約されていると思います。
http://gis.stackexchange.com/questions/37547/how-to-use-the-qgsdiagramrendererv2
パイチャートの場合
以下の例はパイチャートを表示するものです。
チャートの配色にはQgsVectorRandomColorRampV2
クラスを使用して自動的に割り当てています。
layer = self.canvas.currentLayer() # パイチャート diagram = QgsPieDiagram() ramp = QgsVectorRandomColorRampV2.create() ds = QgsDiagramSettings() # 色と属性をリストに登録 # この例ではループにしているが、上のリンクでは辞書を使用している colors = [] attrs = [] for i in range(16, 20): colors.append( ramp.color(float(19-i)/4) ) attrs.append( i ) # 色と属性リストをセット ds.categoryColors = colors ds.categoryIndices = attrs ds.size = QSizeF( 10.0, 10.0 ) # 縮尺に関係なく固定サイズにする場合 ds.sizeType = QgsDiagramSettings.MM # 背景色を透明 ds.backgroundColor = QColor(255,255,255,0) # 枠線の色 ds.PenColor = QColor("black") # 固定サイズダイアグラムの場合 dr = QgsSingleCategoryDiagramRenderer() # ダイアグラムの種類と設定をセット dr.setDiagram( diagram ) dr.setDiagramSettings( ds ) # レイヤーにダイアグラムレンダラをセット layer.setDiagramRenderer( dr ) # ダイアグラムレイヤー設定をセット dls = QgsDiagramLayerSettings() # 要素に対するダイアグラムの位置を指定 dls.placement = QgsDiagramLayerSettings.AroundPoint layer.setDiagramLayerSettings( dls ) self.canvas.refresh()
上記の例では描画される円の大きさは全て同じですが、何らかの属性値を大きさに反映させたい場合は
QgsLinearlyInterpolatedDiagramRenderer
クラスを使用します。
バーチャートの場合
バーチャートの場合は必ずQgsLinearlyInterpolatedDiagramRenderer
クラスを使用します。
このクラスでは値の最大値を設定したりすることができます。
layer = self.canvas.currentLayer() # バーチャート diagram = QgsHistogramDiagram() ramp = QgsVectorRandomColorRampV2.create() ds = QgsDiagramSettings() colors = [] attrs = [] for i in range(16, 20): colors.append( ramp.color(float(19-i)/4) ) attrs.append( i ) ds.categoryColors = colors ds.categoryIndices = attrs # バーの幅を設定 ds.barWidth = 2.0 ds.sizeType = QgsDiagramSettings.MM ds.backgroundColor = QColor(255,255,255,0) ds.PenColor = QColor("black") # バーチャートの場合は必ずこのクラスを使用 dr = QgsLinearlyInterpolatedDiagramRenderer() # サイズの基準とする属性を設定 dr.setClassificationAttribute( 4 ) # その属性の最大値を設定 dr.setUpperValue( 2.0 ) # 最大値に対応する大きさ dr.setUpperSize( QSizeF(1.0, 1.0) ) dr.setDiagram( diagram ) dr.setDiagramSettings( ds ) layer.setDiagramRenderer( dr ) dls = QgsDiagramLayerSettings() dls.placement = QgsDiagramLayerSettings.AroundPoint layer.setDiagramLayerSettings( dls ) self.canvas.refresh()
テキストチャート
テキストチャートとは、下図のような図を描画するものです。
このチャートを使用する場合は背景を設定しないと黒丸になってしまいます。
diagram = QgsTextDiagram() ramp = QgsVectorRandomColorRampV2.create() ds = QgsDiagramSettings() colors = [] attrs = [] for i in range(16, 20): colors.append( ramp.color(float(19-i)/4) ) attrs.append( i ) # テキストチャートの場合は文字の色になる ds.categoryColors = colors ds.categoryIndices = attrs ds.sizeType = QgsDiagramSettings.MM # 背景色を設定 ds.backgroundColor = QColor(150,150,255,255) # 枠線の色、線幅 ds.PenColor = QColor("black") ds.PenWidth = 0.1 # フォントを指定 ds.font = QFont("Times", 10, QFont.Bold) dr = QgsLinearlyInterpolatedDiagramRenderer() # チャート円の大きさを設定 # 使用するフィールドとその最小値、最大値と、それらに対応するサイズを指定する dr.setClassificationAttribute( 3 ) dr.setLowerValue( 0.0 ) dr.setUpperValue( 8.0 ) dr.setLowerSize( QSizeF(10.0, 10.0) ) dr.setUpperSize( QSizeF(20.0, 20.0) ) dr.setDiagram( diagram ) dr.setDiagramSettings( ds ) layer.setDiagramRenderer( dr ) dls = QgsDiagramLayerSettings() dls.placement = QgsDiagramLayerSettings.AroundPoint layer.setDiagramLayerSettings( dls ) self.canvas.refresh()
QgsDialogLayerSettingsクラスについて
上記の3つの例では、このクラスは dls.placement = QgsDiagramLayerSettings.AroundPoint
でしか使っていませんでした。
このクラスではダイアグラムの表示位置等を指定することができます。
位置の指定は、点の側(上記の例)や、点の上、横などと指定できるほか、位置を定義してあるフィールドを指定することもできます。
詳細はQgsDialogLayerSettingsクラスを参照してください。