pandas 本身并不是一个专门的可视化库,但它内置了基于 matplotlib 的简单绘图接口

📅 发布时间:2026/7/16 4:57:35 👁️ 浏览次数:
pandas 本身并不是一个专门的可视化库,但它内置了基于 matplotlib 的简单绘图接口
pandas 本身并不是一个专门的可视化库但它内置了基于 matplotlib 的简单绘图接口DataFrame.plot()和Series.plot()可快速生成基础静态图表如折线图、柱状图、散点图、直方图、箱线图等。这些绘图功能依赖于 matplotlib 作为后端默认无需额外导入 matplotlib 即可调用但需确保已安装 matplotlibpandas 绘图会自动触发其渲染。示例代码importpandasaspdimportnumpyasnp# 创建示例数据dfpd.DataFrame({x:np.arange(10),y:np.random.randn(10).cumsum()})# 快速绘图静态基于 matplotlibdf.plot(xx,yy,kindline,titlePandas Line Plot,gridTrue)⚠️ 注意pandas 绘图是封装层本质调用 matplotlib不支持交互式操作若需更丰富样式、多子图、精细控制建议直接使用 matplotlib 或 seaborn中文显示、字体、坐标轴标签等需通过 matplotlib.rcParams 或 plt.gca() 进行配置pandas.plot() 本身不直接支持中文设置常需提前配置 matplotlib 字体。在pandas.plot()中正确显示中文标题和坐标轴标签关键在于配置 matplotlib 的字体设置因为 pandas 绘图底层依赖 matplotlib。默认情况下matplotlib 可能不支持中文字体如显示为方框 □□需显式指定支持中文的字体如 SimHei、Noto Sans CJK、Microsoft YaHei 等并禁用字体缓存。✅ 推荐通用解决方案兼容 Windows/macOS/Linuximportmatplotlib.pyplotaspltimportpandasaspdimportnumpyasnp# ✅ 步骤1设置中文字体推荐使用 SimHeiWindows、Arial Unicode MSmacOS、Noto Sans CJK SCLinux/跨平台plt.rcParams[font.sans-serif][SimHei,Arial Unicode MS,Noto Sans CJK SC,DejaVu Sans]# 优先级列表plt.rcParams[axes.unicode_minus]False# 解决负号 - 显示为方块的问题# ✅ 步骤2创建数据并绘图pandas.plot 自动继承 rcParams 设置dfpd.DataFrame({月份:[1月,2月,3月,4月],销售额:[120,150,130,180]})axdf.plot(x月份,y销售额,kindbar,title季度销售额统计,xlabel月份,ylabel销售额万元)plt.show() 补充说明若系统无SimHei字体如 Linux 或某些 Docker 环境可安装fonts-wqy-zenheiUbuntu或下载 Noto Sans CJK 字体并手动注册临时生效也可用plt.font_manager.fontManager.addfont()加载本地.ttf文件使用pd.options.display.mpl_style None已弃用或seaborn.set(font...)不影响 pandas.plot应始终通过plt.rcParams配置。在不修改全局plt.rcParams的前提下为单个pandas.plot()图单独设置中文字体核心思路是✅在绘图后通过 matplotlib 的Axes对象返回值逐项设置文本元素的字体属性或 ✅临时覆盖 rcParams 并在绘图后恢复。由于pandas.DataFrame.plot()返回matplotlib.axes.Axes对象我们可对其标题、坐标轴标签、刻度标签等文本元素显式指定字体名fontfamily和字号无需改动全局配置。 推荐方法安全、精准、无副作用importpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt# 示例数据dfpd.DataFrame({类别:[苹果,香蕉,橙子,葡萄],销量:[45,32,51,28]})# 调用 pandas.plot() 获取 axes 对象axdf.plot(x类别,y销量,kindbar,figsize(6,4))# ✅ 单独为该图设置中文字体仅影响当前 axfont_familySimHei# 或 Noto Sans CJK SC, Microsoft YaHei 等系统可用中文字体# 设置标题、坐标轴标签支持 fontfamily 参数ax.set_title(水果销量统计,fontfamilyfont_family,fontsize14)ax.set_xlabel(水果类别,fontfamilyfont_family,fontsize12)ax.set_ylabel(销量箱,fontfamilyfont_family,fontsize12)# ✅ 设置刻度标签x轴和y轴的 tick labelsforlabelinax.get_xticklabels():label.set_fontfamily(font_family)forlabelinax.get_yticklabels():label.set_fontfamily(font_family)# ✅ 可选设置图例字体若存在图例ifax.get_legend():fortextinax.get_legend().get_texts():text.set_fontfamily(font_family)plt.tight_layout()plt.show() 补充技巧若需确保字体一定可用可先用matplotlib.font_manager.findfont()检查如findfont({family: sans-serif})但更稳妥的是直接传入已知系统存在的字体名此方法完全绕过rcParams不影响后续其他图表fontfamily参数在set_title/set_xlabel/set_ylabel/Text.set_fontfamily()中均被支持matplotlib ≥ 3.1对于中文刻度标签如 x 轴为中文字符串get_xticklabels()返回的是Text对象列表可批量设置set_fontfamily。⚠️ 注意pandas.plot()本身不提供fontfamily参数因此必须在返回的ax上后处理——这是实现“单图定制”的标准且可靠方式。