【问题标题】:Creating a Colourmap for a monte carlo simulation为蒙特卡罗模拟创建颜色图
【发布时间】:2021-12-26 16:32:22
【问题描述】:

我正在创建一个蒙特卡洛模拟,以找出箔在特定厚度和特定角度的总荧光。

如果我已经针对许多厚度和许多角度运行程序,我将在一个大数组中拥有一堆元素。

说出来

store_array = [thickness,angle,photonscounted]

因此,对于数组中的任何值,它都会给出所执行计算的厚度和角度,以及其结果。

如何绘制直方图,其中轴是厚度和角度,给定坐标的颜色值是该组合计数的光子?

【问题讨论】:

    标签: python


    【解决方案1】:

    对我来说,这听起来像是 xy 散点图。如果是这种情况,请参阅我的示例(使用一些虚拟值)。 xyc 中的每一个都是与您的厚度、角度、光子数相对应的阵列。如果您想使用不同的颜色,您可以从here 获取另一个颜色图或创建您自己的颜色图。

    import numpy as np
    import matplotlib.pyplot as plt
    
    
    fig, ax = plt.subplots()
    N = 100
    x = np.random.rand(N)            # generate dummy thickness values (0-1)
    y = np.random.randint(5, 90, N)  # generate dummy angles (5-90)
    c = np.array(x*y)                # dummy values for photon count
    
    scatter = ax.scatter(x, y, c=c, cmap='viridis')
    plt.xlabel('thickness')
    plt.ylabel('angle')
    
    plt.show()
    

    【讨论】:

    • 是的,这更符合我的要求!
    • 请记得标记answer as accepted
    • 您确实希望确保使用的颜色图在感知上是一致的顺序,以避免产生视觉伪影。有关此类颜色图,请参阅 cmoceanCMasher
    【解决方案2】:

    如何绘制直方图,其中轴是厚度和角度,给定坐标的颜色值是该组合计数的光子?

    你的意思是a three dimensional histogram

    还是two dimensional scatter plot with a third dimension encoded by color

    在这两种情况下,与我们将颜色值编码到软件中的方式相比,人类以高度非线性的方式感知颜色。

    一个should probably avoid the Rainbow Map,因为尽管它承诺将您的光子计数映射到尽可能广泛的颜色值范围,但人们无法区分数值上不同但感知上相似的颜色,尤其是在光谱的绿色和黄色部分。

    从红色到绿色的热图效果更好,但最常见的色盲形式会妨碍对红色和绿色的辨别。

    除了完全失明的人之外,灰度似乎更容易被所有人使用,只是您选择的背景会扭曲颜色编码。如果您选择白色背景,photonscounted 的白色值可能会与背景无形地融合在一起,而所有比 50% 灰色更暗的东西都会看起来是黑色的。同样,如果您选择黑色,则只有较亮的点可见,但与黑色相比,所有点都将显示为白色。灰色调停了这个问题,但它突出了极端,模糊了平均值。

    【讨论】:

    • 是的,一个二维散点图,用颜色编码的第三维正是我想要的,非常感谢!这些也是关于如何对其进行颜色缩放的一些很好的说明。由于我试图在我的论文中展示的要点是您讨论的 Gray 选项似乎最好的最佳值。谢谢! :-)
    • 您还可以考虑字形大小或半透明度来编码光子计数。你应该^白的回答。看起来他/她做了所有的工作。 :)
    猜你喜欢
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2012-04-26
    • 2021-08-23
    • 2015-02-10
    相关资源
    最近更新 更多