如何使用颜色密度制作2D图作为python 3中的第3个参数

时间:2017-07-30 20:41:20

标签: python python-3.x matplotlib plot

我想制作一个图,其中每个点都有x& y值,并且它还有第三个值表示该点的颜色密度。在mathematica中应用我的python代码我能够使用以下代码完成它,但现在我只想使用python(最好使用matlibplot)。

def printMath2DTableMethod():
    print('{', end="")
    for i in range(0, lines, 1):
        print('{', end="")
        for j in range(0, columns, 1):
            f = int(columns * rearrange_.rearrangeMethod(i) + rearrange_.rearrangeMethod(j))
            print('%d' % size[f], end = '')
            if (j < columns - 1):
                print(',', end='')
        if (i < lines - 1):
            print('},')
        else:
            print('}}')

绘图应该看起来与这两个问题的图像相似

How can I make a scatter plot colored by density in matplotlib?

How to plot a density map in python?

它应该在侧面有一个颜色条,密度最大的点应该在其他点的顶部(如果它们重叠)。

此方法生成的数据我将其附加到某个文件,它看起来像:

总共

1,2,4,5,6,2,6 x256列

3,2,4,5,1,6,4

4,2,5,6,1,7,5

总共x256行

可以直接使用代码或通过读取文件中的数据来进行绘图,但我不知道的是如何为x分配值(这是 i 在上面代码的第一个for循环中),到y(在上面代码的第二个for循环中的 j ),尤其是第三个参数,它将显示颜色密度(在上面的代码中是 size [f] ),因为它依赖于 i 和 j

我这些天一直在努力研究和解决它,但没有太大成功,所以任何帮助都会受到高度赞赏。在此先感谢:)

1 个答案:

答案 0 :(得分:0)

以下是您链接的两个图表的示例

import matplotlib.pyplot as plt
import scipy as sp

# scatterplot as link 1
Data = sp.randn(1000,3)
plt.scatter(Data[:,0],Data[:,1],c=Data[:,2],cmap='magma')
plt.colorbar()

enter image description here

# density matrix as link 2
Nbins = 50
M = sp.zeros((Nbins+1,Nbins+1))
xinds = sp.digitize(Data[:,0],sp.linspace(-3,3,Nbins)) # chose limits accordingly
yinds = sp.digitize(Data[:,1],sp.linspace(-3,3,Nbins))


# to account for the highest density drawn over the others
sort_inds = sp.argsort(Data[:,2])[::-1]
Data = Data[sort_inds,:]
xinds = xinds[sort_inds]
yinds = yinds[sort_inds]

for i in range(Data.shape[0]):
    M[xinds[i],yinds[i]] = Data[i,2]

plt.matshow(M,cmap='magma',
            extent=(Data[:,0].min(),Data[:,0].max(),Data[:,1].max(),Data[:,1].min()),
            aspect='equal')
plt.colorbar()

enter image description here