首页 > 解决方案 > 用 python 绘制一个包含 X、Y、半径、强度的矩阵

问题描述

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

标签: pythonplotimshow

解决方案


通常,您会为此类数据使用散点图。但是,我发现如果我将每个点绘制为注释标记,我可以最大程度地控制标记的大小和颜色,这正是您解决此问题所需要的。假设您在 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})

在此处输入图像描述


推荐阅读