使用FontAwesome图标与Pywaffle绘制图表时如何避免图标变形
使用FontAwesome图标与Pywaffle绘制图表时如何避免图标变形
看起来你的图标变形问题大概率是图表宽高比不匹配或者FontAwesome字体渲染异常导致的,下面是几个经过验证的解决方案,你可以逐一尝试:
1. 固定图表宽高比,匹配行列数比例
华夫图的图标变形最常见的原因就是图表的宽高没有和图标排列的行列数对应,导致图标被强制拉伸。你的代码里设置了rows=5,总图标数是30+16+4=50,因此列数是10(50/5),所以我们可以给plt.figure加上figsize参数,让宽高比和行列数比例(10:5=2:1)保持一致:
import matplotlib.pyplot as plt from pywaffle import Waffle fig = plt.figure( FigureClass=Waffle, rows=5, figsize=(10, 5), # 新增:宽10高5,匹配10列5行的比例 values=[30, 16, 4], colors=["#FFA500", "#4384FF", "#C0C0C0"], icons=['sun', 'cloud-showers-heavy', 'snowflake'], font_size=20, icon_style='solid', icon_legend=True, legend={ 'labels': ['Sun', 'Shower', 'Snow'], 'loc': 'upper left', 'bbox_to_anchor': (1, 1) } ) plt.show()
2. 确保FontAwesome字体正确加载
如果手动注册字体没生效,可能是路径不对或者版本不兼容。你可以尝试直接在代码中指定FontAwesome的字体文件路径,同时升级到最新版的Pywaffle和matplotlib:
第一步:升级依赖包
pip install --upgrade pywaffle matplotlib
第二步:在代码中手动加载字体
import matplotlib.pyplot as plt import matplotlib.font_manager as fm from pywaffle import Waffle # 替换成你本地FontAwesome Solid字体的实际路径 # 比如Windows路径可能是 "C:/Windows/Fonts/Font Awesome 6 Free-Solid-900.otf" # macOS路径可能是 "/Library/Fonts/Font Awesome 6 Free-Solid-900.otf" font_path = "/path/to/Font Awesome 6 Free-Solid-900.otf" fm.fontManager.addfont(font_path) plt.rcParams['font.family'] = 'Font Awesome 6 Free' # 然后是你的华夫图代码 fig = plt.figure( FigureClass=Waffle, rows=5, figsize=(10, 5), values=[30, 16, 4], colors=["#FFA500", "#4384FF", "#C0C0C0"], icons=['sun', 'cloud-showers-heavy', 'snowflake'], font_size=20, icon_style='solid', icon_legend=True, legend={ 'labels': ['Sun', 'Shower', 'Snow'], 'loc': 'upper left', 'bbox_to_anchor': (1, 1) } ) plt.show()
3. 关闭自动布局,避免图例挤压图表区域
有时候图例的位置会挤压图表的显示区域,间接导致图标变形。你可以尝试关闭自动布局:
fig = plt.figure( FigureClass=Waffle, rows=5, figsize=(10, 5), tight_layout=False, # 关闭自动布局 values=[30, 16, 4], # 其他参数保持不变... )
优先尝试第一个方案(设置figsize),这是解决图标拉伸变形最直接的方法,很多时候调整完宽高比问题就解决了。
备注:内容来源于stack exchange,提问作者R.Sav
相关产品推荐
相关产品推荐

