使用python绘制不同颜色的圆圈

时间:2019-10-15 19:36:36

标签: python matplotlib colors

对于一组生成的点,

  1. 如何在每个点上绘制具有不同颜色的圆?
  2. 即使填充了圆,如何显示圆的中心点?

目的:我有一组GPS点,我想绘制通过这些点的线,并为每个点绘制一个以该点为中心的半径一定的圆。颜色区分是为了区分绘制的各个点和圆圈。

目前,我只能绘制点并在每种点上绘制具有一种特定颜色的圆圈。 (我读过其他有关使用颜色图和RGB的文章,但不幸的是,我无法实现它)

下图显示了每个绘图点的不同颜色的圆的预期绘图(可以使用任何颜色),圆上的点代表每个圆的中心(基本上在每个绘图点)。

Circles different colours

import matplotlib.pyplot as plt
import numpy as np
xx = np.linspace(0,10,5)
yy = np.linspace(30,60,5)
zz = np.vstack((xx,yy)).T
fig = plt.figure(1, figsize=(12, 5))
ax = fig.add_subplot(111, aspect='equal')
plt.plot(xx,yy,zorder=2)
plt.scatter(xx,yy,zorder=1)
for i in range(0,len(xx)):
    circle1 = plt.Circle(zz[i], 4, color='g', fill=True)
    plt.gca().add_patch(circle1)
plt.autoscale()
plt.show()

更新

正如@busybear所建议的,我们可以使用Patch Collection绘制不同颜色的圆。此实现对于定义的点集非常适用。但是,仅对5个测试数据点执行了此操作。对于更多数据点,我们重复定义的颜色或没有绘制圆形。

是否有一种方法也可以定义合适的色谱/颜色表(也许具有十六进制值或强度有所变化的rgb表),因此我们对圆圈有不同的颜色? Circles with Different Colours

xx = np.linspace(0,10,10)
yy = np.linspace(30,60,10)
zz = np.vstack((xx,yy)).T
fig = plt.figure(1, figsize=(12, 5))
ax = fig.add_subplot(111, aspect='equal')
plt.plot(xx,yy,zorder=2)
plt.scatter(xx,yy,zorder=1)
circles = []
for i, c in zip(range(0,len(xx)), 'rgbmkrgbmk'):
    circles.append(plt.Circle(zz[i], 3, color=c, fill=True))
coll = PatchCollection(circles, match_original=True, zorder=0)
ax.add_collection(coll)
plt.autoscale()
plt.show()

新输出(使用散点图方法):

Circle cropped at corner

1 个答案:

答案 0 :(得分:1)

您使用color='g'将每个圆圈的颜色设置为绿色,因此只需更改此颜色即可更改其颜色。您可以像使用散点图部分一样使用zorder设置对象的顺序。对于圈子,您可以像在answer中那样使用PatchCollection。可能是这样的:

from matplotlib.collections import PatchCollection

...

circles = []
cmap = plt.cm.get_cmap('jet')
max_i = len(xx) - 1
for i in range(len(xx)):
    circles.append(plt.Circle(zz[i], 3, color=cmap(i/max_i), fill=True))
coll = PatchCollection(circles, match_original=True, zorder=0)
ax.add_collection(coll)

但是,您也可以仅使用散点图使用每个点的边缘来完成所有操作:

plt.plot(xx, yy,'o-')
plt.scatter(xx, yy, s=[5000, 2000, 6000, 9000, 1000], c=range(len(xx)), cmap='jet')

enter image description here