绘制包含 X、Y、半径、强度的 python 矩阵

Plot an matrix with python containing X, Y, Radius, Intensity

我有一个包含以下列的数组: X(位置)、Y(位置)、R(半径)和强度(半径内) 我想绘制一个 (X,Y) 地图,其中包含具有不同半径的圆和每个圆 将根据强度列具有颜色。我看到了这个阴谋之王。为了 为了使情节易于理解,我计划将强度分开,例如 4 或 5 个箱子,以便只有 4 或 5 种颜色。 我正在考虑使用“plt.imshow”,但我不想要方形像素,我想要具有不同半径的圆圈。 如果有人有一些想法,我会很感激.. 谢谢

通常您会为此类数据使用散点图。但是,我发现如果我将每个点绘制为注释标记,我可以最大程度地控制标记的大小和颜色,这正是您解决此问题所需要的。假设您在 csv 文件中有以下示例数据:

x,y,radius,intensity
1,4,3,10
2,4,4,20
4,2,5,30
6,8,3,40
8,10,2,50
9,4,6,50
3,2,3,20

你可以这样画:

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv('sample2.csv')

intensity_range = (df.intensity.max()-df.intensity.min())
colors = ['red','orange', 'yellow', 'green', 'blue']

for _,row in df.iterrows():
    plt.annotate(text=' ', xy= (row['x'],row['y']), size= row['radius'], bbox={"boxstyle":"circle","color":colors[int(row['intensity']*4/intensity_range)-1]})

plt.xlim(df.x.min() - 1, df.x.max() + 1)
plt.ylim(df.y.min() - 1, df.y.max() + 1)
plt.show()

您可以使用相同的注释策略添加自定义颜色条,如下所示。使用下面代码中的常量,让它看起来像你想要的样子。

for i, color in enumerate(colors):
    plt.annotate(text= str(i* intensity_range//4 + df.intensity.min()).ljust(8, ' '), xy=(df.x.mean() + i, df.y.max()+ 1), size=(10), bbox={"boxstyle": "square", "color": color})