【问题标题】:Move table position matplotlib python移动表格位置matplotlib python
【发布时间】:2018-07-31 05:53:00
【问题描述】:

我创建了一个显示形状的figure 和使用matplotlibtable。问题是它是如何产生的。它们相互重叠。形状是按比例缩放的,所以我不想改变它。我想知道如何更改绘图的整体大小或移动表格的位置。

import matplotlib.pyplot as plt
import matplotlib as mpl

fig, ax = plt.subplots(figsize = (10,6))
ax.axis('equal')
plt.style.use('ggplot')
ax.grid(False)

xy = 0,0
circle = mpl.patches.Circle(xy, 160, lw = 3, edgecolor = 'black', color = 'b', alpha = 0.1, zorder = 5)
ax.add_patch(circle)   

col_labels=['A','B','C','D','E']
row_labels=['diff','total']

table_vals=[['','','','',''],['','','','','']]

the_table = plt.table(cellText=table_vals,
    colWidths = [0.05]*5,
    rowLabels=row_labels,
    colLabels=col_labels,
    bbox = [0.8, 0.4, 0.2, 0.2])

ax.autoscale()
plt.show()

【问题讨论】:

  • 当然你可以把圆圈变小,或者修改xlimylim,或者把你的桌子的位置改成一个角落……可能性无穷无尽。
  • 我已经更新了问题。抱歉,它的形状要按比例缩放,所以我无法更改。如果我改变桌子的位置,它就会脱离情节
  • top center 代替 top right 怎么样?否则按照答案中的建议使用bbox

标签: python matplotlib plot figure


【解决方案1】:

在您的表中添加 bbox 参数。 (而不是 loc)

the_table = plt.table(cellText=table_vals,
              colWidths = [0.05]*5,
              rowLabels=row_labels,
              colLabels=col_labels,
              bbox = [0.2, 0.4, 0.4, 0.02])

bbox 参数接受 4 个输入:X、Y、宽度、高度。因此 X 和 Y 是左下角的坐标。上面,高度太小了。

编辑:创造空间来玩

这个想法是以同样的方式使ax更小。

box = ax.get_position()
a.set_position([box.x0, box.y0, box.width * 0.9, box.height])

编辑 2: 试图把桌子放在右边。正如我所说,您需要使用盒子值,我花了大约 10 次尝试才得到这个。我使用 spyder 作为 IDE,所以速度非常快。

import matplotlib.pyplot as plt
import matplotlib as mpl

fig, ax = plt.subplots(figsize = (10,6))
ax.axis('equal')
plt.style.use('ggplot')
ax.grid(False)

xy = 0,0
circle = mpl.patches.Circle(xy, 160, lw = 3, edgecolor = 'black', color = 'b', alpha = 0.1, zorder = 5)
ax.add_patch(circle)   

col_labels=['A','B','C','D','E']
row_labels=['diff','total']

table_vals=[['','','','',''],['','','','','']]

the_table = plt.table(cellText=table_vals,
          colWidths = [0.05]*5,
          rowLabels=row_labels,
          colLabels=col_labels,
          bbox = [1.1, 0.5, 0.35, 0.1])

box = ax.get_position()
ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])

ax.autoscale()
plt.show()

输出:

【讨论】:

  • 谢谢@Mathieu。无论如何也可以扩大情节大小。我可以挤进去,但最好有更多的空间来玩。
  • @Maxibon 可以,可以用EDIT中的代码修改图中axis的位置和大小。假设你想把绘图放在左边,桌子放在右边,你的圆圈边上的空间是没有用的,所以玩弄宽度和x位置。
  • @Maxibon 没有更多关于你想做什么的知识,我无能为力。
  • 谢谢@Mathieu。那应该是ax.set_position([box.x0, box.y0, box.width * 0.9, box.height]) 而不是a.set_position
  • @Maxibon 好吧,您需要使用这些值,box.width * 0.9 可以将宽度减少 10%。您可能需要更多,您可能需要将角移到另一个位置 (x0, y0),依此类推...
【解决方案2】:

将表格放在坐标区之外

您可以使用loc="right" 将表格定位在轴的右侧。像fig.subplots_adjust(right=0.8) 这样的东西会为它留出足够的空间。

import matplotlib.pyplot as plt
import matplotlib as mpl
plt.style.use('ggplot')

fig, ax = plt.subplots(figsize = (10,6))
fig.subplots_adjust(right=0.8)
ax.axis('equal')

ax.grid(False)

xy = 0,0
circle = mpl.patches.Circle(xy, 160, lw = 3, edgecolor = 'black', 
                            facecolor = 'b', alpha = 0.1, zorder = 5)
ax.add_patch(circle)   

col_labels=['A','B','C','D','E']
row_labels=['diff','total']

table_vals=[['','','','',''],['','','','','']]

the_table = plt.table(cellText=table_vals,
          colWidths = [0.05]*5,
          rowLabels=row_labels,
          colLabels=col_labels,
          loc='right', zorder=3)

ax.autoscale()
plt.show()

将表格放在自己的坐标轴中

您可以将表格放在现有轴旁边的新轴中。优点是不需要再使用列宽或子图参数。

import matplotlib.pyplot as plt
import matplotlib as mpl
plt.style.use('ggplot')

fig, (ax, ax_table) = plt.subplots(ncols=2, figsize = (10,6),
                                  gridspec_kw=dict(width_ratios=[3,1]))
ax.axis('equal')
ax_table.axis("off")

ax.grid(False)

xy = 0,0
circle = mpl.patches.Circle(xy, 160, lw = 3, edgecolor = 'black', 
                            facecolor = 'b', alpha = 0.1, zorder = 5)
ax.add_patch(circle)   

col_labels=['A','B','C','D','E']
row_labels=['diff','total']

table_vals=[['','','','',''],['','','','','']]

the_table = ax_table.table(cellText=table_vals,
          rowLabels=row_labels,
          colLabels=col_labels,
          loc='center')

ax.autoscale()
plt.show()

【讨论】:

  • 感谢@ImportanceOfBeingErnest。这很好。是否可以将它与绘图放在同一轴上。详情请看问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 2021-10-19
  • 2016-10-14
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多