【问题标题】:Plot an matrix with python containing X, Y, Radius, Intensity用 python 绘制一个包含 X、Y、半径、强度的矩阵
【发布时间】:2021-05-22 16:25:05
【问题描述】:

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

【问题讨论】:

    标签: python plot imshow


    【解决方案1】:

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

    【讨论】:

    • 嗨。非常感谢这个解决方案。它看起来正是我需要的。我以前用过 plt.annotate 。我要试试看。
    • 不客气。请确保您接受/支持答案。看到这个:stackoverflow.com/help/someone-answers
    • 你好。尝试您发送的脚本,它返回一个错误:TypeError: annotate() missing 1 required positional argument: 's'。我不太明白为什么。
    • 您好。。对不起,我明白了,语法是 s = ' ' 而不是 text = ' '。可能与python3有关。效果很好。
    • 好。我很高兴它奏效了。你打算接受答案吗?
    猜你喜欢
    • 2011-03-03
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 2020-06-19
    相关资源
    最近更新 更多