Фигура Python Bokeh Quad категорической оси X не строится, если присутствуют строки
У меня есть датафрейм с двумя столбцами: x_att1
а также y_att1
, y_att1
содержит int или float. Если x_att1
содержит числа в виде строки, то я могу построить y_att1
, Но если x_att1
содержит строки, то ничего не строится. Я не знаю почему. Это ошибка или особенность? Я использую боке 0.10.0
Код 1 с числами в виде строки в x_att1
(работает):
from bokeh.plotting import figure, output_file, show
from bokeh.models import LinearAxis, Range1d
import pandas as pd
output_file("bars.html")
df = pd.DataFrame()
df['y_att1'] = [0.70,0.68,0.50,0.48,0.30,0.28]
df['x_att1'] = ['0','4','2','7','3','1']
p = figure(title="twin y-axis bar example", x_range=df['x_att1'].values.tolist())
p.quad(bottom=0, top=df['y_att1'], left=df['x_att1'].values.tolist()
, right=df['x_att1'].values.tolist(), line_width=7, line_color='red')
p.yaxis.axis_label = 'left y axis'
p.yaxis.axis_label_text_color = 'red'
p.xaxis.axis_label = 'x axis'
p.xaxis.axis_label_standoff = -5
show(p)
Код 2 со строками в x_att1
(не работает):
from bokeh.plotting import figure, output_file, show
from bokeh.models import LinearAxis, Range1d
import pandas as pd
output_file("bars.html")
df = pd.DataFrame()
df['y_att1'] = [0.70,0.68,0.50,0.48,0.30,0.28]
df['x_att1'] = ['b','d','a','h','f','e'] #changed only this line
p = figure(title="twin y-axis bar example", x_range=df['x_att1'].values.tolist())
p.quad(bottom=0, top=df['y_att1'], left=df['x_att1'].values.tolist()
, right=df['x_att1'].values.tolist(), line_width=7, line_color='red')
p.yaxis.axis_label = 'left y axis'
p.yaxis.axis_label_text_color = 'red'
p.xaxis.axis_label = 'x axis'
p.xaxis.axis_label_standoff = -5
show(p)
Код 3 со строками в x_att1
и какой-то трюк (работает):
from bokeh.plotting import figure, output_file, show
from bokeh.models import LinearAxis, Range1d
import pandas as pd
output_file("bars.html")
df = pd.DataFrame()
df['y_att1'] = [0.70,0.68,0.50,0.48,0.30,0.28]
df['x_att1'] = ['b','d','a','h','f','e']
p = figure(title="twin y-axis bar example", x_range=df['x_att1'].values.tolist())
p.quad(bottom=0, top=df['y_att1'], left=df['x_att1'].values.tolist()
, right=df['x_att1'].values.tolist(), line_width=7, line_color='red')
p.yaxis.axis_label = 'left y axis'
p.yaxis.axis_label_text_color = 'red'
#added these two lines
p.y_range.start = 0
p.y_range.end = df['y_att1'].max()*1.1
p.xaxis.axis_label = 'x axis'
p.xaxis.axis_label_standoff = -5
show(p)
Приятный день!