python - 使用“hconcat”时,有没有办法对齐图表标题?
问题描述
当使用 并排显示两个条形图(一个水平,一个垂直)时alt.hconcat
,即使图表的高度相等,标题也会错位。有没有办法对齐标题?
# Makes test dataframe
test = pd.DataFrame({"group":["a","b","c"],"value1":[4,5,6], "value2":[10,12,14]}).reset_index()
# Sets up vertical bar chart
chart1 = alt.Chart(test).mark_bar().encode(
x = alt.X('group:N'),
y = alt.Y('value1:Q')
).properties(height = 300, width = 300, title = "Testing Title 1")
# Sets up horizontal bar chart
chart2 = alt.Chart(test).mark_bar().encode(
x = alt.X('value2:Q'),
y = alt.Y('group:N')
).properties(height = 300, width = 300, title = "Testing Title 2")
# Shows bar charts side by side
alt.hconcat(chart1, chart2)
图表标题未对齐。(无法发布图片,因为我显然需要 10 个声望点才能这样做)
解决方案
似乎这种行为是由于从最左侧图表中的 y 轴自动避开顶部刻度及其标签“6”。Altair/Vega lite 可能会自动将标题偏移量调整为图表中的最高元素,并且由于刻度线及其标签位于轴线上方,因此与最顶部刻度线及其标签“a”的最右侧轴相比,标题将垂直偏移" 远低于轴线的末端。
通过隐藏刻度标签,您可以看到这确实是问题所在。
不完全对齐,隐藏刻度也可以完美对齐它们。
要解决此问题,您可以手动将两个标题的偏移量设置为相同。不幸的是,.configure_title(offset=0)
在布局上同时设置两个标题不起作用,因为它会为已经用于自动闪避的值添加偏移量。
相反,我相信你必须alt.TitleParams(offset=0)
为最左边的情节设置偏移量,或者在最右边的情节中设置一个值,使其达到与最左边的情节相同的高度。在这种情况下,“9”似乎是一个神奇的数字
对于title = alt.TitleParams("Testing Title 2", offset=9)
最右边的情节:
这可能是 Vegalite 而不是 Altair 的问题/功能,因此在问题跟踪器上挖掘或发布新问题,要求它们默认对齐可能会有所帮助。
推荐阅读
- c# - WPF 如何使用 1 个事件处理程序来做到这一点
- vue.js - window.addEventListener('load', (event) => {...}); 在 NuxtLink (nuxt-link) 或 RouterLink (router-link) 点击
- java - 如何使用机器人库按:{或}
- c# - C# 服务集合将类型添加为对象而不是其实际类型
- javascript - vuex 有“挂载钩子中的错误:'InternalError: too much recursion'”有趣的是我没有调用任何递归函数
- python - 如何在 Python Pandas 中进行嵌套循环类型的操作?
- python - HTTP 错误 404:未找到 urllib.request.urlretrieve
- java - 如何将gradle与maven合并
- tensorflow - 用于RNN的tensorflow tf.keras.layers.Attention
- javascript - 在 Tensorflow.js 中输出大张量的所有值