☰
13_图表美化六步法
2026/10/11 1:54:23 网站建设 项目流程

数据没问题,分析也到位,图画出来了——但就是土土的,不像网上那些专业图表。差在细节:默认Matplotlib画的是"毛坯房",那些好看的专业图,不过是把默认参数一个个调过。

今天拿一张最常见的销售趋势图,从默认版一步步改到专业版。先看起点:

importmatplotlib.pyplotaspltimportnumpyasnp months=['1月','2月','3月','4月','5月','6月']sales_A=[120,150,135,180,200,220]sales_B=[80,95,110,130,125,150]plt.plot(months,sales_A)plt.plot(months,sales_B)plt.title('销售额对比')plt.legend()plt.show()


第一步:解决中文乱码

中文全是方块,是Matplotlib默认字体不支持中文。开头加两行全局配置,写一次后面所有图都生效:

importmatplotlib.pyplotaspltimportmatplotlib matplotlib.rcParams['font.sans-serif']=['SimHei','Microsoft YaHei','PingFang SC']matplotlib.rcParams['axes.unicode_minus']=False

Windows用微软雅黑、Mac用PingFang SC、Linux用SimHei,三个都写上兼容性最好。


第二步:换一套好看的颜色

专业图和默认图的第一个视觉差距就是配色。直接用成熟方案:主色珊瑚红#ff4d4f,辅色#1890ff天蓝、#52c41a翠绿、#722ed1紫罗兰、#fa8c16橘黄。在plot()里加color,顺手把线加粗到2像素:

fig,ax=plt.subplots(figsize=(9,5))ax.plot(months,sales_A,color='#ff4d4f',linewidth=2,label='产品A')ax.plot(months,sales_B,color='#1890ff',linewidth=2,label='产品B')ax.set_title('2026年上半年产品销售趋势',fontsize=14)ax.set_xlabel('月份')ax.set_ylabel('销售额(万元)')ax.legend()plt.tight_layout()plt.show()

配色原则:一张图颜色别超过4-5种;主色饱和度适中;折线用纯色,填充区域用半透明(alpha=0.2-0.3)。


第三步:去掉上右两条边框

专业图表通常只留下、左两条边框,上右是多余的:

ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)

两行代码,性价比最高——四条边框在四个方向"抓"视线,把图框死了;去掉两边,视线自然聚焦到数据本身。


第四步:加网格,但只加横向的

没网格读者要对着Y轴比来比去,全网格又像格子本。正确做法是只加横向淡网格:

ax.grid(axis='y',alpha=0.3,linestyle='--')

axis='y'只画横向,alpha=0.3很淡不抢戏,linestyle='--'虚线比实线更轻。网格退居二线辅助阅读,而不是抢戏。


第五步:把标题和标签调到位

ax.set_title('2026年上半年产品销售趋势',fontsize=15,fontweight='bold',pad=15,loc='left')ax.set_xlabel('月份',fontsize=11,labelpad=8)ax.set_ylabel('销售额(万元)',fontsize=11,labelpad=8)

关键调整:标题左对齐(人眼从左往右读,标题在左边更顺)、加粗、加padding透气、字号有层级(标题15、标签11、刻度10),一眼就知道什么是重点。


第六步:图例美化 + 数值标注

图例去掉边框、原则是别挡住数据:

ax.legend(loc='upper left',frameon=False,fontsize=10)

关键数据点旁直接标数字,读者不用猜:

ax.annotate(f'{sales_A[-1]}万',xy=(len(sales_A)-1,sales_A[-1]),xytext=(10,0),textcoords='offset points',fontsize=10,color='#ff4d4f')

xy是箭头指向的位置,xytext是文字相对那个点的偏移。数据点密时只标关键节点(最高、最低、最后一个点)。


改造前后对比

六步改完,最终版完整代码可直接复制运行:

importmatplotlib.pyplotaspltimportmatplotlib matplotlib.rcParams['font.sans-serif']=['SimHei','Microsoft YaHei','PingFang SC']matplotlib.rcParams['axes.unicode_minus']=Falsemonths=['1月','2月','3月','4月','5月','6月']sales_A=[120,150,135,180,200,220]sales_B=[80,95,110,130,125,150]fig,ax=plt.subplots(figsize=(9,5))ax.plot(months,sales_A,color='#ff4d4f',linewidth=2.5,marker='o',markersize=6,label='产品A')ax.plot(months,sales_B,color='#1890ff',linewidth=2.5,marker='s',markersize=5,label='产品B')ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)ax.grid(axis='y',alpha=0.25,linestyle='--')ax.set_title('2026年上半年产品销售趋势',fontsize=15,fontweight='bold',pad=15,loc='left')ax.set_xlabel('月份',fontsize=11,labelpad=8)ax.set_ylabel('销售额(万元)',fontsize=11,labelpad=8)ax.legend(loc='upper left',frameon=False,fontsize=10)plt.tight_layout()plt.show()

数据没变、图表类型没变,气质完全不一样了。

差的就是这六件事:

  1. 中文能正常显示
  2. 换了一套好看的配色
  3. 去掉了上右两条边框
  4. 只留横向淡网格
  5. 标题层级分明
  6. 图例和标注细节到位

真实运行效果

把上面最终版完整代码复制到本地跑一遍,控制台会依次打印数据统计和六步美化的配置执行情况,图片正常保存即说明改造成功。

截图里能看到产品A、B 的真实销售额与 max/min/均值,以及中文字体、配色、去边框、横向网格、标题层级、图例标注六步逐项配置完成、图片保存成功的完整日志。


最后说一句

美化不是花架子——好看的图读者更容易读、更愿意信。但也别走向另一个极端。记住:所有美化都是为了让数据更容易被读懂,而不是为了炫技。去边框为了聚焦数据,加网格为了方便读数,调颜色为了区分层次,每个动作都有目的。

下一篇换个库——Seaborn,把统计可视化做得更优雅、更省心。


梅雅达编程工作室 · Python数据实战系列第13篇
图表美化这件事,知道方法了就是一层窗户纸。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询