Matplotlib:每个点线图

时间:2017-03-06 10:54:06

标签: python matplotlib colors

我试图制作如下图所示的情节(source of image):figure 我正在谈论右侧面板中的情节,即使两个面板之间存在某种相关性:颜色条。

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

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

提前谢谢!

2 个答案:

答案 0 :(得分:1)

假设您已经计算了VEIPR的值,只需使用{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值的图像以及列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()

enter image description here