Как мне создать график log (x), используя xlsxwriter в python? - PullRequest
2 голосов
/ 17 июня 2019

Я пытаюсь создать график log (x) в xksxwriter, я использую "chart1.set_x_axis ({'log_base': 10})", чтобы установить ось x в качестве логарифмической оси. Однако график все еще кажется линейным по обеим осям.

Вот часть, где я устанавливаю свойства графика

chart1.set_x_axis({'log_base': 10})
chart1.set_x_axis({'min': 1000, 'max': 100000})
chart1.set_x_axis({'interval_tick': 100})
chart1.set_x_axis({'name': 'x axis'})

chart1.set_y_axis({'min': 0, 'max': 180})
chart1.set_y_axis({'name': 'y axis'})
chart1.set_size({'width': 1192, 'height': 729})
chart1.set_title({'name': 'log(x) vs. y'})
worksheet2.insert_chart('A1', chart1)

Я ожидаю, что график будет выглядеть логарифмическим, но он все равно будет выглядеть линейным.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Оказывается, строки set_x_axis должны быть переупорядочены следующим образом:

chart1.set_x_axis({'min': 1000, 'max': 100000})
chart1.set_x_axis({'interval_tick': 100})
chart1.set_x_axis({'log_base': 10})
chart1.set_x_axis({'name': 'x axis'})

chart1.set_y_axis({'min': 0, 'max': 180})
chart1.set_y_axis({'name': 'y axis'})
chart1.set_size({'width': 1192, 'height': 729})
chart1.set_title({'name': 'log(x) vs. y'})
worksheet2.insert_chart('A1', chart1)
0 голосов
/ 17 июня 2019

Вот пример, который демонстрирует, что ось журнала работает с диаграммами XlsxWriter:

import xlsxwriter

workbook = xlsxwriter.Workbook('log_demo.xlsx')
worksheet = workbook.add_worksheet()

worksheet.write_column('A1', [1, 10, 100, 1000])

chart = workbook.add_chart({'type': 'line'})
chart.add_series({'values': '=Sheet1!$A$1:$A$4'})
chart.set_y_axis({'log_base': 10})

worksheet.insert_chart('C2', chart)

workbook.close()

Выход:

enter image description here

Как вы можете видеть, ось Y имеет логарифмический масштаб.

Однако здесь есть ошибка Excel. Оси X для большинства типов диаграмм (кроме Scatter) называются осями категорий. Они могут иметь числовые значения, но они не являются числовыми, как правило, это просто имена категорий. Этот тип оси не поддерживает масштабирование логов (или много других функций). Дополнительные сведения см. В разделе Значения диаграммы и оси категорий документации XlsxWriter.

Если вы хотите получить ось журнала X, вам, вероятно, придется использовать диаграмму типа Scatter.

Обновление

Существует также проблема с вашим кодом. XlsxWriter требует, чтобы все свойства оси устанавливались за один раз, вместо многократных вызовов на set_x_axis(). Как это:

chart1.set_x_axis({'log_base': 10,
                   'min': 1000, 
                   'max': 100000,
                   'interval_tick': 100,
                   'name': 'x axis'})
...