ridgeplot_subcoordinates#

使用山脊图绘制的概率感知数据集。

此示例演示了使用子坐标将脊线定位在不同类别中的用途。这有效地允许用户创建子图,同时在bokehjs中传播实际值,例如在使用悬停工具显示数据时。

子坐标的替代方法是分类偏移,这在examples/topics/categorical/ridgeplot.py中展示。请注意,分类偏移不提供对实际值的访问,因此更适合用于展示目的而不是分析。

此图表显示了对提示“高度可能”这个短语你会赋予什么概率的回答分布。

详情

Sampledata:

bokeh.sampledata.perceptions

Bokeh APIs:

figure.patch, bokeh.models.ColumnDataSource

More info:

带有偏移的分类系列

Keywords:

alpha, categorical, palette, patch, ridgeline, sub-coordinates, sub-plot

import colorcet as cc
from numpy import linspace
from scipy.stats import gaussian_kde

from bokeh.models import ColumnDataSource, FixedTicker, PrintfTickFormatter, Range1d
from bokeh.plotting import figure, show
from bokeh.sampledata.perceptions import probly

cats = list(reversed(probly.keys()))
palette = [cc.rainbow[i*15] for i in range(17)]

x = linspace(-20, 110, 500)
source = ColumnDataSource(data=dict(x=x))

p = figure(y_range=cats, width=900, x_range=(-5, 105), tools="hover", toolbar_location=None)

p.hover.tooltips = [
    ("data (x, y)", "($x, $y)"),
    ("name", "$name"),
]

for i, cat in enumerate(reversed(cats)):
    target_start = cats.index(cat) + 0.5 # middle of the current category
    target_end = target_start + 20       # arbitrary scaling to make plots pop

    xy = p.subplot(
        x_source=p.x_range,
        y_source=Range1d(start=0, end=1),
        x_target=p.x_range,
        y_target=Range1d(start=target_start, end=target_end),
    )

    pdf = gaussian_kde(probly[cat])
    source.add(pdf(x), cat)

    xy.patch("x", cat, color=palette[i], alpha=0.6, line_color="black", source=source, name=cat)

p.outline_line_color = None
p.background_fill_color = "#efefef"

p.xaxis.ticker = FixedTicker(ticks=list(range(0, 101, 10)))
p.xaxis.formatter = PrintfTickFormatter(format="%d%%")

p.ygrid.grid_line_color = None
p.xgrid.grid_line_color = "#dddddd"
p.xgrid.ticker = p.xaxis.ticker

p.axis.minor_tick_line_color = None
p.axis.major_tick_line_color = None
p.axis.axis_line_color = None

p.y_range.range_padding = 0.12

show(p)