散景图 - 自定义分类刻度标签

时间:2018-03-24 02:43:44

标签: bokeh

我正在尝试在Python中为Bokeh图添加一个轴,并在指定的位置指定标签。

我正在制作的情节是每日数据的集合,但我没有使用x_axis_type="datetime",因为我不想为数据指定特定的年份。也就是说,我正在绘制1950 - 2015年的数据,但我希望轴只说“1月1日”,而不是“2000年1月1日”。

最初我使用的是CategoricalAxis,但这会挤出标签,因为它为366个刻度中的每一个放置了一个。我想将这个减少到每个月大约12个刻度。

我可以使用LinearAxis将刻度线放在我想要的位置,这是每个月的第一个日期。但是刻度标签是数字的,我想改用字符串标签。

如何更改刻度标签以使用特定字符串?

# Remove default axis
p.xaxis.visible = False

# Add custom axis
ticker = FixedTicker()
ticker.ticks = first_day_of_month
xaxis = LinearAxis(ticker=ticker)
p.add_layout(xaxis, 'below')

第一次尝试使用标准的CategoricalAxis,x轴很拥挤: Using CategoricalAxis. Crowded out x-axis

第二次尝试使用已发布的代码,我想将数字更改为标签: Custom LinearAxis. No labels on x-axis

修改

DatetimeTickFormatter并非立即有用,因为数据的源格式不是正确的日期。 x数据实际上是“mmdd”形式的字符串,例如“1230”,这就是我首先使用CategoricalAxis的原因。

使用FuncTickFormatter已成功,如果有点麻烦。我正在使用下面的代码,基本上给出了我想要的内容。

CustomFuncTickFormatter = FuncTickFormatter(code = '''
return {0: 'January', 366: '', 335: 'December', 305: 'November', 274: 'October', 244: 'September', 213: 'August', 182: 'July', 152: 'June', 121: 'May', 91: 'April', 60: 'March', 31: 'February'}
[tick]
''')

enter image description here

1 个答案:

答案 0 :(得分:1)

您应该能够使用public class MyTextBoxColumn:DataGridViewTextBoxColumn { public MyTextBoxColumn() { CellTemplate = new MyTextBoxCell(); } } x_axis_type="datetime"以及FixedTickerdocumentation)的自定义实例,并将所有字段设置为DatetimeTickFormatter。如果由于某种原因无效,您可以随时使用[%d %m]documentation)。