使用x,y标题,基于不同颜色的图例绘制散点图

时间:2017-08-23 23:25:23

标签: python matplotlib

我从互联网上寻找一些代码并找到以下函数让我根据第三列值进行绘图。比如result = 0颜色为黄色,结果= 1,颜色=紫色。 但是,即使添加了ax.set_title,ax.set_xlabel,ax.set_ylabel,ax.legend,xlabel,ylabel,title或legend也不显示。

如何绘制像“随机漫步者”图像的图例“”蓝线“目前平均人口1,”黄线“呈现男性人口2 结果= 1,黄色 结果= 0,紫色

def plot_scatter(df=tmp, xcol='freq', ycol='type', catcol='result'):
    fig, ax = plt.subplots()
    categories = np.unique(df[catcol])
    colors = np.linspace(0, 1, len(categories))
    colordict = dict(zip(categories, colors))

    df["Color"] = df[catcol].apply(lambda x: colordict[x])
    ax.set_title('random walkers empirical $\mu$ and $\pm \sigma$ interval')
    ax.legend(loc='best')
    ax.set_xlabel(xcol)
    ax.set_ylabel(ycol)
    ax.scatter(df[xcol], df[ycol], c=df.Color)
    return fig

fig = plot_scatter(tmp)
fig.show()

plot result

enter image description here

1 个答案:

答案 0 :(得分:1)

修改回答:

以下示例代码执行我认为您想要执行的操作,但没有数据框,因为我没有您的数据框:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

fig, ax = plt.subplots()

# this part should get replaced with your dataframe-based calculations
x = np.linspace(0, 1, 100)
y = np.random.randint(0, 2, 100)
colordict = {0: 'yellow', 1: 'purple'}
color = list(colordict[val] for val in y)

ax.scatter(x, y, c = color, label = color)

ax.set_title('random walkers empirical $\mu$ and $\pm \sigma$ interval')
ax.set_xlabel('freq')
ax.set_ylabel('type')

# custom patches for the legend
yellow_patch = mpatches.Patch(color='yellow', label='population 1, result = 0')
purple_patch = mpatches.Patch(color='purple', label='population 2, result = 1')
ax.legend(handles=[yellow_patch, purple_patch])

plt.show()

不幸的是,我之前的回答(保留在下面)并没有真正解决问题,因为我没有理解我链接的例子。你想要做的是制作自定义标签,更像是this example

对于评论中的代码,请注意您需要在之后调用所需的所有标注命令的legend 。我不确定为什么你的轴标签和标题不会出现 - 他们在我运行我的版本时会这样做。

不幸的是,以下并没有真正解决问题。

图例没有出现,因为图中没有元素有标签。您没有提供足够的代码来复制您的情节,但this example表示您应该能够将label = df.Color传递给scatter以获得正确的效果。因此,您对scatter的调用如下:

ax.scatter(df[xcol], df[ycol], c=df.Color, label = df.Color)

<击>