python matplotlib颜色映射和vmax/vmin之间的关系
我是python matplotlib新手,我正在尝试对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 我
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附近呈深蓝色紫色,