Cómo trazar un gráfico de barras horizontales en Bokeh (Python)

Tengo estos datos:

data = {'Cities': {'Des_Moines': 80.0, 'Lubbock': -300.0, 'Minneapolis': 85.7, 'Orange_County': 80.0, 'Salt_Lake_City': 81.8, 'San_Diego': 80.0, 'San_Francisco': -400.0, 'Troy': -400.0, 'Wilmington': -300.0}} 

He trazado esto utilizando Seaborn y se ve muy bien.

 df_data = pd.DataFrame(data).sort_values('Cities', ascending=False) sns.barplot(x='Cities', y=df_data.index, data=df_data, label='Cities', palette='Greens') 

introduzca la descripción de la imagen aquí

Sin embargo, me gustaría incrustar esta es una aplicación web de Flask que utiliza Bokeh .

No pude encontrar una horizontal barplot de horizontal barplot en Bokeh . Incluso voltear los ejes x e y no parece funcionar. Esto es lo que he hecho: * Transponer df_data de 9x1 a 1x9 . Sin embargo, todavía no estoy recibiendo nada remotamente agradable.

 bar = Bar(df_data.transpose(), df_data.columns.tolist(), stacked=False, responsive=True) script, div = components(bar) 

introduzca la descripción de la imagen aquí

Tenga en cuenta que todavía no tengo Horizontal y mi eje de category está desordenado.

¿Alguien puede ayudar a modificar esto aún más?

Es bastante fácil de hacer con rect glifos. Tenga en cuenta que cuando configura el rango y con valores categóricos, la indexación de estos en el gráfico de bokeh comienza en 1. Es por eso que el contador “j” comienza en 1.

 import numpy as np import pandas as pd from bokeh.plotting import figure, show from bokeh.models import Range1d data = {'Cities': {'Des_Moines': 80.0, 'Lubbock': -300.0, 'Minneapolis': 85.7, 'Orange_County': 80.0, 'Salt_Lake_City': 81.8, 'San_Diego': 80.0, 'San_Francisco': -400.0, 'Troy': -400.0, 'Wilmington': -300.0}} #df_data = pd.DataFrame(data).sort_values('Cities', ascending=False) df_data = pd.DataFrame(data).sort(columns='Cities',ascending=False) this_series = df_data.loc[:,'Cities'] p = figure(width=800, height=600, y_range=this_series.index.tolist()) p.background_fill = "#EAEAF2" p.grid.grid_line_alpha=1.0 p.grid.grid_line_color = "white" p.xaxis.axis_label = 'xlabel' p.xaxis.axis_label_text_font_size = '14pt' p.xaxis.major_label_text_font_size = '14pt' #p.x_range = Range1d(0,50) #p.xaxis[0].ticker=FixedTicker(ticks=[i for i in xrange(0,5,1)]) p.yaxis.major_label_text_font_size = '14pt' p.yaxis.axis_label = 'ylabel' p.yaxis.axis_label_text_font_size = '14pt' j = 1 for k,v in this_series.iteritems(): print k,v,j p.rect(x=v/2, y=j, width=abs(v), height=0.4,color=(76,114,176), width_units="data", height_units="data") j += 1 show(p) 

introduzca la descripción de la imagen aquí

Puede ir al nivel bajo y reconstruir un gráfico de barras horizontales utilizando los glifos rect o quad . El código anterior es provisional y carece de tags de ciudades en el eje y (no más tiempo ahora …). Pero espero que esto pueda ayudar.

 data = {'Cities': {'Des_Moines': 80.0, 'Lubbock': -300.0, 'Minneapolis': 85.7, 'Orange_County': 80.0, 'Salt_Lake_City': 81.8, 'San_Diego': 80.0, 'San_Francisco': -400.0, 'Troy': -400.0, 'Wilmington': -300.0}} from bokeh.plotting import figure, show from bokeh.models import Range1d from bokeh.palettes import Greens9 import numpy as np cities = data['Cities'] p = figure(width=400, height=400) bottom = -1 ii = -1 for k,v in cities.iteritems(): bottom = bottom+1 top = bottom+1 left = 0 right = cities[k] ii += 1 p.quad(top=top, bottom=bottom, left=left, right=right, color=Greens9[ii]) #"#B3DE69") min_city = min(cities, key=cities.get) max_city = max(cities, key=cities.get) p.x_range = Range1d(start=cities[min_city], end=cities[max_city]) show(p) # Can be done with rect glyph: #p = figure(width=400, height=400) #p.rect(x=[1, 2, 3], y=[1, 2, 3], width=0.2, height=40, color="#CAB2D6", # angle=np.pi/2, height_units="screen") 

AFAIK no hay uno. Esta es la mención más cercana que conozco de ser # 1856 . Por ahora solo están disponibles los gráficos de barras verticales:

Gráfico de barras, también conocido como Gráfico de barras horizontales (actualmente no tenemos un gráfico para)

Gráfico de columna alias gráfico de barra vertical (actualmente barra)

Nota al margen: la transposición de los datos funcionará como lo ha intentado, eso es lo que se espera.

Creo que no hay ninguno. Un truco podría ser usar un css personalizado con rotate () http://www.w3schools.com/css/css3_2dtransforms.asp