【问题标题】:How can I make legend outside plot area with stacked bar如何使用堆积条在绘图区域外制作图例
【发布时间】:2018-06-22 18:40:30
【问题描述】:
你好,

我对 Bokeh 库有疑问。我需要在情节区域外制作一个图例框。它适用于圆形和区域绘图。我找不到堆积条的解决方案。图例下方的解决方案塑造了图表的一部分,这是不可接受的(请参阅代码下的链接)。我想要一个图例。

问候, SR

import numpy as np
from bokeh.layouts import gridplot
from bokeh.models import ColumnDataSource, 
NumeralTickFormatter,LinearAxis, Range1d, Legend
from bokeh.plotting import show, output_notebook, figure 
from bokeh.core.properties import value
from math import pi
output_notebook()
colors=['#47A440','#9FCDC8']
source = ColumnDataSource(F)
mois=F.mois.tolist()

def insert(colonne, position1, position2,valeur1, valeur2):
    li=[]
    li=colonne.tolist()
    li.insert(position1,valeur1)
    li.insert(position2, valeur2)
    return li
Data_mois_area= insert(F.mois,0,12,'Janvier','Décembre')
Data_conso_area= insert(F.Pui_Conso,0,13,0,0)
Data_pv_area= insert(F.Pui_PV,0,13,0,0)
p = figure(x_range=mois, plot_height=500, 
plot_width=800,toolbar_location=None,tools="hover")
xa=range(len(F.mois))
r0=p.patch(x=Data_mois_area, y=Data_conso_area, color="#003BFB")
r1=p.patch(x=Data_mois_area, y=Data_pv_area, color="#FBB000")
p.vbar_stack(['Pui_Autocon','Pui_Réinj'], x='mois', width=0.5, 
color=colors,line_width=1, line_color='black',
         legend=['Autoconsommation','Réinjection'], source=source)
r3=p.circle(x='mois', y='Taux_autocon', size=10, color="red", 
y_range_name="foo", source=source )
r4=p.circle(x='mois', y='Taux_autopro', size=10, color="purple", 
y_range_name="foo", source=source)
p.y_range.start = 0
p.x_range.range_padding = 0.1
p.xgrid.grid_line_color = None
p.axis.minor_tick_line_color = None
p.outline_line_color = None
p.title.text = "Besoins et Consommation"
p.title.align = "center"
p.title.text_color = "black"
p.title.text_font_size = "15px"
p.xaxis.major_label_orientation = pi/4
p.yaxis.major_label_orientation = "horizontal"
p.yaxis.axis_label = "Energie en kWh"
p.yaxis.axis_label_text_font_style = "italic"
p.extra_y_ranges['foo'] = Range1d(0, 1.02)
p.add_layout(LinearAxis(y_range_name="foo"), 'right')
p.legend.orientation = "horizontal"
legend = Legend(items=[
("Consommation",   [r0]),
("Production", [r1]),
("Taux autoconsommation", [r3]),
("Taux autoproduction ",[r4]),    
 ], location=(1, -30))
 p.add_layout(legend, 'right')}
 show(p) 

enter image description here

【问题讨论】:

    标签: plot bokeh


    【解决方案1】:

    我解决这个问题的方法如下(以hbar堆栈为例,但解决方案是相同的)

    # make a figure
    p = figure(y_range=uniquesubjects, x_range=(0,600), plot_height=900, plot_width=900, title="Subjects In Trouble!",
            toolbar_location=None, tools="")
    
    # add stacked horizontal bars
    p.hbar_stack(headers[0:-1], y='subject_name', color=colors, height=1, source=source, legend=[value(x) for x in legendvals])
    
    # add some graph options
    p.xgrid.grid_line_color = None
    p.axis.minor_tick_line_color = None
    p.outline_line_color = None
    p.legend.location = "top_right"
    p.legend.orientation = "vertical"
    
    new_legend = p.legend[0]
    p.legend[0].plot = None
    p.add_layout(new_legend, 'right')
    
    show(p)
    

    我像往常一样创建一个“内部图例”,然后复制它,将其从原始位置删除并添加为外部布局。这是在这三行中完成的:

    new_legend = p.legend[0]
    p.legend[0].plot = None
    p.add_layout(new_legend, 'right')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-05
      • 2019-06-15
      • 1970-01-01
      • 2012-09-17
      • 2021-12-27
      • 2011-10-14
      • 2017-04-11
      相关资源
      最近更新 更多