提问人:Lili 提问时间:10/25/2023 最后编辑:mosc9575Lili 更新时间:10/25/2023 访问量:32
散景中有两个 y 轴“计数”和“百分比”的直方图?
Histogram with two y-axis 'count' and 'percentage' in bokeh?
问:
我是散景新手。在散景中创建数据直方图的干净方法是什么,有两个 y 轴,一个是“计数”,一个是“百分比”?我使用四边形创建带有“计数”轴标签的直方图,然后使用extra_y_ranges和add_layout添加第二个轴。不幸的是,y 轴并不总是对齐的。我相信有更好的方法可以做到这一点。另外,如何旋转正确的y_axis标签?我希望它有和左边y_axis相同的方向。 我最终也喜欢叠加发行版的 pdf。
感谢您的帮助。
答:
0赞
mosc9575
10/25/2023
#1
我的建议是
- 根据数据将 From 设置为两个 y 轴
Range1d
bokeh.models
- 绘制两次,一次绘制不带任何颜色的第二个 y 轴
quad
- 使用
axis_label_orientation
设置标签的方向
下面是一个最小的示例:
这是存储在 pandas DataFrame 中的一个非常小的数据集
import pandas as pd
df = pd.DataFrame({'data':[12,1,2,11,22,3,4]})
df['percent'] = df['data'] / df["data"].sum()
df['left'] = df.index - 0.4
df['right'] = df.index + 0.4
散景部分如下所示。
from bokeh.models import ColumnDataSource, LinearAxis, Range1d
from bokeh.plotting import figure, show, output_notebook
output_notebook()
source= ColumnDataSource(df)
# figure
p = figure(width=700, height=300)
# default axis
p.quad(top='data', bottom=0, left='left', right='right', source=source)
p.yaxis.axis_label = "count"
p.yaxis.axis_label_orientation = 'horizontal'
p.y_range = Range1d(0, df['data'].max() * 1.05)
# second axis
p.extra_y_ranges['percent'] = Range1d(0, df['percent'].max() * 1.05)
red_circles = p.quad(
top='data',
bottom=0,
left='left',
right='right',
source=source,
color=None,
y_range_name="percent"
)
ax2 = LinearAxis(
axis_label="percent",
y_range_name="percent",
axis_label_orientation = 'horizontal'
)
p.add_layout(ax2, 'right')
# output
show(p)
评论