Python,tkinter,在同一子图中绘制 3 个堆叠分组直方图

标签 python matplotlib tkinter histogram stacked

我是 python 的新手,我做了一个 tkinter 界面,在那里提出问题,然后它在另一个窗口中绘制图形。

我正在使用 panda 库处理大型 csv 文件。

我遇到的问题是,在我的图形窗口中,我尝试在同一个子图上绘制 3 个堆叠直方图。

让我更具体一点,我有 3 个值,警报值(VA、VI 和 VR)、年份值和位置值(名为 PK(类型:float))。

我需要在 Canvas 的子图中为每个位置和每个警报值绘制 3 个彼此相邻的堆叠直方图(按年)。

我尝试使用 matplotlib 绘制按位置排序的三个警报值,但我不知道如何在图表上显示年份。所以我尝试了另一种方法,但它并不完全有效。

我尝试做一些 df.groupby.plot,如果我只绘制一个堆叠直方图,它会起作用,但如果我想显示它们中的三个,则不会。我成功地绘制了三个不同的堆叠直方图,但它只显示了三个值所在的位置,它们不是彼此相邻而是彼此重叠。这不是我想要的。

有时我没有 VI 或 VR,这就是我尝试/异常(exception)的原因,这样它就不会停止我的脚本。

你能帮我解决这个问题吗?

这是我要绘制的 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']

这是一个 Pandas 数据框。
现在这是我在子图中绘制的代码:

这是我的数字声明:

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

你能帮帮我吗?

是否可以按照我想要的方式绘制它?

最佳答案

抱歉,我在代码中弄错了,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

关于Python,tkinter,在同一子图中绘制 3 个堆叠分组直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44162860/

相关文章:

python - 如何获取光标前的字符? Tkinter

python - python-在默认程序中打开wav文件(Linux)

python - 如何使用 pyinstaller 将多个 .py 文件构建为单个可执行文件?

python - Elasticsearch - match_phrase 查询按 int 排序

python - 在 python 中绘制 3D 零均值、单位方差高斯会产生意想不到的结果

python - 将第二个数据系列添加到 Matplotlib 中的子图

python - matplotlib 不使用 pyplot.show() 使用 qt4agg 后端打开绘图并且找不到 sip

python - 从输入框中获取搜索词

python - 获取 numpy 以警告整数溢出

python - 添加两个不同维度的矩阵