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
相关产品推荐
相关产品推荐

