我正在使用pyopenxl从熊猫数据帧生成一个ScatterChart。
我正在尝试将文本在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()
这是我得到的输出图表。
这是我想要的输出图表。
谢谢!
发布于 2017-05-06 21:39:25
不幸的是,这并不像它应该的那样简单,因为在规范中,这是模式从SpreadsheetDrawingML更改为DrawingML的一个领域,后者要抽象得多。最好的做法是实际创建两个示例文件并对它们进行比较。在这种情况下,区别在于轴的txPr
或textProperties
的rot
或rotation
属性。这在OOXML规范的§21.1.2.1.1中有所涉及。
下面的代码应该可以工作,但可能需要您创建一个TextProperties
对象:
chart.x_axis.textProperties.bodyProperties.rot = -5400000
发布于 2021-08-20 17:56:37
我也有同样的问题--这篇由@oldhumble写的帖子帮我解决了这个问题--请看Rotate the axis of an excel chart using openpyxl
https://stackoverflow.com/questions/43815631
复制相似问题