如何修改Tableau里图例的位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修改Tableau里图例的位置相关的知识,希望对你有一定的参考价值。

一、将图例Legend放于图表右侧
1、设置chart的marginRight属性值

chart:
marginRight: 120
,

2、设置legend图例属性值如下

legend:
align: 'right', //水平方向位置
verticalAlign: 'top', //垂直方向位置
x: 0, //距离x轴的距离
y: 100 //距离Y轴的距离
,

二、将图例放于图表左上角
1、设置legend的属性

legend:
align: 'left', //水平方向位置
verticalAlign: 'top', //垂直方向位置
x: 0, //距离x轴的距离
y: 0 //距离Y轴的距离
,

三、将图例放于图表上方中央
1、设置legend属性如下

legend:
align: 'center', //水平方向位置
verticalAlign: 'top', //垂直方向位置
x: 0, //距离x轴的距离
y: 20 //距离Y轴的距离
,

四、将图例放于下方中央
1、设置legend属性如下

legend:
align: 'center', //水平方向位置
verticalAlign: 'bottom', //垂直方向位置
x: 0, //距离x轴的距离
y: 0 //距离Y轴的距离
,
参考技术A 把工作表放仪表板上,然后把图例改成浮动,就可以拖曳到图表上的任意位置
如想了解具体的信息,可参考帮助文档:设置仪表板大小和布局

如何替换 matplotlib 图例并保持相同的位置?

【中文标题】如何替换 matplotlib 图例并保持相同的位置?【英文标题】:How to replace matplotlib legend and keep same location? 【发布时间】:2017-09-02 03:49:50 【问题描述】:

我想用一个新的图例替换一个 matplotlib 图例,但要保持被替换图例的相同(可能是任意的)位置。

为什么下面的代码不起作用?

将 matplotlib.pyplot 导入为 plt plt.plot(范围(10)) 斧头 = plt.gca() leg = plt.legend(['a'], loc='左下') bb = leg.get_bbox_to_anchor().inverse_transformed(ax.transAxes) plt.legend(['b'], bbox_to_anchor=bb)

【问题讨论】:

【参考方案1】:

回答问题中的代码为什么不起作用的问题: 图例的位置仅在绘制图形时在运行时确定。此外,未设置 bbox_to_anchor,因此它将是完整的轴 ((0,0,1,1))。

可以先绘制画布,再获取窗口范围

ax.figure.canvas.draw()
bb = leg.get_window_extent().inverse_transformed(ax.transAxes)

然而,这不会给你正确的位置(只是靠近它)。

现在一个可能的解决方案可能不是替换图例,而是只更新它的内容:

import matplotlib.pyplot as plt

plt.plot(range(10))
ax = plt.gca()

leg = plt.legend(['a'], loc='lower left')

leg.texts[0].set_text("b")

plt.show()

否则,如果更新不是一个选项,您将需要旧图例中的 bbox_to_anchor 和 loc 参数:

import matplotlib.pyplot as plt

plt.plot(range(10))
ax = plt.gca()

leg = plt.legend(['a'], loc='lower left', bbox_to_anchor=(0.5,0.5))

bb = leg.get_bbox_to_anchor().inverse_transformed(ax.transAxes)
plt.legend(['b'], bbox_to_anchor=bb, loc=leg._loc_real) 

plt.show()

在模式已设置为“扩展”的情况下,这可能仍会失败。只有在使用相同的 fancybox 参数来创建新图例时,它也是准确的。

【讨论】:

更新内容就好了。但是,我认为不可能更新我需要的所有属性:fontsize、numpoints、scatterpoints、labelspacing、handletextpad、borderaxespad、borderpad、handlelength 和 fancybox。我认为其中一些只能通过创建时的 legend 命令访问。 有没有办法确定图例的锚定方式/位置?例如,图例的左下角锚定到轴的左下角。如果是这样,那么我可以设置loc='lower left'... 我更新了答案。也许这更接近您的需要。 _loc_real 正是我所需要的!你知道_loc_real_loc有什么区别吗? 一个比另一个更真实。 ;-) 不,老实说,我现在不知道。【参考方案2】:

除非我有误解,否则就这样做:

import matplotlib.pyplot as plt

plt.plot(range(10))
ax = plt.gca()

location = 'lower left'

while 1:

    plt.legend(['a'], loc=location)
    plt.pause(1)
    plt.legend(['b'], loc=location)
    plt.pause(1)

【讨论】:

我应该澄清原始图例位置未知,除了可能是任意的。例如,如果图形是从 pickle 文件加载的,就会发生这种情况。

以上是关于如何修改Tableau里图例的位置的主要内容,如果未能解决你的问题,请参考以下文章

举个栗子!Tableau 技巧(205):区域地图中呈现具体位置

tableau数据分析之图表(1)

Tableau实战系列浏览 Tableau 环境 -重组工作区

Tableau实战系列浏览 Tableau 环境 -工作簿和工作表

Tableau 设计提示4.0 在 Tableau 中使用 Unicode 字符

Tableau可视化分析实战系列浏览 Tableau 环境 -视图的部件