如何基于matplotlib中的颜色图在散点图中着色阴影? [英] how to shade points in scatter based on colormap in matplotlib?

查看:132
本文介绍了如何基于matplotlib中的颜色图在散点图中着色阴影?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试根据从一个已定义的颜色图(例如蓝色或红色)中选取的一组值(从0到1)对散点图中的点进行阴影处理.我试过了:

I'm trying to shade points in a scatter plot based on a set of values (from 0 to 1) picked from one of the already defined color maps, like Blues or Reds. I tried this:

import matplotlib
import matplotlib.pyplot as plt
from numpy import *
from scipy import *
fig = plt.figure()
mymap = plt.get_cmap("Reds")
x = [8.4808517662594909, 11.749082788323497, 5.9075039082855652, 3.6156231827873615, 12.536817102137768, 11.749082788323497, 5.9075039082855652, 3.6156231827873615, 12.536817102137768]
spaced_colors = linspace(0, 1, 10)
print spaced_colors
plt.scatter(x, x,
            color=spaced_colors,
            cmap=mymap)
# this does not work either
plt.scatter(x, x,
            color=spaced_colors,
            cmap=plt.get_cmap("gray"))

但是使用红色"或灰色"颜色贴图都无效.该怎么办?

But it does not work, using either the Reds or gray color map. How can this be done?

edit :如果我想分别绘制每个点,以便可以有一个单独的图例,该怎么办?我试过了:

edit: if I want to plot each point separately so it can have a separate legend, how can I do it? I tried:

fig = plt.figure()
mymap = plt.get_cmap("Reds")
data = np.random.random([10, 2])
colors = list(linspace(0.1, 1, 5)) + list(linspace(0.1, 1, 5))
print "colors: ", colors
plt.subplot(1, 2, 1)
plt.scatter(data[:, 0], data[:, 1],
           c=colors,
           cmap=mymap)
plt.subplot(1, 2, 2)
# attempt to plot first five points in five shades of red,
# with a separate legend for each point
for n in range(5):
    plt.scatter([data[n, 0]], [data[n, 1]],
               c=[colors[n]],
               cmap=mymap,
               label="point %d" %(n))
plt.legend()

但是失败.我需要打电话给每个点进行散布,以便它可以有一个单独的label =,但仍然希望每个点的颜色图的颜色都不同. 谢谢.

but it fails. I need to make a call to scatter for each point so that it can have a separate label=, but still want each point to have a different shade of the color map as its color. thanks.

推荐答案

如果您确实要执行此操作(您在编辑中所描述的内容),则必须从颜色表中拉出"颜色(我已评论了所有更改)我输入了您的代码):

If you really want to do this (what you describe in your edit), you have to "pull" the colors from your colormap (I have commented all changes I made to your code):

import numpy as np
import matplotlib.pyplot as plt 

# plt.subplots instead of plt.subplot
# create a figure and two subplots side by side, they share the
# x and the y-axis
fig, axes = plt.subplots(ncols=2, sharey=True, sharex=True)
data = np.random.random([10, 2]) 
# np.r_ instead of lists
colors = np.r_[np.linspace(0.1, 1, 5), np.linspace(0.1, 1, 5)] 
mymap = plt.get_cmap("Reds")
# get the colors from the color map
my_colors = mymap(colors)
# here you give floats as color to scatter and a color map
# scatter "translates" this
axes[0].scatter(data[:, 0], data[:, 1], s=40,
                c=colors, edgecolors='None',
                cmap=mymap)
for n in range(5):
    # here you give a color to scatter
    axes[1].scatter(data[n, 0], data[n, 1], s=40,
                    color=my_colors[n], edgecolors='None',
                    label="point %d" %(n))
# by default legend would show multiple scatterpoints (as you would normally
# plot multiple points with scatter)
# I reduce the number to one here
plt.legend(scatterpoints=1)
plt.tight_layout()
plt.show()

但是,如果您只想绘制10个值并想为每个值命名, 您应该考虑使用其他方法,例如像这样的条形图 示例.另一个机会是将plt.plot与自定义颜色循环一起使用,例如在示例.

However, if you only want to plot 10 values and want to name every single one, you should consider using something different, for instance a bar chart as in this example. Another opportunity would be to use plt.plot with a custom color cycle, like in this example.

这篇关于如何基于matplotlib中的颜色图在散点图中着色阴影?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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