我不能让像这样的imshow图上的colorbar与图形的高度相同,而不是事后使用Photoshop.我如何达到匹配的高度?
我想用热图表示相关矩阵.R中有一个叫做correlogram的东西,但我不认为Python中有这样的东西.
我怎样才能做到这一点?值从-1到1,例如:
[[ 1. 0.00279981 0.95173379 0.02486161 -0.00324926 -0.00432099]
[ 0.00279981 1. 0.17728303 0.64425774 0.30735071 0.37379443]
[ 0.95173379 0.17728303 1. 0.27072266 0.02549031 0.03324756]
[ 0.02486161 0.64425774 0.27072266 1. 0.18336236 0.18913512]
[-0.00324926 0.30735071 0.02549031 0.18336236 1. 0.77678274]
[-0.00432099 0.37379443 0.03324756 0.18913512 0.77678274 1. ]]
Run Code Online (Sandbox Code Playgroud)
我能够根据另一个问题生成以下热图,但问题是我的值被'切'为0,所以我希望有一个从蓝色(-1)到红色(1)的地图,或者类似的东西,但这里低于0的值没有以适当的方式呈现.
这是代码:
plt.imshow(correlation_matrix,cmap='hot',interpolation='nearest')
Run Code Online (Sandbox Code Playgroud) 我想制作4 imshow个子图,但它们都共享相同的颜色图.Matplotlib根据矩阵的条目自动调整色彩图上的比例.例如,如果我的一个矩阵的所有条目都为10而另一个条目的所有条目都等于5并且我使用了Greys色彩映射,那么我的一个子图应该是完全黑色而另一个应该是完全灰色的.但他们两个最终都变成了黑色.如何使所有子图在色图上共享相同的比例?
我有一系列的线条,每个线条需要用单独的颜色绘制.每条线实际上由几个数据集(正面,负面区域等)组成,因此我希望能够创建一个生成器,它将在光谱中一次提供一种颜色,例如此处显示的gist_rainbow地图.
我发现了以下作品,但它看起来很复杂,更重要的是难以记住,
from pylab import *
NUM_COLORS = 22
mp = cm.datad['gist_rainbow']
get_color = matplotlib.colors.LinearSegmentedColormap.from_list(mp, colors=['r', 'b'], N=NUM_COLORS)
...
# Then in a for loop
this_color = get_color(float(i)/NUM_COLORS)
Run Code Online (Sandbox Code Playgroud)
而且,它不包括gist_rainbow地图中的颜色范围,我必须重新定义地图.
也许发电机不是最好的方法,如果是这样,可接受的方式是什么?
我正在使用matplotlib在python中渲染一些图形,并将它们包含在LaTeX文件中(使用LaTex的漂亮表格对齐而不是摆弄matplotlib ImageGrid等).我想创建并保存一个独立的颜色条savefig,而无需使用imshow.
(vlim, vmax参数,以及cmap可以明确提供)
我能找到的唯一方法是相当复杂的(根据我的理解)在画布上绘制一个硬编码的矩形:http: //matplotlib.org/examples/api/colorbar_only.html
有没有一种优雅的方法来创建一个matplotlib独立颜色条?
这似乎是这个问题的重复:
基本上我想设置颜色条范围来设置限制,例如 0 到 2。当我使用 vmin 和 vmax 时,contourf 中的颜色范围设置正确,但颜色条只显示裁剪范围,即链接中的解决方案没有使用contourf 时似乎有效。我错过了一些明显的东西吗?
import numpy as np
import matplotlib.pyplot as plt
fld=np.random.rand(10,10)
img=plt.contourf(fld,20,cmap='coolwarm',vmin=0,vmax=2)
plt.colorbar(img)
Run Code Online (Sandbox Code Playgroud)
导致
如何使用轮廓将颜色条范围强制为 0 到 2?
我试图绘制具有相同比例的字段.上面的图像值比下面的图像值高10倍,但它们在imshow中变成了相同的颜色.如何将两者设置为具有相同的颜色比例?
我添加了我正在使用的代码图像..
def show_field(field1,field2):
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)
ax.imshow(field1,cmap=plt.cm.YlGn)
ax.set_adjustable('box-forced')
ax.autoscale(False)
ax2 = fig.add_subplot(2, 1, 2)
ax2.set_adjustable('box-forced')
ax2.imshow(field2,cmap=plt.cm.YlGn)
ax2.autoscale(False)
plt.show()
Run Code Online (Sandbox Code Playgroud) 与 contourf 一起使用时如何减少颜色条限制?图表本身的颜色界限用“vmin”和“vmax”很好地设置,但颜色条界限没有被修改。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(20)
y = np.arange(20)
data = x[:,None]+y[None,:]
X,Y = np.meshgrid(x,y)
vmin = 0
vmax = 15
#My attempt
fig,ax = plt.subplots()
contourf_ = ax.contourf(X,Y,data, 400, vmin=vmin, vmax=vmax)
cbar = fig.colorbar(contourf_)
cbar.set_clim( vmin, vmax )
Run Code Online (Sandbox Code Playgroud)
# With solution from /sf/ask/3754915111/
levels = np.linspace(vmin, vmax, 400+1)
fig,ax = plt.subplots()
contourf_ = ax.contourf(X,Y,data, levels=levels, vmin=vmin, vmax=vmax)
cbar = fig.colorbar(contourf_)
plt.show()
Run Code Online (Sandbox Code Playgroud)
“在 matplotlib 中设置颜色条范围”的解决方案适用于 pcolormesh,但不适用于轮廓。我想要的结果如下所示,但使用的是轮廓。
fig,ax = plt.subplots()
contourf_ …Run Code Online (Sandbox Code Playgroud) 我想将顶部和底部值添加到我的颜色条中。因此,顶部值的范围是我的数据中值的最大数量,底部是我数据中的最小数量
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
data = np.genfromtxt("E:\\data\\data1.txt", delimiter="\t")
minVal = np.min(data[np.nonzero(data)])
maxVal = np.max(data[np.nonzero(data)])
fig, ax = plt.subplots()
im = ax.imshow(data, cmap='Purples',
interpolation='nearest',
norm=matplotlib.colors.LogNorm(),
vmin=minVal,vmax = maxVal,
)
cbar = fig.colorbar(im)
print("min ",minVal)
print("max", maxVal)
plt.show()
Run Code Online (Sandbox Code Playgroud) 我有浮点数的n个矩阵(np.array),我想用imshow将它们绘制在一起,但每个颜色的值都有不同的颜色范围.例如,n = white-> blue,n + 1 = white - > red等.有没有办法做到这一点?
矩阵具有相同的大小,并且相互着色不是太大问题,因为大多数矩阵的值为0(希望是白色).
我想的是:
第一个矩阵
000
010
000
Run Code Online (Sandbox Code Playgroud)
第二个矩阵
000
000
001
Run Code Online (Sandbox Code Playgroud)
所以我想也许我可以把第二个矩阵转换成:
222
222
223
Run Code Online (Sandbox Code Playgroud)
然后将0-> 1白色变为蓝色,2-> 3白色变为红色.
遗憾的是,我不知道如何使用matplotlib色彩图进行此操作.
python ×10
matplotlib ×9
colorbar ×3
plot ×2
correlation ×1
heatmap ×1
image ×1
imshow ×1
numpy ×1