I'm trying to generate simple pie chart for better visualization of some data, but XlsxWriter wont write data to two columns simultaneously. Where as other example is working fine.
I'm clueless where I might be going wrong
Following is the data :
{'core2': [10.3], 'core3': [4.17], 'core0': [58.68], 'core1': [24.42], 'core6': [0.02], 'core7': [0.0], 'core4': [2.31], 'core5': [0.12]})
Actual data is passed as list -> [10.3, 4.17, 58.68, 24.42, 0.02, 0.0, 2.31, 0.12] to below function
Please find below code :
def draw_simultaneously_busy_cores(type_of_chart,data,workbook):
print data
worksheet = workbook.add_worksheet()#'simultaneously_busy_cores')
bold = workbook.add_format({'bold': 1})
headings = [0, 1, 2, 3, 4, 5, 6, 7]
worksheet.write_column('$A$1', headings, bold)
worksheet.write_column('$B$1',headings)
chart1 = workbook.add_chart({'type': type_of_chart})
chart1.add_series({
'name': 'Simultaneous Busy Cores',
'categories': ['simultaneously_busy_cores', '=simultaneously_busy_cores!$A$1:$A$8'],
'values': ['simultaneously_busy_cores', '=simultaneously_busy_cores!$B$1:$B$8'],
#'data_labels': {'percentage': True, }
})
#Add a title.
chart1.set_title({'name': 'Simultaneous Busy Cores'})
#Set an Excel chart style. Colors with white outline and shadow.
chart1.set_style(10)
#Insert the chart into the worksheet (with an offset).
worksheet.insert_chart('C2', chart1, {'x_offset': 25, 'y_offset': 10})
thanks in advance. Image shows the outpput :
It should work. Here is an example with sample data:
import xlsxwriter
def draw_simultaneously_busy_cores(type_of_chart, data, workbook):
worksheet = workbook.add_worksheet('simultaneously_busy_cores')
bold = workbook.add_format({'bold': 1})
worksheet.write_column('A1', data, bold)
worksheet.write_column('B1', data)
chart1 = workbook.add_chart({'type': type_of_chart})
chart1.add_series({
'name': 'Simultaneous Busy Cores',
'categories': '=simultaneously_busy_cores!$A$1:$A$8',
'values': '=simultaneously_busy_cores!$B$1:$B$8',
})
#Add a title.
chart1.set_title({'name': 'Simultaneous Busy Cores'})
#Set an Excel chart style. Colors with white outline and shadow.
chart1.set_style(10)
#Insert the chart into the worksheet (with an offset).
worksheet.insert_chart('C2', chart1, {'x_offset': 25, 'y_offset': 10})
workbook = xlsxwriter.Workbook('test.xlsx')
data = [0, 1, 2, 3, 4, 5, 6, 7]
draw_simultaneously_busy_cores('line', data, workbook)
workbook.close()
Output:
The chart categories and values syntax in your example is incorrect. You are mixing the list and string syntaxes. Read through the documentation and examples again.
Related
I am using XlsxWriter to do create column charts with the y axis name showing horizontally at the top of the axis. The default orientation for the y axis name seems to be vertical, reading from bottom to top.
So I'm using the name font rotation to try to position it horizontally, reading from left to right. It all works fine for any rotation angle from -90 to 90, except for 0 (zero), which should be the horizontal orientation. It seems that when rotation is set to 0 (zero) it is simply disregarded and the name is shown vertically.
The workaround that achieves a visuaaly acceptable result is setting rotation to 1, or -1. This works for short names, but for longer names it starts to be noticeable that the text is not at 0 (zero) degrees - horizontal.
I am using Python version Python 3.8.3, xlsxwriter version 1.2.9, and Excel 365.
Here is some code that demonstrates the problem:
workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()
chart = workbook.add_chart({'type': 'column'})
data = [
[1, 2, 3, 4, 5],
[2, 4, 6, 8, 10],
[3, 6, 9, 12, 15],
]
worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])
chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
chart.set_title({'name': 'Some Title',
'name_font': {'rotation': 0}})
chart.set_y_axis({'visible': False,
'name': 'Y Axis',
'name_font': {'size': 14, 'bold': False, 'italic': True, 'rotation': 0},
'name_layout': {'x': 0.025, 'y': 0.075}})
worksheet.insert_chart('E1', chart)
workbook.close()
Any ideas on how to show the y axis name horizontally?
That unfortunately is due to a small bug. I've fixed it in XlsxWriter release 1.4.0.
With the fix in place the output from your (nicely detailed) program is as expected:
I am generating excel files with XlxsWriter that include some charts. I would like to save the resulting charts separately as images so I can attach them to an email (as a preview of the Excel file I'm sending). I'm able to create the Excel with charts, I just can't find any way to save the charts as an image in the XlxsWriter documentation.
I am doing this on a Mac, so unfortunately the solution using win32 doesn't help. excel2img looked promising, but also depends on win32.
Example chart generation is as follows (borrowed from the documentation). It generates a simple Excel file with a chart. I would like a png/jpg export of the chart from this Excel.
import xlsxwriter
workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet()
# Create a new Chart object.
chart = workbook.add_chart({'type': 'column'})
# Write some data to add to plot on the chart.
data = [
[1, 2, 3, 4, 5],
[2, 4, 6, 8, 10],
[3, 6, 9, 12, 15],
]
worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])
# Configure the chart. In simplest case we add one or more data series.
chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
chart.add_series({'values': '=Sheet1!$C$1:$C$5'})
# Insert the chart into the worksheet.
worksheet.insert_chart('A7', chart)
# TODO How can I get the chart as a png/jpg
workbook.close()
Here is the example how dataframe is converted into column-stacked-chart. The result of this code is : What I want now is to add line to this chart. For that line I want to have additional secondary y axis. I don't wanna use matplotlib, because this library, as I found, is only for displaying the data and I want to save the data in excel file. I want to add secondary y axis using pandas.
import pandas as pd
from vincent.colors import brews
if __name__ == '__main__':
# Some sample data to plot.
farm_1 = {'apples': 10, 'berries': 32, 'squash': 21, 'melons': 13, 'corn': 18}
farm_2 = {'apples': 15, 'berries': 43, 'squash': 17, 'melons': 10, 'corn': 22}
farm_3 = {'apples': 6, 'berries': 24, 'squash': 22, 'melons': 16, 'corn': 30}
farm_4 = {'apples': 12, 'berries': 30, 'squash': 15, 'melons': 9, 'corn': 15}
data = [farm_1, farm_2, farm_3, farm_4]
index = ['Farm 1', 'Farm 2', 'Farm 3', 'Farm 4']
# Create a Pandas dataframe from the data.
df = pd.DataFrame(data, index=index)
# Create a Pandas Excel writer using XlsxWriter as the engine.
excel_file = 'C:/Users/gegij/Desktop/stacked_column_farms.xlsx'
sheet_name = 'Sheet1'
writer = pd.ExcelWriter(excel_file, engine='xlsxwriter')
df.to_excel(writer, sheet_name=sheet_name)
# Access the XlsxWriter workbook and worksheet objects from the dataframe.
workbook = writer.book
worksheet = writer.sheets[sheet_name]
# Create a chart object.
chart = workbook.add_chart({'type': 'column', 'subtype': 'stacked'})
# Configure the series of the chart from the dataframe data.
for col_num in range(1, len(farm_1) + 1):
chart.add_series({
'name': ['Sheet1', 0, col_num],
'categories': ['Sheet1', 1, 0, 4, 0],
'values': ['Sheet1', 1, col_num, 4, col_num],
'fill': {'color': brews['Pastel1'][col_num - 1]},
'gap': 20,
})
# Configure the chart axes.
chart.set_x_axis({'name': 'Total Produce'})
chart.set_y_axis({'name': 'Farms', 'major_gridlines': {'visible': False}})
# Insert the chart into the worksheet.
worksheet.insert_chart('H2', chart)
# Close the Pandas Excel writer and output the Excel file.
writer.save()
i used this example to get started with pandas:
http://pandas-xlsxwriter-charts.readthedocs.io/chart_grouped_column.html#chart-grouped-column
i also want to save the chart in excel just like in the example
i would like to know how e.g. in the example above i can add a description or a table under the graph chart
the only thing related i found was this :
Add graph description under graph in pylab
but this is done with pylab, is the same possible with pandas and an excel chart?
In Excel you could add a text box and insert some text but that isn't possible with XlsxWriter.
You could use the chart title property but in Excel the title is generally at the top and not the bottom.
You can reposition it, manually, in Excel. This is also possible with XlsxWriter using the layout options of the different chart objects.
Here is an example:
import xlsxwriter
workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet()
# Create a new Chart object.
chart = workbook.add_chart({'type': 'column'})
# Write some data to add to plot on the chart.
data = [
[1, 2, 3, 4, 5],
[2, 4, 6, 8, 10],
[3, 6, 9, 12, 15],
]
worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])
# Configure the charts. In simplest case we just add some data series.
chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
chart.add_series({'values': '=Sheet1!$C$1:$C$5'})
chart.set_x_axis({'name': 'X axis title'})
chart.set_y_axis({'name': 'Y axis title'})
chart.set_title({
'name': 'Here is some text to describe the chart',
'name_font': {'bold': False, 'size': 10},
'layout': {
'x': 0.25,
'y': 0.90,
}
})
chart.set_plotarea({
'layout': {
'x': 0.11,
'y': 0.10,
'width': 0.75,
'height': 0.60,
}
})
#Insert the chart into the worksheet.
worksheet.insert_chart('A7', chart)
workbook.close()
Note, you will need to do some trial and error with the layout property to get the layout that you want.
Output:
I have a plot that needs names as the values for the x-axis. I imagine this is accomplished via the set_x_axis function for chart objects but can't find the proper key in the documentation (http://xlsxwriter.readthedocs.io/chart.html#set_x_axis). The following code produces the graph below:
chart = workbook.add_chart({'type':'scatter'})
colLetter = alphabet[1] #alphabet is list of alphabet
for ii in range(4):
colLetter = alphabet[ii+1]
chart.add_series({
'name': '=Sheet1!$%s$1'%colLetter,
'categories': '=Sheet1!$A$2:$A$'+str(lastRowNumber),
'values': '=Sheet1!$%s$2:$%s$6'%(colLetter, colLetter),
})
chart.set_title({'name': 'Cityblock'})
chart.set_x_axis({'name': 'Subject'})
chart.set_y_axis({'name': 'Distance'})
chart.set_style(11)
worksheet.insert_chart('F1', chart)
Any suggestions? I'm using xlsxwriter with python 2.7.
Just set the series categories to point to the strings, or numbers, or dates that you wish to plot.
For example:
import xlsxwriter
workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet()
# Add a column chart.
chart = workbook.add_chart({'type': 'column'})
# Write some data to add to plot on the chart.
worksheet.write_column('A1', ['Bob', 'Eve', 'Ann'])
worksheet.write_column('B1', [5, 10, 7])
# Configure the chart.
chart.add_series({'categories': '=Sheet1!$A$1:$A$3',
'values': '=Sheet1!$B$1:$B$3'})
# Insert the chart into the worksheet.
worksheet.insert_chart('D1', chart)
workbook.close()
Output: