单数据点场景下Matplotlib折线图无显示问题求助
问题原因
你使用ax.plot()时指定了纯折线样式("-r"、"-b"),单个数据点无法形成折线,因此matplotlib不会渲染任何可见元素,导致图表看起来为空。
解决方案
有两种简单的修复方式:
方式1:同时指定折线和标记点样式
修改plot函数的格式字符串,同时包含折线和标记符号,这样单个点会显示为标记,多个点时显示折线+标记:
fig, ax = plt.subplots() # 替换原来的plot行,添加标记符号(o代表圆点) ax.plot(rokCzyste, czyste, "-ro", label="Czystorasowe") ax.plot(rokInne, inne, "-bo", label="Inne") # 其余代码保持不变 leg = ax.legend() plt.grid(axis="y") ax.set_xlabel('Rok') ax.set_ylabel('Liczba prosiąt urodzonych') plt.title(f"Liczba prosiąt urodzonych czystorasowych i Innych w stadzie {stado}") plt.xticks(np.arange(min(df10['Rok']), max(df10['Rok'])+1)) plt.xticks(rotation=90) plt.savefig('wykres2.png', dpi=300, bbox_inches='tight')
你可以根据需求替换标记符号,比如s(方形)、^(三角形)等。
方式2:根据数据长度切换绘图方式
如果希望单个点时只显示标记,多个点时只显示折线,可以添加判断逻辑:
fig, ax = plt.subplots() # 处理Czystorasowe数据集 if len(rokCzyste) == 1: ax.scatter(rokCzyste, czyste, color="red", label="Czystorasowe") else: ax.plot(rokCzyste, czyste, "-r", label="Czystorasowe") # 处理Inne数据集 if len(rokInne) == 1: ax.scatter(rokInne, inne, color="blue", label="Inne") else: ax.plot(rokInne, inne, "-b", label="Inne") # 其余代码保持不变 leg = ax.legend() plt.grid(axis="y") ax.set_xlabel('Rok') ax.set_ylabel('Liczba prosiąt urodzonych') plt.title(f"Liczba prosiąt urodzonych czystorasowych i Innych w stadzie {stado}") plt.xticks(np.arange(min(df10['Rok']), max(df10['Rok'])+1)) plt.xticks(rotation=90) plt.savefig('wykres2.png', dpi=300, bbox_inches='tight')
内容的提问来源于stack exchange,提问作者mlodycezar
相关产品推荐
相关产品推荐

