You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bokeh中精准设置绘图区域的宽度?

专门设置绘图区域宽度的方法

针对你遇到的问题(整体图宽固定,但图例、多轴等元素挤压绘图区域),可以根据使用的绘图工具,通过手动控制布局来锁定绘图区域宽度:

R(ggplot2)

方法1:手动调整绘图区域的grob对象

通过ggplotGrob()提取图表布局,直接修改绘图面板(panel)的宽度:

library(ggplot2)
library(gtable)

# 先创建一个带双Y轴和右侧图例的示例图
p <- ggplot(mtcars, aes(mpg, wt)) + 
  geom_point() +
  scale_y_continuous(sec.axis = sec_axis(~ . * 2)) +
  theme(legend.position = "right", legend.text = element_text(size = 12))

# 提取布局grob
g <- ggplotGrob(p)

# 定位绘图面板的位置
panel_pos <- which(g$layout$name == "panel")
# 设置绘图面板的宽度(单位可以是pt、cm、in等,按需调整)
g$widths[g$layout$l[panel_pos]] <- unit(800, "pt")

# 输出调整后的图表
grid::grid.draw(g)

方法2:压缩非绘图区域的边距

通过theme()调整图边距、图例边距,减少非绘图元素的占用空间:

p + 
  theme(
    plot.margin = margin(10, 10, 10, 10, "pt"), # 上、右、下、左的外边距
    legend.box.margin = margin(0, 0, 0, 0, "pt"), # 图例的内边距
    axis.title.y.right = element_text(margin = margin(0, 10, 0, 10, "pt")) # 右侧Y轴标签的边距
  )

Python(Matplotlib)

方法1:手动指定Axes的位置

直接设置绘图区域的位置和宽度,绕过自动布局:

import matplotlib.pyplot as plt
import numpy as np

# 创建基础图表
fig, ax = plt.subplots(figsize=(12, 6)) # 整体图的宽高
ax2 = ax.twinx() # 添加第二个Y轴

# 手动设置绘图区域:[left, bottom, width, height],width就是绘图区域的宽度(占整体图宽的比例或绝对数值)
ax.set_position([0.1, 0.15, 0.7, 0.7])

# 绘图示例
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x), label="sin")
ax2.plot(x, np.cos(x), label="cos", color="orange")
ax.legend(loc="upper right")
ax2.legend(loc="lower right")

plt.show()

方法2:使用Gridspec控制布局

通过gridspec分配绘图区域的空间占比:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec

fig = plt.figure(figsize=(12, 6))
# 定义网格,比如1行2列,绘图区域占第一列的全部,图例等占第二列的小部分
gs = GridSpec(1, 2, width_ratios=[8, 1])

ax = fig.add_subplot(gs[0])
ax2 = ax.twinx()

# 绘图
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x))
ax2.plot(x, np.cos(x), color="orange")

# 把图例放在右侧的网格区域
ax.legend(loc="center left", bbox_to_anchor=(1, 0.5))
ax2.legend(loc="center right", bbox_to_anchor=(1.15, 0.5))

plt.tight_layout()
plt.show()

核心逻辑是:整体图表宽度固定时,要么直接锁定绘图面板的尺寸,要么压缩图例、轴标签等元素的空间,让绘图区域保留足够宽度。

内容的提问来源于stack exchange,提问作者ArvidSteen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:40:11