Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib stackplot中未对齐的箱子_Python_Matplotlib - Fatal编程技术网

Python matplotlib stackplot中未对齐的箱子

Python matplotlib stackplot中未对齐的箱子,python,matplotlib,Python,Matplotlib,我正在尝试绘制一个堆栈图,其中的存储箱似乎没有与数据正确对齐。我所画的是,当你从中心向外辐射时,球体中物体的比例。我在这张图的最右边部分看到了这个错误。浅蓝色应为一个宽度的垂直柱。相反,深蓝色似乎向浅蓝色部分倾斜 我认为问题在于数据的间隔不均匀。例如:半径为300时,我可能有一个特定的比例值。然后在半径330处,我可能会有另一个,然后在400处有下一个。 我原以为stackplot可以解决这个问题,但似乎不行。我有没有办法整理这些数据列 源代码: def phaseProp(rad,phase

我正在尝试绘制一个堆栈图,其中的存储箱似乎没有与数据正确对齐。我所画的是,当你从中心向外辐射时,球体中物体的比例。我在这张图的最右边部分看到了这个错误。浅蓝色应为一个宽度的垂直柱。相反,深蓝色似乎向浅蓝色部分倾斜

我认为问题在于数据的间隔不均匀。例如:半径为300时,我可能有一个特定的比例值。然后在半径330处,我可能会有另一个,然后在400处有下一个。

我原以为stackplot可以解决这个问题,但似乎不行。我有没有办法整理这些数据列

源代码:

def phaseProp(rad,phase):

#phaseLabel = np.array(['coe','en','fs','olv','maj','perov','ppv','ring','wad','per','wust','st'])
#print phaseLabel
rad = rad/1000.
phase = phase/100.
print phase[:,:]
#print phase[:,0]
fig, ax = plt.subplots(figsize = (15,10))
ax.stackplot(rad[:],phase[:,0],phase[:,1],phase[:,2],phase[:,3],phase[:,4],   \
               phase[:,5],phase[:,6],phase[:,7],phase[:,8],                   \
               phase[:,9] ,phase[:,10],phase[:,11],phase[:,12],                           \
               colors = ['gainsboro','gold','lightsage','darkorange','tomato','indianred',\
                       'darksage','sage','palevioletred','darkgrey','dodgerblue' ,'mediumblue' ,'darkblue' ])        

plt.legend([mpatches.Patch(color='gainsboro'),  
            mpatches.Patch(color='gold'), 
            mpatches.Patch(color='lightsage'),
            mpatches.Patch(color='darkorange'),
            mpatches.Patch(color='tomato'),
            mpatches.Patch(color='indianred'),
            mpatches.Patch(color='darksage'),
            mpatches.Patch(color='sage'),
            mpatches.Patch(color='palevioletred'),
            mpatches.Patch(color='darkgrey'),
            mpatches.Patch(color='dodgerblue'),
            mpatches.Patch(color='mediumblue'),
            mpatches.Patch(color='darkblue')],

            ['coe','opx','ol','gt','pv','ppv','rw','wad','fp','st','h2o','iceIh','iceVII'],\
            loc='upper center', bbox_to_anchor=(0.5, 1.127),fancybox=True, shadow=True, ncol=5,fontsize='20')

plt.ylabel(r'Phase Proportion',fontsize = 34)
plt.xlabel(r'Radius (km)',fontsize = 34)
plt.tick_params(axis='both', which='both', labelsize=32)

plt.xlim(rad[noc+1],rad[nr])
plt.ylim(0,1.0)
#ax.stackplot(rad,phase)
#plt.gca().invert_xaxis()
plt.show()

我已经看过你的问题了,我认为问题在于H20线的最后两个点是(7100,0)和(7150,1),因此,正如你所看到的,它只是向上倾斜

但是,添加一个附加点以生成方形边非常简单:

rad_amended = np.hstack((rad,rad[-1])) #extend the array by 1
rad_amended[-2] = rad[-2] +1 #alter the penultimate value
phase_amended = np.vstack((phase,phase[-1])) #extend the Y values
nr+=1 #extend the range of the x-axis
phaseProp(rad_amended,phase_amended)

这一原则可以扩展到整个数据集,并为每个区域提供方形边,但我假设您对图的其余部分感到满意?

您能否分享处理这一问题的代码部分,如果可能,还可以分享原始数据。添加了一些代码。数据只是一个350x13numpy数组。13个“列”的值范围为0到100。如你所见,我将其标准化为1。我使用这个图已经有一段时间了,只注意到添加了最右边部分的错误。相位阵列的最后50行应全部为0,一列为1。因此,它们应显示为垂直列。他们显然没有。谢谢你花时间帮忙。谢谢。我现在了解了stackplot的工作原理。随后的值彼此线性连接。不幸的是,这不是我真正想要的。我需要每个垃圾箱彼此独立。stackplot中是否有可能描述数据的论点?正如我在回答中所说,你可以在handroski中这样做。但最终会得到一个堆叠的条形图,尽管条形图的宽度是可变的。那可以接受吗?哦,对了,我没看到你提到那件事。我认为图表会变得平滑,不像通常的直方图那样粗糙。不过,在看到它之前我还不确定。我正在考虑使用一个堆叠的柱状图,并只是传递一个箱子大小的宽度列表。我假设这是可能的。你的例子让我有点困惑,这就是为什么我建议将上述想法作为解决方案。不用担心,让我知道你是如何处理直方图的。我没有检查过,但是你可能有可变的宽度,这比扩展我上面的建议要好得多。这实际上取决于如何最好地可视化数据,然后很容易找到解决方案。让我们知道你进展如何。