我是python中的新手,我做了一个tkinter界面,询问问题,然后在另一个窗口中绘制图形。
我正在使用熊猫库处理大型csv文件。
我遇到的问题是,在我的图形窗口,我尝试在同一个子图上绘制3个堆叠的直方图。
让我更具体一点,我有3个值,警报值(VA,VI和VR),年值和位置值(名为PK(类型:浮点))。
我需要为每个位置绘制3个堆叠的直方图(按年),并在画布的子图中绘制每个警报值。
我尝试使用matplotlib绘制按位置排序的三个警报值,但我无法弄清楚如何在图表上显示年份。所以我尝试了另一种方法,但它没有完全奏效。
我尝试做一些df.groupby.plot,如果我只绘制一个堆叠的直方图,但是如果我想显示其中的三个,则它可以工作。我成功地绘制了三个不同的堆积直方图,但它只显示了三个值的位置,它们彼此不相邻但相互重叠。那不是我想要的。
有时我没有VI或VR,这就是为什么我试一试/除了它以免它停止我的剧本。
你能帮我解决这个问题吗?
这是我要绘制的df的例子:
g3m['pk']=[1,1,1,2,2,2,4,4,5,5,5,5,5,5,6,6,10,10,10,12,12,12,12,12,12,12,12]
g3m['annee']=[2010,2011,2012,2010,2012,2013,2011,2014,2010,2011,2012,2012,2012,2016,2016,2017,2010,2010,2014,2010,2010,2010,2010,2012,2013,2014,2014]
g3m['class_seuil']=['VA','VA','VA','VA','VA','VA','VA','VA','VA','VA','VA','VI','VR','VI','VI','VA','VI','VI','VR','VA','VA','VI','VI','VA','VI','VR','VA']
g3m['type_mesure']=['MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC','MAC']
这是一个Panda DataFrame 现在这是我在子图中绘图的代码:
这是我的数字的声明:
f = Figure(figsize=(15,8), dpi=100)
f.subplots_adjust(top=0.97,hspace=0.41,left=0.05,bottom=0.08,right=0.91)
a = f.add_subplot(311)
c = f.add_subplot(312)
b = f.add_subplot(313)
以下是我的情节代码:
try:
g3mVa=pa.DataFrame()
g3mVa['pk']=g3m[g3m['class_seuil']=='VA']['pk_decimal_km_m']
g3mVa['annee']=g3m[g3m['class_seuil']=='VA']['annee']
g3mVa['type_mesure']=g3m[g3m['class_seuil']=='VA']['type_mesure']
g3mVa.groupby(['pk','annee']).count().unstack().plot(kind='bar',stacked=True,colormap='Greens',y='type_mesure',grid=True,ax=c,rot='horizontal')
c.hold(True)
except:
pass
try:
g3mVi=pa.DataFrame()
g3mVi['pk']=g3m[g3m['class_seuil']=='VI']['pk_decimal_km']
g3mVi['annee']=g3m[g3m['class_seuil']=='VI']['annee']
g3mVi['type_mesure']=g3m[g3m['class_seuil']=='VI']['type_mesure']
g3mVi.groupby(['pk','annee']).count().unstack().plot(kind='bar',stacked=True,colormap='Oranges',y='type_mesure',grid=True,ax=c,rot='horizontal')
c.hold(True)
except:
pass
try:
g3mVr=pa.DataFrame()
g3mVr['pk']=g3m[g3m['class_seuil']=='VR']['pk_decimal_km_p']
g3mVr['annee']=g3m[g3m['class_seuil']=='VR']['annee']
g3mVr['type_mesure']=g3m[g3m['class_seuil']=='VR']['type_mesure']
g3mVr.groupby(['pk','annee']).count().unstack().plot(kind='bar',stacked=True,y='type_mesure',colormap='Reds',grid=True,ax=c,rot='horizontal')
c.hold(True)
except:
pass
你能帮助我吗?
是否可以按照我想要的方式绘制它?
答案 0 :(得分:1)
很抱歉,我在代码中出错,g3m['pk_decimal_km_m']
,g3m['pk_decimal_km']
和g3m['pk_decimal_km_p']
向g3m['pk']
举报。
此错误是由于我所做的所有尝试。
这是我的代码更正。
try:
g3mVa=pa.DataFrame()
g3mVa['pk']=g3m[g3m['class_seuil']=='VA']['pk']
g3mVa['annee']=g3m[g3m['class_seuil']=='VA']['annee']
g3mVa['type_mesure']=g3m[g3m['class_seuil']=='VA']['type_mesure']
g3mVa.groupby(['pk','annee']).count().unstack().plot(kind='bar',stacked=True,colormap='Greens',y='type_mesure',grid=True,ax=c,rot='horizontal')
c.hold(True)
except:
pass
try:
g3mVi=pa.DataFrame()
g3mVi['pk']=g3m[g3m['class_seuil']=='VI']['pk']
g3mVi['annee']=g3m[g3m['class_seuil']=='VI']['annee']
g3mVi['type_mesure']=g3m[g3m['class_seuil']=='VI']['type_mesure']
g3mVi.groupby(['pk','annee']).count().unstack().plot(kind='bar',stacked=True,colormap='Oranges',y='type_mesure',grid=True,ax=c,rot='horizontal')
c.hold(True)
except:
pass
try:
g3mVr=pa.DataFrame()
g3mVr['pk']=g3m[g3m['class_seuil']=='VR']['pk']
g3mVr['annee']=g3m[g3m['class_seuil']=='VR']['annee']
g3mVr['type_mesure']=g3m[g3m['class_seuil']=='VR']['type_mesure']
g3mVr.groupby(['pk','annee']).count().unstack().plot(kind='bar',stacked=True,y='type_mesure',colormap='Reds',grid=True,ax=c,rot='horizontal')
c.hold(True)
except:
pass