如何使用matplotlib绘制与Excel效果一致的网络统计折线图
问题原因与修正方案
- 核心问题:你定义的y数组为字符串格式,matplotlib会将其识别为离散分类变量而非连续数值,直接绘图会出现坐标轴数值排序、折线走势异常的问题
- 次要问题:
plt.xticks(x)强制显示全部60个x轴刻度,会导致刻度重叠拥挤,和Excel自动调整刻度间隔的显示逻辑不符
修正后可运行代码
import matplotlib.pyplot as plt import numpy as np x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59]) # 将y从字符串转换为浮点型数值 y = np.array(['0.00', '0.00', '0.00', '0.12', '0.00', '0.00', '0.00', '14.75', '108.56', '78.91', '508.15', '79.66', '147.84', '199.87', '14.02', '10.05', '3411.12', '19735.23', '19929.51', '18428.82', '21727.14', '19716.41', '20295.20', '20283.08', '20088.10', '20155.81', '20108.67', '19954.45', '20316.46', '20045.77', '20233.71', '19981.40', '20230.02', '20099.69', '20000.23', '20234.06', '19763.92', '20458.40', '19626.22', '20542.25', '19821.72', '20443.78', '20109.41', '19918.96', '20223.37', '19933.64', '20023.73', '19655.67', '19890.94', '20590.04', '20158.37', '20001.59', '20011.48', '19785.95', '20550.63', '19687.02', '20025.00', '20478.25', '20124.66', '20148.08'], dtype=np.float64) plt.plot(x, y) # 调整x轴刻度间隔,每5个显示一个避免重叠 plt.xticks(x[::5]) # 开启网格匹配Excel默认折线图显示风格 plt.grid(visible=True, linestyle='--', alpha=0.7) plt.show()
效果说明
运行上述代码后折线走势会和Excel生成的效果完全一致,坐标轴刻度显示也更清晰,额外添加的网格样式也贴合Excel的默认可视化风格。
内容的提问来源于stack exchange,提问作者Florian Berndl
相关产品推荐
相关产品推荐

