带有Colorbar和图例问题的Python散点图 [英] Python Scatter Plot with Colorbar and Legend Issues

查看:998
本文介绍了带有Colorbar和图例问题的Python散点图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在处理一个非常简单的示例.我在同一组轴上创建了三个散点图,并且我绘制的每个数据集都有一个不同的关联色图.但是,图例看起来并不像我想要的那样.为什么是这样?

I'm working with a pretty simple example. I create three scatter plots on the same set of axes, and each data set I plot has a different associated colormap. However, the legend does not look as I'd want it to; why is this?

import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0,10,100)
x = np.random.rand(100,3)
y = np.random.rand(100,3)

colmaps = ['Blues', 'Greys', 'Reds']
for i in range(3):
    plt.scatter(x[:,i], y[:,i], c=t, cmap=colmaps[i], label=i)

plt.legend()
plt.show()

这将产生如下图所示:

This produces a figure like below:

我希望第一个标签为蓝色,第二个标签为灰色,第三个标签为红色,因此它们与颜色图相关联,但看起来并不是这样.有没有简单的方法可以做到这一点?

I was hoping for the first label to be blue, the second to be grey, and the third to be red, so they're associated with the colormap, but it looks like that's not how it works. Is there a simple way to do this?

谢谢

推荐答案

您可以这样设置图例颜色:

You can set the legend colors as such:

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0,10,100)
x = np.random.rand(100,3)
y = np.random.rand(100,3)
colmaps = ['Blues', 'Greys', 'Reds']

for i in range(3):
    plt.scatter(x[:,i], y[:,i], c=t, cmap=colmaps[i], label=i)

plt.legend()
ax = plt.gca()
legend = ax.get_legend()
legend.legendHandles[0].set_color(plt.cm.Blues(.8))
legend.legendHandles[1].set_color(plt.cm.Greys(.8))
legend.legendHandles[2].set_color(plt.cm.Reds(.8))
plt.show()

我将每个legendHandle的颜色设置为各自的颜色图中的特定值.

I set the color of each legendHandle to a specific value in the respective colormap.

如果您增大散点的大小,则可以看到颜色并将单个点与图例关联起来更容易.我还为图例中的每个散点图设置了一个点,而不是默认值3,并将图例的alpha设置为0.5,散点图的alpha设置为0.7.

If you make the scatter dot's size larger you can see the color and associate individual dots with the legend easier. I also set just one dot per scatter plot in the legend, rather than the default 3, and set the legend's alpha to 0.5, and alpha of scatter plot to 0.7.

...
for i in range(3):
    plt.scatter(x[:,i], y[:,i], c=t, cmap=colmaps[i], label=i, s=200, alpha=0.7)
plt.legend(markerscale=0.7, scatterpoints=1)
ax = plt.gca()
legend = ax.get_legend()
legend.legendHandles[0].set_color(plt.cm.Blues(.8))
legend.legendHandles[1].set_color(plt.cm.Greys(.8))
legend.legendHandles[2].set_color(plt.cm.Reds(.8))
legend.get_frame().set_alpha(0.5)
...

这篇关于带有Colorbar和图例问题的Python散点图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆