首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Holoviews字体更改

Holoviews字体更改
EN

Stack Overflow用户
提问于 2020-02-17 21:11:11
回答 1查看 750关注 0票数 1

是否有一种通用的方法来更改全息图的字体系列和字体大小(分别由bokeh和matplotlib渲染)。特别是,我希望更改hv.Barshv.Sankey的字体系列和字体大小。

我用来更改x/y轴标签的字体系列的当前方法是放入bokeh/matplotlib并从那里更改它。

代码语言:javascript
复制
import numpy as np
import pandas as pd
import holoviews as hv
from bokeh.plotting import show
from matplotlib import rcParams

categoryA = np.random.choice(['Label1','Label2','Label3','Label4'],size=12)
categoryB = np.random.choice(['Target1','Target2'],size=12)
values = np.random.uniform(0,1,size=12)

dd = pd.DataFrame({'A':categoryA,'B':categoryB,'V':values})

在bokeh,这对酒吧很有效。

代码语言:javascript
复制
ww = hv.Bars(dd.groupby(['A','B'])['V'].mean().reset_index(),kdims=['A','B'],vdims=['V'])
ww.opts(width=1200)

ww_bokeh = hv.render(ww,backend='bokeh')

ww_bokeh.xaxis.major_label_text_font='arial'
ww_bokeh.xaxis.major_label_text_font_size='16pt'
ww_bokeh.xaxis.axis_label_text_font = 'arial'
ww_bokeh.xaxis.axis_label_text_font_size = '12pt'
ww_bokeh.xaxis.group_text_font='arial'
ww_bokeh = hv.render(ww,backend='bokeh')
show(ww_bokeh)

在matplotlib中,这不能很好地工作,因为我认为xticks标签不是两个不同的对象。

代码语言:javascript
复制
rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['Arial']
rcParams['xtick.labelsize'] = '16'
mm = hv.Bars(dd.groupby(['A','B'])['V'].mean().reset_index(),kdims=['A','B'],vdims=['V'])
mm.opts(aspect=5,fig_size=600)

对于Sankey,我不知道如何更改标签的字体大小和系列。

代码语言:javascript
复制
from holoviews import opts
hv.extension('bokeh')

tt = hv.Sankey(dd)
tt.opts(opts.Sankey(edge_color=dim('A').str(),label_position='outer'))
tt.opts(opts.Label(text_font_size='20pt')) #this does nothing, as I dont think the labels are Label objects
tt.opts(opts.Text(fontscale=3)) #this also does nothing, as I dont think the labels are Text objects either
tt.opts(height=600,width=800)

在我的例子中,更改字体系列以及Sankey图中的标签大小非常重要。作为参考,我在jupyter笔记本中使用: bokeh版本1.4.0,matplotlib版本3.1.3,holoviews版本1.13.0a22.post4+g26aeb5739,以及python版本3.7。

我试着钻研源代码,但是迷路了。因此,任何建议或方向都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-03 03:43:46

您应该使用hook http://holoviews.org/user_guide/Customizing_Plots.html#Plot-hooks

代码语言:javascript
复制
def hook(plot, element):
    plot.handles['text_1_glyph'].text_font = 'arial'
    plot.handles['text_1_glyph'].text_font_size = '16pt'
    plot.handles['text_2_glyph'].text_font = 'arial'
    plot.handles['text_2_glyph'].text_font_size = '16pt'
tt = hv.Sankey(dd)
tt.opts(opts.Sankey(edge_color=hv.dim('A').str(),label_position='outer'))
tt.opts(height=600,width=800)
tt.opts(hooks=[hook])

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60263233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档