【问题标题】:Colors of Rectangles in pythonpython中矩形的颜色
【发布时间】:2012-05-19 00:30:46
【问题描述】:

要在我的绘图中添加一个矩形,我通常使用以下代码:

ret=Rectangle((x_l[i]-dx,y_l[i]-dx),width=dx,height=dx,facecolor='red',linestyle='solid')
ax=gca()
ax.add_patch(ret)

但是我想知道是否可以以不同的方式赋予颜色。我希望我的矩形根据颜色条着色。我会尝试更好地解释它。每个矩形代表一个单元格,在每个单元格中我定义一个标量字段。我的标量字段范围从min_valmax_val。我希望我绘制的每个矩形都是与矩形中标量字段的值相对应的颜色。

【问题讨论】:

  • 我很困惑。您能否制作一张您想要的输出的图片并将其发布?
  • 另外,Rectangle 是什么?也就是说,它来自哪个模块?
  • 这是使用matplotlib 还是一些图形工具包?你的问题很模棱两可……
  • 如果我不知道如何制作这张图片,我该如何制作?顺便说一句,假设我有 5 个矩形,每个矩形的密度值是 1,2,3,4,5 。我希望将密度为 1 的矩形涂成蓝色,将密度为 5 的矩形涂成红色。另一个颜色介于两者之间,就像我使用散点图一样。我正在使用 matplotlib

标签: python colors matplotlib


【解决方案1】:

改编HYRY的答案,提供不依赖pylab的解决方案:

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np
import matplotlib.colorbar as cbar

fig,ax=plt.subplots(1)

rng=6
plt.ylim(0,rng)
plt.xlim(0,rng)

N = 30
x = np.random.rand(N)*rng
y = np.random.rand(N)*rng
colors=np.random.rand(N)
normal = plt.Normalize(0,1) # my numbers from 0-1

cmap=plt.cm.RdYlBu_r
c=cmap(colors)

for i in range(N):
    val=0.5
    rect=patches.Rectangle((x[i],y[i]),0.3,0.3,
                            edgecolor='black',
                            linewidth = 1,
                            facecolor = c[i],
                            ) 
    ax.add_patch(rect)

cax, _ = cbar.make_axes(ax) 
cb2 = cbar.ColorbarBase(cax, cmap=cmap,norm=normal) 

plt.savefig("test.png")

它给出了以下图形:

【讨论】:

  • 如果颜色不在 [0, 1] 中,则需要先将其映射到那里,例如:c = cmap((np.array(colors) - np.amin(colors))/(np.amax(colors) - np.amin(colors)))
  • 是的,感谢您的好意,在我的简单示例中,这并不重要,但对于现实世界的案例,您需要这样做。
【解决方案2】:

您可以用 ColorMap 计算的颜色绘制每个 Rectangle:

import matplotlib.colorbar as cbar
import pylab as pl
import numpy as np

N = 50
xs = np.random.randint(0, 100, N)
ys = np.random.randint(0, 100, N)
ws = np.random.randint(10, 20, N)
hs = np.random.randint(10, 20, N)
vs = np.random.randn(N)
normal = pl.Normalize(vs.min(), vs.max())
colors = pl.cm.jet(normal(vs))

ax = pl.subplot(111)
for x,y,w,h,c in zip(xs,ys,ws,hs,colors):
    rect = pl.Rectangle((x,y),w,h,color=c)
    ax.add_patch(rect)

cax, _ = cbar.make_axes(ax) 
cb2 = cbar.ColorbarBase(cax, cmap=pl.cm.jet,norm=normal) 

ax.set_xlim(0,120)
ax.set_ylim(0,120)
pl.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多