我试图制作如下图所示的情节(source of image): 我正在谈论右侧面板中的情节,即使两个面板之间存在某种相关性:颜色条。
只是让你知道这是什么:对于V的每个值,我找到NxN矩阵的所有N个特征值和特征向量,它们取决于V.特征值(这是一个能量)标记为E,并在右侧面板中绘制为V的函数。颜色条上的值(让它称之为IPR)是根据特征向量计算的,并定义右侧面板中点的颜色。所以你看到颜色和值E是相关的,这就是为什么这样的情节非常好。对于你们中间的物理学家来说,这是一个带结构,它是一些潜在强度V的函数,而知识产权则说明了汉密尔顿主义相应本征态的定位程度。
现在我的问题是我如何以一种好的/有效的方式在matplotlib / pyplot中生成这样的情节。当然,人们可以想到一个非蟒蛇"方式(首先计算所有V的数据,找到IPR的最小值/最大值以定义IPR和颜色之间的双射,然后经过两个循环(一个用于V的所有值,一个用于所有N个特征值/ - 在固定V处的矢量)并使用一些matplotlib方法为绘图的每个点获取颜色(我假设有这样的方法,即使我找不到使用谷歌的方法))。如果仔细观察,你可能会猜到这正是图像中所做的。如果这是你们其中一个人想到的唯一方法,如果有人让我知道matplotlib方法是什么,我会很高兴。 最好的解决方案(对于我的目的)是,如果不是制作点,可以制作N行并且仍然在其上设置颜色比例,这样您仍然可以识别图中的波段(在图像中)你会看到垂直的点线,但我喜欢"垂直"线条与通常的线条图一样)但我明白这可能是不可能的。
提前谢谢!
答案 0 :(得分:1)
假设您已经计算了V
,E
和IPR
的值,只需使用{E
vs V
绘图即可生成绘图。 {1}}作为一种颜色。
请看上一个问题的非常详细的答案:https://stackoverflow.com/a/17682382/1356000
答案 1 :(得分:1)
如果我在计算后理解正确,你会得到像这样的表格中的数据
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值的图像以及列V
和E
的分散来再现该图,其中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()