2016-11-14 6 views
1

私は現在、pythonモジュールopenpyxlを試しています。仕事中のタスクを自動化し、スプレッドシートを自動的に生成しようとしています。必要なシートの1つについては、集計されたデータから散布図を生成する必要があります。ただし、散布図は2つの点を結ぶ複数の線で構成する必要があるため、散布図の個々のx/y系列はそれぞれ2つの点のみを接続する必要があります。Openpyxl charts - ランダムな未接続セルからのデータ系列は可能ですか?

from openpyxl import Workbook 
from openpyxl.chart import (
    ScatterChart, 
    Reference, 
    Series, 
) 

wb = Workbook() 
ws = wb.active 

rows = [ 
    ['Size', 'Batch 1', 'Batch 2'], 
    [2, 40, 30], 
    [3, 40, 25], 
    [4, 50, 30], 
    [5, 30, 25], 
    [6, 25, 35], 
    [7, 20, 40], 
] 

for row in rows: 
    ws.append(row) 

chart = ScatterChart() 
chart.title = "Scatter Chart" 
chart.style = 13 
chart.x_axis.title = 'Size' 
chart.y_axis.title = 'Percentage' 

xvalues = Reference(ws, min_col=1, min_row=2, max_row=7) 
for i in range(2, 4): 
    values = Reference(ws, min_col=i, min_row=1, max_row=7) 
    series = Series(values, xvalues, title_from_data=True) 
    chart.series.append(series) 

ws.add_chart(chart, "A10") 

wb.save("scatter.xlsx") 

Iスキャッタに接続したい2点ただし、X(及びY)座標:

一般私はチャートはこの小さな例のように生成される散乱openpyxl資料から求めポイントは隣接するセルに配置されません。 だから私は「Ctrlキー」を保持することにより、Excelで手動でデータ系列をインポートし、二つのセルを選択したときに、私はこのような何かを得る:

「!!シート$ A $ 4;シート$ A $ 6」

の代わり

シート!$ A $ 4:$ A $ 6 '

セルをドラッグして範囲を選択すると、

隣接していないセルが2つしかない場合、これは明確なmin_row/min_col/max_rowなどがないことを意味しますが、xとyの両方のセルペアのリストのみです。接続された/隣接する範囲の代わりにセルのリストとしてopenpyxlでデータ系列を作成する方法はありますか?

助けていただければ幸いです! :)

答えて

0

現在、チャートシリーズで不連続セル範囲をサポートする計画はありません。私はあなたのデータを試して整理したり、連続した範囲で作業するための参照を作成することをお勧めします。

0

これはうまくいきませんか? 私はあなたのような状況のための例を変更した、私のために働くようだ:

from openpyxl import Workbook 
from openpyxl.chart import (
    ScatterChart, 
    Reference, 
    Series, 
) 

wb = Workbook() 
ws = wb.active 

rows = [ 
    ['Size'], 
    [2, 'Batch 1', 'Batch 2'], 
    [3, 40, 30], 
    [4, 40, 25], 
    [5, 50, 30], 
    [6, 30, 25], 
    [7, 25, 35], 
    [None, 20, 40], 
] 

for row in rows: 
    ws.append(row) 

chart = ScatterChart() 
chart.title = "Scatter Chart" 
chart.style = 13 
chart.x_axis.title = 'Size' 
chart.y_axis.title = 'Percentage' 

xvalues = Reference(ws, min_col=1, min_row=2, max_row=7) 
for i in range(2, 4): 
    values = Reference(ws, min_col=i, min_row=2, max_row=8) 
    series = Series(values, xvalues, title_from_data=True) 
    chart.series.append(series) 

ws.add_chart(chart, "A10") 

wb.save("scatter.xlsx") 

結果:

Screenshot of output spreadsheet

+0

あなたがdownvoteするつもりなら、少なくとも私に理由を教えて... – ryry1985

関連する問題