我想制作一个图,其中每个点都有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 。
我这些天一直在努力研究和解决它,但没有太大成功,所以任何帮助都会受到高度赞赏。在此先感谢:)
答案 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()
# 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()