ridgeplot_subcoordinates#

使用 ridgeline 图,基于 概率感知 数据集。

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

子坐标的另一种方法是类别偏移,这在 examples/topics/categorical/ridgeplot.py 中展示。请注意,类别偏移无法访问真实值,因此更适合于演示目的而不是分析。

该图表显示了对提示“你将“非常有可能”这个短语赋予什么概率”的响应分布。

细节

样本数据:

bokeh.sampledata.perceptions

Bokeh API:

figure.patch, bokeh.models.ColumnDataSource

更多信息:

具有偏移的类别系列

关键词:

alpha,类别,调色板,补丁,山脊线,子坐标,子图

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)