前提・実現したいこと
python3.9でopenpyxlを利用して,縦軸が2つある散布図グラフを作成したいと思っています.
発生している問題・エラーメッセージ
下のリンクを参考に書いても,エラーなどは無く動くのですが,
結果のグラフで,第2軸が来るはずの左側の縦軸が表示されない状態です。
https://stackoverflow.com/questions/63696835/python-openpyxl-scatter-plots-with-secondary-y-axis
生データは,1行目に項目名のタイトル,
2行目以降にデータが行方向に並んだexcelファイルです
タイトル1 タイトル2 タイトル3
〇 △ ◆
〇 △ ◆
〇 △ ◆
〇 △ ◆
ここから横軸はタイトル1,縦軸にタイトル2,3のデータを使用して,
グラフを作成したいと思っています。
必要な設定など,何か分かる方いたらよろしくお願いします。
ソースコード
python
1#生成されるグラフは 2# x軸; 角度 3# y軸は: heat-O2 4 5 6 #heat-O2のグラフ作成(第1軸) 7 chart_h_O2 = ScatterChart() 8 #chart_t.title = "" 9 chart_h_O2.x_axis.title = "Angular cordinate [deg.] (from"+ str(temp_min) + "K to " + str(temp_max) + "K)" 10 chart_h_O2.y_axis.title = "Thermo diffusion [J/m^3/s]" 11 chart_h_O2.y_axis.scaling.logBase = 10 12 chart_h_O2.y_axis.numFmt = "0.00E+00" 13 chart_h_O2.x_axis.spPr = GraphicalProperties(ln =LineProperties(solidFill="E6E6E6", w=1*12700)) 14 chart_h_O2.y_axis.spPr = GraphicalProperties(ln =LineProperties(solidFill="E6E6E6", w=1*12700)) 15 chart_h_O2.x_axis.majorGridlines.spPr = GraphicalProperties(ln=LineProperties(solidFill= "E6E6E6", w=0.01*12700)) 16 chart_h_O2.y_axis.majorGridlines.spPr = GraphicalProperties(ln=LineProperties(solidFill= "E6E6E6", w=0.01*12700)) 17 18 19 20 #第2軸に付け足すもの↓ 21 22 #O2のグラフ作成(第2軸) 23 chart_O2_2 = ScatterChart() 24 #chart_C8H18.title = "O2拡散量" 25 #chart_O2.x_axis.title = "Angular cordinate [deg.] (from"+ str(temp_min) + "K to " + str(temp_max) + "K)" 26 chart_O2_2.y_axis.title = "O2 diffusion [kg/m^3/s]" 27 chart_O2_2.y_axis.numFmt = "0.00E+00" 28 #chart_O2.x_axis.spPr = GraphicalProperties(ln =LineProperties(solidFill="E6E6E6", w=1*12700)) 29 chart_O2_2.y_axis.spPr = GraphicalProperties(ln =LineProperties(solidFill="E6E6E6", w=1*12700)) 30 #chart_O2.x_axis.majorGridlines.spPr = GraphicalProperties(ln=LineProperties(solidFill= "E6E6E6", w=0.01*12700)) 31 chart_O2_2.y_axis.majorGridlines.spPr = GraphicalProperties(ln=LineProperties(solidFill= "E6E6E6", w=0.01*12700)) 32 33 # 凡例の配置位置 34 #chart1.legend.position = 'b' 35 #r,l,t,b and tr for right, left, top, bottom and top right. default is right. 36 37 nrow=ws.max_row 38 ncol=ws.max_column 39 40 # 系列のY軸の値の参照する 41 rvalues = Reference(ws, min_col=r+1, max_col=r+1, min_row=2, max_row=73) 42 thermovalues = Reference(ws, min_col=h+1, max_col=h+1, min_row=2, max_row=73) 43 O2values = Reference(ws, min_col=O2+1, max_col=O2+1, min_row=2, max_row=73) 44 C8H18values = Reference(ws, min_col=C8H18+1, max_col=C8H18+1, min_row=2, max_row=73) 45 46 # 系列のX軸の値の参照する 47 agvalues = Reference(ws, min_col=ag+1, max_col=ag+1, min_row=2, max_row=73) 48 49 # 系列のデータをSeriesオブジェクトとして定義する 50 51 series_h = Series(thermovalues, agvalues, title = "Thermo diffusion") 52 series_O2 = Series(O2values, agvalues, title = "O2 diffusion" ) 53 54 serieslist = [series_r, series_h, series_O2, series_C8H18] 55 56 # 各系列のプロットを表現するマーカーのシンボルの指定を辞書形式で用意 57 #marker_symbol = {1:"triangle", 2:"diamond", 3:"square", 4:"star", 5:"circle", 6:"plus"} 58 59 # マーカーを塗り潰す色を同様に辞書形式で用意 60 # 色の指定はRGBのHex指定とColorChoiceオブジェクト指定による2タイプで指定 61 #marker_solidFill = {1:"00bFFF", 2:"FF4500", 3:"FFF0F", 62 # 4:ColorChoice(prstClr="midnightBlue"), 63 # 5:ColorChoice(prstClr="yellowGreen"), 64 # 6:ColorChoice(prstClr="cornflowerBlue")} 65 66 67 #各系列のマーカーの形状,色を指定 68 marker_solidFill = {1:"4169e1", 2:"ffc0cb", 3:"90ee90", 4:"90ee90"} 69 marker_linesolidFill = {1:"191970", 2:"ff4500", 3:"228b22", 4:"228b22"} 70 for i, obj in enumerate(serieslist, 1): 71 72 # ラインの設定 73 #obj.graphicalProperties.line.noFill = True 74 obj.spPr.ln.solidFill = marker_linesolidFill[i] 75 # 以下マーカーの設定 76 obj.marker.symbol = "circle" # シンボルを指定 77 obj.marker.size = 5 # サイズを指定 78 obj.marker.graphicalProperties.solidFill = marker_solidFill[i] # 塗りつぶし色 79 obj.marker.graphicalProperties.line.solidFill = marker_linesolidFill[i] # 枠線色 80 81 #各系列をグラフに追加 82 83 #第1軸となるグラフ 84 chart_h_O2.series.append(series_h) 85 86 #第2軸となるグラフ 87 chart_O2_2.series.append(series_O2) 88 89 #第2軸のグラフを第1軸のグラフに合成 90 chart_h_O2 += chart_O2_2 91 92 93 #第1軸となるグラフに凡例を追加 94 chart_h_O2.legend.legendPos = "b" 95 96 97 #第2軸となるグラフのリスト 98 chartlist2 = [chart_O2_2, chart_C8H18_2, chart_r_2] 99 for chart in chartlist2: 100 #自分のソースコードでは,第2軸が右に来るようにしています. 101 chart.y_axis.crosses = "max" 102 103 104 ws.add_chart(chart_h_O2, 'AH2') 105 106 107 wb.save(file) 108 wb.close
あなたの回答
tips
プレビュー