Фигура 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)

Приятный день!

0 ответов

Другие вопросы по тегам