python matplotlib颜色映射和vmax/vmin之间的关系

python matplotlib颜色映射和vmax/vmin之间的关系,python,matplotlib,scatter-plot,Python,Matplotlib,Scatter Plot,我是python matplotlib新手,我正在尝试对cmp和vmax,vmin 根据我的理解,如果结果高于vmax,则结果显示彩色贴图的末尾(黑色),而结果低于vmin,则结果显示彩色贴图的原始颜色,如pic1 但是,当我在结果中设置vmax或vmin时,颜色如何重新绑定到结果?为什么会显示这样 例如,当我将vmin设置为超出范围时,结果显示蓝色,但cmp中没有蓝色,请参见图2 当vmax超出范围时,结果显示为浅色,据我所知,颜色应与cmp=plt.cm.Greens相同,参见图3 我

我是python matplotlib新手,我正在尝试对
cmp
vmax
vmin

根据我的理解,如果结果高于
vmax
,则结果显示彩色贴图的末尾(黑色),而结果低于
vmin
,则结果显示彩色贴图的原始颜色,如pic1

但是,当我在结果中设置
vmax
vmin
时,颜色如何重新绑定到结果?为什么会显示这样

例如,当我将
vmin
设置为超出范围时,结果显示蓝色,但
cmp中没有蓝色,请参见图2

vmax
超出范围时,结果显示为浅色,据我所知,颜色应与
cmp=plt.cm.Greens
相同,参见图3

我上传照片。 这是我的密码:

#!/usr/bin/python
import matplotlib.pyplot as plt


num=range(1,100)
out=[x**2 for x in num]
plt.figure(figsize=(11, 11))


plt.title('Scatter',size=24)
plt.ylabel('Result',size=24)
plt.xlabel('Number',size=24)
plt.axis([0, 110, 0, 11000])

plt.scatter(num,out,s=50,lw=2,c=out,cmap=plt.cm.Greens,marker='o',label='Scatter',vmin=99999)
plt.show()

查看发生了什么的最好方法是添加一个颜色条(
plt.colorbar()
,在创建散点图之后)。您会注意到,介于0和10000之间的
out
值都位于条形图的最低部分下方,该部分为浅绿色

通常,低于
vmin
的值将以最低颜色着色,高于
vmax
的值将以最高颜色着色

如果将
vmax
设置为小于
vmin
,则它们将在内部交换。尽管如此,根据matplotlib的确切版本和调用的精确函数,matplotlib可能会发出错误警告。因此,最好将
vmin
设置为始终低于
vmax

如果未设置
vmin
,它将自动计算为数据的最小值。类似地,如果不设置
vmax
,它将设置为数据的最大值。因此,如果您设置了
vmin=99999
而未设置
vmax
vmax
将计算为10000。与现在的
vmax
一样,matplotlib将交换它们,因此以
vmin=10000和
vmax=99999`结束,如颜色栏所示

如果未设置颜色映射(
cmap=
),matplotlib将自动使用。此颜色贴图在
vmin
附近具有深紫色/蓝色

如果未设置
c=
参数,则颜色取自。所以,第一次它被称为蓝色,下一次是橙色,然后是绿色,然后是红色。共有10种颜色,之后颜色从蓝色开始。(在当前版本的matplotlib中,颜色映射称为“tab10”)。请注意,如果不设置
c=
,则会忽略
vmin
vmax

在下面的代码中,我在
out
值属于色条的地方添加了一条红线。您可以使用vmin和vmax的不同值进行实验,以了解发生了什么。通常,最简单的方法是不填写它们,而是让matplotlib自动计算它们

导入matplotlib.pyplot作为plt
num=范围(1100)
out=[x**2代表x输入数值]
plt.图(figsize=(11,11))
plt.标题(“分散”,大小=24)
plt.ylabel('结果',大小=24)
plt.xlabel('Number',size=24)
plt.轴([0,110,0,11000])
plt.scatter(num,out,s=50,lw=2,c=out,cmap=plt.cm.Greens,marker='o',label='scatter',vmin=99999)
#plt.colorbar()
cbar=plt.colorbar()
cbar.ax.vlines(1,最小值(out),最大值(out),color='crimson',lw=3,clip_on=False)
plt.show()
下图描述了三种情况:

#左图('c='设置为'out','cmap='设置为'Greens')
plt.散射(num,out,s=50,lw=2,c=out,cmap=plt.cm.Greens,marker='o',vmin=99999)
#中央绘图('c='未设置,'cmap='未设置)
plt.散射(数值,输出,s=50,lw=2,标记=o',vmin=99999)
#右图('c='设置为'out','cmap='未设置)
plt.散射(num,out,s=50,lw=2,c=out,marker='o',vmin=99999)

是指当我设置
Vmin
Vmax
matplotlib时交换它们,这样如果我只设置一个
Vmin=9999
Vmax=9999
,最后reslut应该与
Vmax=9999
Vmin=out
,并且当我添加
cbar=plt.colorbar()
检查颜色时,
Vmin=9999
中的不同颜色,浅绿色带
plt.colorbar()
[我知道这是正确的],蓝色不带
plt.colorbar()
[这让我很困惑]如果你不放一个色条,图像将是一样的,色条只是帮助你看看发生了什么。如果您不提供颜色映射(
cmap=`),matplotlib会选择。Viridis在vmin附近呈深蓝色紫色,