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

Matplotlib设置对数刻度后保存的图表仅显坐标轴无内容

解决Matplotlib对数刻度柱状图保存PDF无内容问题

你的问题根源在于y值过于接近:所有数据都集中在4.38左右,差异极小。切换到对数刻度后,这些值的对数值(约0.64)几乎重叠,导致柱子高度被压缩到几乎与坐标轴重合。加上PDF渲染时对极细元素的处理逻辑,最终看不到任何柱子内容。

方案1:手动适配对数轴范围

通过手动设置y轴的对数范围,放大微小的数值差异,让柱子能被正常渲染:

import matplotlib.pyplot as plt

# Data
y_values = [4.385236951214598, 4.385249349505862, 4.38524255048674, 4.385237751115038, 4.385241350648787]
x_labels = ["Dota", "Youtube", "Exchange", "Fifa", "Uber"]

# Create the plot
fig, ax = plt.subplots(figsize=(10, 6))
ax.bar(x_labels, y_values, color=plt.cm.viridis(range(len(x_labels))))

# Set y-axis to log scale
ax.set_yscale('log')

# 手动设置y轴范围,适配极小的数值差异
min_y = min(y_values)
max_y = max(y_values)
ax.set_ylim(min_y * 0.99999, max_y * 1.00001)

# Add title and labels
ax.set_title("Contracts vs. Values (Log Scale)")
ax.set_xlabel("Contracts")
ax.set_ylabel("Values")

# 保存PDF时可尝试移除transparent=True,避免渲染异常
fig.savefig('gas-burnt-per-contract.pdf', dpi=300, bbox_inches='tight', pad_inches=0)

plt.show()

方案2:使用相对值展示差异

如果你的核心需求是比较相对差异,不如先计算每个值与基准值的比例,再用对数刻度展示,这样差异会更直观:

import matplotlib.pyplot as plt

# Data
y_values = [4.385236951214598, 4.385249349505862, 4.38524255048674, 4.385237751115038, 4.385241350648787]
x_labels = ["Dota", "Youtube", "Exchange", "Fifa", "Uber"]

# 计算相对值(以第一个数据为基准)
base_val = y_values[0]
relative_values = [val / base_val for val in y_values]

# Create the plot
fig, ax = plt.subplots(figsize=(10, 6))
ax.bar(x_labels, relative_values, color=plt.cm.viridis(range(len(x_labels))))

# Set y-axis to log scale
ax.set_yscale('log')

# 适配相对值的轴范围
min_rel = min(relative_values)
max_rel = max(relative_values)
ax.set_ylim(min_rel * 0.999, max_rel * 1.001)

# Add title and labels
ax.set_title("Contracts vs. Relative Values (Log Scale)")
ax.set_xlabel("Contracts")
ax.set_ylabel("Relative Value (vs Dota)")

fig.savefig('gas-burnt-per-contract-relative.pdf', dpi=300, bbox_inches='tight', pad_inches=0)

plt.show()

关键说明

  • 方案1直接针对原始数据调整轴范围,适合需要保留绝对数值的场景;
  • 方案2通过相对值放大差异,更符合“相对比较”的需求;
  • 移除transparent=True可以避免PDF渲染时因透明背景导致的极细元素丢失问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:40:15