【问题标题】:How do I make a intensity plot with x, y, and z in python? [duplicate]如何在 python 中使用 x、y 和 z 制作强度图? [复制]
【发布时间】:2019-07-31 16:25:51
【问题描述】:

我有一个名为“年龄”的 x 值数组、一个名为“体重”的 y 值数组和一个名为“卡路里”的 z 值数组。我想绘制 x vs y vs 强度。基本上卡路里消耗取决于年龄和体重。

我可以在 matlab 中使用 imagesc 执行此操作,但我需要 Python 帮助

age = [5,5,5,5,5,10,10,10,10,10....40,40,40,40,40],  
weight = [40,50,55,60,65,80,85,90,95,100....170,190,210,250,300]
calories =[ 500,550,560,600,650,1000,1200,1300,1400,1500...2000,2300,2500,3000,5000]

我尝试过plt.pcolormeshplt.imshow,但两个 imshow 都不允许我将 3 个变量作为输入。

我也尝试使用 x,y 数组创建网格网格,但我没有得到正确的强度或轴

x=np.unique(age)
y=np.unique(weight)
X,Y = np.meshgrid(x,y)

Z=calories.reshape(len(y),len(x))

plt.pcolormesh(X,Y,Z)

plt.show()

plt.imshow(age,weight,calories) 

我希望看到 x 轴为年龄、y 轴为体重以及从浅色到深色的颜色条的图像图

【问题讨论】:

  • x,y,z 值的形状是什么?

标签: python matplotlib imshow


【解决方案1】:

您使用的绘图将取决于数据的形状以及您的calories 数组是否是ageweight 的函数。如果calories 是二维的,那么您应该使用plt.contourf()plt.imshow()plt.pcolormesh() 之类的东西。如果您的所有数组都具有相同的形状,您可能需要考虑像 afb 这样的散点图。

例如,使用您的数据子集,您可以获得以下信息:

import matplotlib.pyplot as plt
import numpy as np

age = [5,5,5,5,5,10,10,10,10,10,40,40,40,40,40] 
weight = [40,50,55,60,65,80,85,90,95,100,170,190,210,250,300]
calories =[ 500,550,560,600,650,1000,1200,1300,1400,1500,2000,2300,2500,3000,5000]


fig = plt.figure(figsize=(6,6))
ax = plt.subplot(111)

sc = plt.scatter(age,weight, s = 200, c=calories, cmap=plt.cm.jet)

cbar = fig.colorbar(sc, orientation='horizontal')    

plt.show()

【讨论】:

  • 感谢您的帮助。我还尝试将我的数据导入熊猫数据框并使用 seaborn 热图作为图像。这似乎也有效
  • 你应该知道这显示了完全不同的东西。热图显示您拥有数据的位置的密度,而不是值本身。
【解决方案2】:

这是花哨的数据,但试试这个:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mclr

nx = 38; ny = 18

x = np.linspace(0,nx-1,nx)
y = np.linspace(0,ny-1,ny)

X,Y = np.meshgrid(x, y, indexing='ij')
Z =np.sqrt(X*X + Y*Y) # set a fancy Z function

fig = plt.figure(figsize=(22,11)) 
ax1 = fig.add_subplot(121)
ax1.pcolormesh(X, Y, Z, edgecolors='w',cmap="plasma")
ax1.set_aspect('equal')

【讨论】:

  • 发送!如果它是您接受的答案,那么您可以单击“接受”复选框(它就在赞成/反对投票标志的下方,点击时变为绿色)。所以每个人都知道,不需要更多的答案,这个任务已经结束了。
【解决方案3】:

对于imshow(),水平和垂直坐标以及 rgb 颜色代码组合成一个数组——参数X(参见文档https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.imshow.html 中的描述)。或者,如果您的数据集没有覆盖网格中的每个点,您可以考虑使用散点图,其中每个标记的大小和/或颜色与 calories 成正比。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多