HoloViews布局中散点图与误差棒图设置独立Y轴范围
解决HoloViews布局中独立Y轴范围的问题
当然可以搞定这个问题!我之前也遇到过类似的情况,HoloViews默认会让布局里的同类型轴共享范围,这就导致数据量级差很大的图表显示异常,不过解决方法很简单,有两种常用的思路:
方法一:关闭轴共享(推荐,自动适配数据范围)
只需要在创建布局的时候设置shared_axes=False,就能让每个子图自动根据自身数据计算合适的Y轴范围。先补全你给出的示例代码,完整实现如下:
import holoviews as hv hv.extension('bokeh') # 这里用Bokeh后端,也可以替换成matplotlib # 你的数据 A_points = [ ("2000", 1.5, 0.3, 0.5), ("2015", 2.3, 0.7, 0.3) ] B_points = [ ("2000", 13000, 800, 200), ("2015", 12000, 400, 600) ] # 创建带误差棒的散点图 plot_a = hv.Scatter(A_points, kdims=["Year"], vdims=["A", "yerr_minus", "yerr_plus"]) * \ hv.ErrorBars(A_points, kdims=["Year"], vdims=["A", "yerr_minus", "yerr_plus"]) plot_b = hv.Scatter(B_points, kdims=["Year"], vdims=["B", "yerr_minus", "yerr_plus"]) * \ hv.ErrorBars(B_points, kdims=["Year"], vdims=["B", "yerr_minus", "yerr_plus"]) # 设置散点图样式并创建布局,关闭轴共享 layout = hv.Layout(plot_a + plot_b).opts( hv.opts.Scatter(size=10), hv.opts.ErrorBars(), shared_axes=False ) layout
这样设置后,两个图表会各自使用适配自身数据的Y轴范围,不会再被另一个图表的范围影响。
方法二:手动指定单个图表的Y轴范围
如果你想更精准地控制某个图表的Y轴范围,可以单独给每个图表设置Y轴的range参数,示例如下:
import holoviews as hv hv.extension('bokeh') A_points = [ ("2000", 1.5, 0.3, 0.5), ("2015", 2.3, 0.7, 0.3) ] B_points = [ ("2000", 13000, 800, 200), ("2015", 12000, 400, 600) ] plot_a = hv.Scatter(A_points, kdims=["Year"], vdims=["A", "yerr_minus", "yerr_plus"]) * \ hv.ErrorBars(A_points, kdims=["Year"], vdims=["A", "yerr_minus", "yerr_plus"]) # 手动指定A图表的Y轴范围 plot_a = plot_a.opts( hv.opts.Scatter(size=10), hv.opts.ErrorBars(), hv.opts.Axis(yaxis=dict(range=(1, 3))) ) plot_b = hv.Scatter(B_points, kdims=["Year"], vdims=["B", "yerr_minus", "yerr_plus"]) * \ hv.ErrorBars(B_points, kdims=["Year"], vdims=["B", "yerr_minus", "yerr_plus"]) # B图表让HoloViews自动计算Y轴范围 plot_b = plot_b.opts( hv.opts.Scatter(size=10), hv.opts.ErrorBars() ) layout = hv.Layout(plot_a + plot_b) layout
另外,如果你用Row或Column布局来排列图表,同样可以通过shared_axes=False参数实现独立轴范围,比如hv.Row(plot_a, plot_b).opts(shared_axes=False)。
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

