绘图图例显示未知项目/相同的图例项目以不同的线条显示两次

Posted

技术标签:

【中文标题】绘图图例显示未知项目/相同的图例项目以不同的线条显示两次【英文标题】:Plot legend shows unknown item/ same legend item shown twice with line different style 【发布时间】:2019-04-01 05:11:54 【问题描述】:

我正在黑白 png 上绘制一些路线。现在看来,图例中有一个不应该存在的项目。我正在迭代一个熊猫数据框并通过唯一的 ID 识别不同的路线。我在数据框的开头也有一个起点和一个终点,所以在i=0i=1,我改为绘制marker='o',所以我可以在我的绘图/行上看到单个点在我的数据框中。到目前为止一切正常,但正如您在 i=0 的图例中看到的那样,有 2 个条目。曾经是starting point,但在第二行中它添加了一条橙色线。这个怎么可能?在数据框中,id=0 肯定只有 1 行。

这是我的代码和示例数据框:

import pandas as pd
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
df = pd.DataFrame('x':[100,60,1,1,1,5,4,4], 'y':[100,125,1,2,3,10,10,9],'id':[0,1,2,2,2,3,3,3])
for i, g in df.groupby('id'):     
    if(i==0):
        g.plot(x='x',y='y',ax=ax,marker='o',title="Alternative Routes",label="Start Punkt")
    if(i==1):
        g.plot(x='x',y='y',ax=ax,marker='o',title="Alternative Routes",label="End Punkt")
    else:
        g.plot(x='x',y='y',ax=ax, title="Alternative Routes",label=i)
plt.show()

这里的结果图:

【问题讨论】:

【参考方案1】:

我自己找到了答案:应该是 elif 而不是 if for i==1

import pandas as pd
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
df = pd.DataFrame('x':[100,60,1,1,1,5,4,4], 'y':[100,125,1,2,3,10,10,9],'id':[0,1,2,2,2,3,3,3])
for i, g in df.groupby('id'):     
    if(i==0):
        g.plot(x='x',y='y',ax=ax,marker='o',title="Alternative Routes",label="Start Punkt")
    elif(i==1):
        g.plot(x='x',y='y',ax=ax,marker='o',title="Alternative Routes",label="End Punkt")
    else:
        g.plot(x='x',y='y',ax=ax, title="Alternative Routes",label=i)
plt.show()

【讨论】:

以上是关于绘图图例显示未知项目/相同的图例项目以不同的线条显示两次的主要内容,如果未能解决你的问题,请参考以下文章

如何为多色线创建基本图例?

pyqtgraph:为绘图中的线条添加图例

在 ggplot 中结合颜色和线型图例

即使自定义图例单击以使其不可见,如何在折线图中至少显示一行

如何修改散点图图例以显示相同类型句柄的不同格式?

matplotlib 图例仅基于线条样式而不是颜色