【问题标题】:Matplotlib: different color for every point of line plotMatplotlib:线图的每个点都有不同的颜色
【发布时间】:2017-07-26 05:03:56
【问题描述】:

我正在尝试制作如下图所示的情节(source of image): 我说的是右侧面板中的情节,尽管两个面板之间存在一些相关性:颜色条。

只是为了让你知道这是关于什么的:对于 V 的每个值,我找到依赖于 V 的 NxN 矩阵的所有 N 个特征值和特征向量。特征值(这是一个能量)标记为 E,并在右侧面板中绘制为V 的函数。颜色条上的值(我们称之为 IPR)是根据特征向量计算的,并定义右侧面板中点的颜色。所以你会看到颜色和值 E 是相关的,这就是为什么这样的情节非常好。对于你们中间的物理学家来说,这是一个能带结构,它是某个势强度 V 的函数,而 IPR 说明了哈密顿量相应本征态的局域化程度。

现在我的问题是如何以一种很好/有效的方式在 matplotlib/pyplot 中生成这样的图。当然可以想到一种“非pythonian”的方式(首先计算所有V的数据,找到IPR的最小/最大值来定义IPR和颜色之间的双射,然后经过两个循环(一个用于所有V的值,一个用于固定 V 处的所有 N 个特征值/-向量),并使用一些 matplotlib 方法为绘图的每个点获取颜色(我假设有这样的方法,即使我无法使用 Google 找到一个))。如果您仔细观察,您可能会猜到这正是图像中所做的。如果这是你们中的一个人能想到的唯一方法,如果有人能让我知道 matplotlib 方法是什么,我会很高兴。 最好的解决方案(出于我的目的)如果不是制作点,而是可以制作 N 条线并且仍然在其上放置一个色标,这样您仍然可以识别图中的波段(在图像中您会看到垂直的点线,但我更喜欢通常线图中的“垂直”线)但我知道这可能是不可能的。

提前致谢!

【问题讨论】:

    标签: python matplotlib colors


    【解决方案1】:

    假设您已经计算了VEIPR 的值,您可以通过使用IPR 作为颜色绘制EV 来生成绘图。

    查看对上一个问题的非常详细的回答:https://stackoverflow.com/a/17682382/1356000

    【讨论】:

    • 谢谢!尽管这不是上面描述的“最佳解决方案”,但如果另外将点的线宽lw 设置为零(类似于plt.scatter(V*np.ones(E.shape[0]), E, c=IPR, cmap='afmhot', lw=0)),它就可以正常工作。
    【解决方案2】:

    如果我在计算后理解正确,您最终会得到这样的表格中的数据

    Eig.Val.Nr|  V    |  E      |  IPR   |
    ----------+-------+---------+--------+
    0.000     | 0.000 |  -1.000 |  0.000 |
    0.000     | 0.092 |  -1.010 |  0.075 |
    0.000     | 0.184 |  -1.021 |  0.075 |
    0.000     | 0.276 |  -1.031 |  0.075 |
    .....     | ..... |  ...... |  ..... |
    

    然后可以通过绘制重新调整的 IPR 值的图像和列VE 的散点图来重现该图,其中IPR 设置为颜色。

    import matplotlib.pyplot as plt
    import numpy as np
    
    eig, v, e, ipr = np.loadtxt("output.txt", unpack=True)
    IPR = ipr.reshape(500,50)
    
    fig, axes = plt.subplots(ncols=2)
    im = axes[0].imshow(IPR , cmap="magma", origin="lower")
    axes[0].set_aspect("auto")
    plt.colorbar(im, ax=axes[0])
    
    axes[1].scatter(v, e, c=ipr,s = 0.06, marker=".", cmap="magma", )
    
    plt.show()
    

    【讨论】:

    • 谢谢,这很好用。只是想知道你从哪里得到数字数据:D
    • IPR值是从问题中的图片中提取的,能量是任意选择的。
    猜你喜欢
    • 2017-01-17
    • 2019-05-25
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2017-05-19
    • 2012-07-24
    • 1970-01-01
    相关资源
    最近更新 更多