我有一个用户案例,假设我有三个系列数据:x、y、z。我想使用 (x,y) 作为坐标和 z 作为散点的颜色,使用 plt.scatter 的 cmap 关键字制作散点图。但是,我想通过使用与其他点不同的标记类型和大小来突出显示某些特定点。
?一个最小的例子如下:
x,y,z = np.random.randn(3,10)
plt.scatter(x,y,c=z,cmap=matplotlib.cm.jet)
plt.colorbar()?
Run Code Online (Sandbox Code Playgroud)
?如果我想为 (x[5],y[5],z[5]) 使用不同的标记类型,我该怎么做?我能想到的唯一方法是使用 plt.scatter([x[5],y[5]) 再次绘制该点,但通过手动查找与 z[5] 对应的颜色图 ?color 来定义颜色。然而,这是相当乏味的。有没有更好的办法?
每个散点图都有一个标记,默认情况下不能在单个散点图中使用不同的标记。因此,如果您乐于只更改标记大小并保持标记不变,您可以为scatter'ss参数提供不同大小的数组。
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(10)
x,y,z = np.random.randn(3,10)
sizes = [36]*len(x)
sizes[5] = 121
plt.scatter(x,y,c=z,s=sizes, cmap=plt.cm.jet)
plt.colorbar()
plt.show()
Run Code Online (Sandbox Code Playgroud)
如果您确实需要不同的标记样式,则可以绘制新的散点图。然后,您可以将第二个散射的颜色限制设置为第一个的颜色限制。
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(10)
x,y,z = np.random.randn(3,10)
xs, ys, zs = [x[5]], [y[5]], [z[5]]
print xs, ys, zs
y[5] = np.nan
sc = plt.scatter(x,y,c=z,s=36, cmap=plt.cm.jet)
climx, climy = sc.get_clim()
plt.scatter(xs,ys,c=zs,s=121, marker="s", cmap=plt.cm.jet, vmin=climx, vmax=climy )
plt.colorbar()
plt.show()
Run Code Online (Sandbox Code Playgroud)
最后,这个答案将给出在同一个散点图中有几个不同标记的一些复杂的解决方案。
| 归档时间: |
|
| 查看次数: |
6395 次 |
| 最近记录: |