使用';实际值';在python的imshow中
我想使用使用';实际值';在python的imshow中,python,pandas,matplotlib,imshow,Python,Pandas,Matplotlib,Imshow,我想使用imshow()模块绘制一张热图,但是我很难让它以我想要的方式工作。我的数据存储在数据框中,数据框由100-1000列组成,每列有201行。每列中的第一行是我希望在x轴上使用的值,而剩余的200行是要在imshow绘图中使用的数据点 以下是我的数据帧的结构(值最终从0.0000增加): 第一列只是一个介于0-200之间的计数器-我通常在加载数据时删除它,因为它与行索引相同。我目前的问题是在绘图中,当我使用imshow()绘制我的图形时,它使用行和列索引作为轴刻度。这对于Y轴很好,因为它
imshow()
模块绘制一张热图,但是我很难让它以我想要的方式工作。我的数据存储在数据框中,数据框由100-1000列组成,每列有201行。每列中的第一行是我希望在x轴上使用的值,而剩余的200行是要在imshow
绘图中使用的数据点
以下是我的数据帧的结构(值最终从0.0000增加):
第一列只是一个介于0-200之间的计数器-我通常在加载数据时删除它,因为它与行索引相同。我目前的问题是在绘图中,当我使用imshow()
绘制我的图形时,它使用行和列索引作为轴刻度。这对于Y轴很好,因为它与第0列中的值相同;问题在于X轴的索引值在1-1000之间,而我想用X的实际值(即381.3、393.3、200.6等)将其绘制在轴上。我怎样才能做到呢
目前我得到的是:
以下是我目前使用的代码:
rawData = pd.read_csv('heme_mpc_drift2.csv', delimiter=',')
rawData_drop=rawData.drop(rawData[[101,102]], axis=1, inplace=False)
xaxis = rawData_drop.ix[0,1:]
yaxis = rawData_drop.ix[1:,0]
plt.figure(figsize=[10,5])
plt.ylim([200,0])
plt.imshow(rawData_drop, cmap=cmaps.plasma, interpolation="none", aspect='auto', vmax=500000)
plt.colorbar()
plt.show()
我希望在imshow()
中的某个地方使用xaxis
和yaxis
,但是我还没有弄清楚在哪里。我曾尝试在imshow()
中使用extent
,但它仅将1-100范围内的值转换为我给定的任何新范围
如果有任何建议,我将不胜感激
编辑1:
添加了一个我正在寻找的示例:
它与
imshow
无关,只需在plt
对象上调用xticks
plt.xticks(range(len(xaxis)), xaxis, size='small')
更新
为了使您的x轴也与值成比例,同时每个观察值只是一个点,我建议根本不要使用imshow。您正在查找的图实际上是一个散点图,因为与整个图像相比,您的数据点非常少。Imshow通常用于密集绘图
plt.scatter
一旦输入x值,显然会自行缩放。您也可以将其设置为黑色背景等。事实上,您包含的示例看起来像是带有像素宽标记的散点图。谢谢您的回复。也许我在问题中没有说清楚。我不仅希望在x轴上有记号标签,还希望在值w.r.t x值之间有间隔。目前,这些值是相邻绘制的(1个单位的间隔),而我希望它们取实际位置(即381.3393.3200.6等)。我不认为可以将其绘制为plt。散射
,因为我必须使用1-200(第一列)之间的值作为y轴,使用1-1500(第一行)之间的值作为我的x轴;然后,绘图将丢失有关x,y
值的强度的所有信息。我想它不一定非得是imshow
,但也可以是hist2d
或tourf
绘图。在散点中有x、y和颜色,因此有3个值要处理,方法与这里完全相同。