2017-05-06 401 views
1

私はpandasデータフレームからpyopenxlでScatterChartを生成しています。openpyxlチャートの軸方向テキスト

X軸のテキストの回転を270度に変更しようとしていますが、それを行う方法に関するドキュメントが見つかりません。

これはチャートを生成するためのコードです。

import numpy as np 
from openpyxl.chart import ScatterChart, Reference, Series 
from openpyxl.chart.axis import DateAxis 
import pandas as pd 

def generate_chart_proyeccion(writer_sheet, col_to_graph, start_row, end_row, title): 
    """ 
    Construct a new chart object 

    :param writer_sheet: Worksheet were is data located 
    :param col_to_graph: Column of data to be plotted 
    :param start_row: Row where data starts 
    :param end_row: Row where data ends 
    :param title: Chart title 
    :return: returns a chart object 
    """ 
    chart = ScatterChart() 
    chart.title = title 
    chart.x_axis.number_format = 'd-mmm HH:MM' 
    chart.x_axis.majorTimeUnit = "days" 
    chart.x_axis.title = "Date" 
    chart.y_axis.title = "Value" 
    chart.legend.position = "b" 
    data = Reference(writer_sheet, min_col=col_to_graph, max_col=col_to_graph, min_row=start_row, max_row=end_row) 
    data_dates = Reference(writer_sheet, min_col=1, max_col=1, min_row=start_row, max_row=end_row) # Corresponde a la columna con la fecha 
    serie = Series(data, data_dates, title_from_data=True) 
    chart.series.append(serie) 
    return chart 

# Write data to excel 
writer = pd.ExcelWriter("file.xlsx", engine='openpyxl') 
df = pd.DataFrame(np.random.randn(10,1), columns=['Value'], index=pd.date_range('20130101',periods=10,freq='T')) 
start_row = 1 # Row to start writing df in excel 
df.to_excel(writer, sheet_name="Sheet1", startrow=start_row) 
end_row = start_row + len(df) # End of the data 
chart = generate_chart_proyeccion(writer.sheets["Sheet1"], 2, start_row, end_row, "A title") 
# Añado gráfico a excel 
writer.sheets["Sheet1"].add_chart(chart, "C2") 
writer.save() 

これは私が得た出力チャートです。

enter image description here

これは私が欲しいの出力チャートです。

enter image description here

ありがとう!

答えて

0

これは、仕様上SpreadsheetDrawingMLからDrawingMLに変更された領域の1つで、これははるかに抽象的なものであるため、残念ながら、このような単純な表現はありません。最も良いことは、実際には2つのサンプルファイルを作成して比較することです。この場合、この差は軸のtxPrまたはtextPropertiesrotまたはrotation属性になります。これは、OOXML仕様の21.1.2.1.1でカバーされています。

次のコードは動作するはずですが、TextPropertiesオブジェクトを作成する必要があります:私はこのアイデアを試してみたが、chart.x_axis.textPropertiesはopenpyxl.chart.text.RichTextでなければなりません

chart.x_axis.textProperties.bodyProperties.rot = -5400000

+0

をタイプ。しかし、私はそれを使用しようとしました: 'import openpyxl t = openpyxl.chart.text.RichText(); chart.x_axis.textProperties = t t.properties.rot = -5400000 ' しかし、結果のドキュメントを開くと、図面が破損して表示されなくなったと表示されます。 – alejo0317

関連する問題