python matplotlib colormap与vmax/vmin的关系
python matplotlib the relationship between colormap and vmax/vmin
我是 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 < vmin
,matplotlib 将交换它们,所以你结束vmin=10000 and
vmax=99999`,如颜色条所示。
如果您不设置颜色图 (cmap=
),matplotlib 将自动使用 'viridis'。此颜色图在 vmin
.
附近有深 purple/blue 颜色
如果不设置c=
参数,颜色取自default property cycle。所以,第一次它被称为蓝色,下一次是橙色,然后是绿色,然后是红色,......。有 10 种颜色,之后颜色再次从蓝色开始。 (在当前版本的 matplotlib 中,颜色图称为 'tab10'。)请注意,如果您未设置 c=
.
,则 vmin
和 vmax
将被忽略
在下面的代码中,我添加了一条红线,其中 out
值属于颜色栏。您可以对 vmin 和 vmax 的不同值进行试验,看看会发生什么。通常,最简单的就是不填,让 matplotlib 自动计算。
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.colorbar()
cbar = plt.colorbar()
cbar.ax.vlines(1, min(out), max(out), color='crimson', lw=3, clip_on=False)
plt.show()
下图中描述了三种情况:
#left plot ('c=' set to 'out', 'cmap=' set to 'Greens')
plt.scatter(num, out, s=50, lw=2, c=out, cmap=plt.cm.Greens, marker='o', vmin=99999)
#central plot ('c=' not set, 'cmap=' not set)
plt.scatter(num, out, s=50, lw=2, marker='o', vmin=99999)
#right plot ('c=' set to 'out', 'cmap=' not set)
plt.scatter(num, out, s=50, lw=2, c=out, marker='o', vmin=99999)
我是 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 < vmin
,matplotlib 将交换它们,所以你结束vmin=10000 and
vmax=99999`,如颜色条所示。
如果您不设置颜色图 (cmap=
),matplotlib 将自动使用 'viridis'。此颜色图在 vmin
.
如果不设置c=
参数,颜色取自default property cycle。所以,第一次它被称为蓝色,下一次是橙色,然后是绿色,然后是红色,......。有 10 种颜色,之后颜色再次从蓝色开始。 (在当前版本的 matplotlib 中,颜色图称为 'tab10'。)请注意,如果您未设置 c=
.
vmin
和 vmax
将被忽略
在下面的代码中,我添加了一条红线,其中 out
值属于颜色栏。您可以对 vmin 和 vmax 的不同值进行试验,看看会发生什么。通常,最简单的就是不填,让 matplotlib 自动计算。
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.colorbar()
cbar = plt.colorbar()
cbar.ax.vlines(1, min(out), max(out), color='crimson', lw=3, clip_on=False)
plt.show()
下图中描述了三种情况:
#left plot ('c=' set to 'out', 'cmap=' set to 'Greens')
plt.scatter(num, out, s=50, lw=2, c=out, cmap=plt.cm.Greens, marker='o', vmin=99999)
#central plot ('c=' not set, 'cmap=' not set)
plt.scatter(num, out, s=50, lw=2, marker='o', vmin=99999)
#right plot ('c=' set to 'out', 'cmap=' not set)
plt.scatter(num, out, s=50, lw=2, c=out, marker='o', vmin=99999)