无法通过散点图和线图的数据绘制Pandas组

时间:2017-10-04 03:15:37

标签: python pandas matplotlib plot pandas-groupby

我正在尝试将Table1中的分组系列绘制为散点图,将表2中的数据帧分组为线图,将它们全部放在一个图表中。我没有成功地将它们一起绘制。但是,我观察到Table2“Days”属性没有绘制所有它的整个值,因此,我有垂直线图来表示如下的折线图:

CHART1: this

我正在看图表是这样的:

CHART2:

enter image description here我尝试做的一些事情是取消堆叠并设置新索引,但仍然被证明是不成功的。任何建议或帮助将不胜感激。感谢。

代码:

grouped = df.groupby('id')
fig,ax = plt.subplots(1,1,figsize=(8,6))    
for k,grp in grouped:
    grp.set_index('Days', inplace=True)
    ax = grp.plot.scatter(x='Days', y='Values',color="black")
    grp.plot(y=["curve1","curve2","curve3"], ax=ax, title="One \ 
    scatter and 3 line plots",alpha=0.5)
    ax.set_xlabel("Days", fontsize=15)
    ax.set_ylabel("Values", fontsize=15)
    fig.tight_layout()
    plt.autoscale(enable=True, axis='y')
plt.show()
plt.close()

TABLE1:

     id     Days    Values
0   101     17.0    3.764706
1   101     24.0    4.000000
2   101     38.0    1.142857
3   101     51.0    0.461538
12  102     31.0    4.258065
13  102     61.0    4.166667
14  102     92.0    4.709677
15  102     123.0   3.516129
16  102     153.0   3.233333
17  102     171.0   10.277778
18  102     202.0   3.193548
19  102     217.0   6.400000
20  102     235.0   1.000000
21  102     246.0   13.545455
22  102     270.0   0.791667
23  102     288.0   5.333333
24  103     31.0    3.096774
25  103     61.0    3.166667
26  103     92.0    3.354839
28  103     103.0   3.636364
29  103     114.0   2.727273
32  103     145.0   6.870968
33  103     175.0   4.200000
34  103     190.0   1.266667
35  103     210.0   4.550000
36  104     31.0    11.677419
37  104     61.0    12.066667
38  104     92.0    11.935484
39  104     123.0   12.354839
40  104     125.0   246.000000
... ... ... ...
455873  125     259.0   4.612903
455874  125     281.0   5.727273
455875  125     309.0   9.750000
455876  125     340.0   5.935484
455877  126     31.0    2.935484
455878  126     61.0    1.800000
455879  126     92.0    3.709677
455880  126     122.0   1.500000
455881  126     153.0   5.645161
455882  126     184.0   2.903226
455883  126     215.0   2.870968
455884  126     245.0   3.966667
455885  126     273.0   5.607143
455886  126     303.0   3.533333
455887  126     334.0   4.129032
455888  126     365.0   7.064516
455889  127     31.0    0.193548
455890  127     61.0    0.366667
455891  127     92.0    0.258065
455892  127     122.0   0.266667
455893  127     153.0   2.903226
455894  127     183.0   3.366667
455895  127     214.0   1.354839
455896  127     245.0   2.064516
455897  128     276.0   0.548387
455898  128     304.0   0.964286
455899  128     334.0   1.133333
455900  128     365.0   2.000000
455913  129     31.0    4.129032
455914  129     61.0    4.10000

TABLE2:

    id            curve1         curve2      curve3     Days
0   101         3.762914    3.730533    3.762762    1.000000
1   101         3.762908    3.730441    3.762756    1.003222
2   101         3.762903    3.730350    3.762749    1.006444
3   101         3.762897    3.730258    3.762743    1.009666
12  102         4.255960    4.218177    4.255781    1.038665
13  102         4.255953    4.218074    4.255774    1.041887
14  102         4.255946    4.217972    4.255767    1.045109
15  102         4.255940    4.217870    4.255760    1.048331
16  103         3.095224    3.067467    3.095093    1.051554
17  103         3.095220    3.067393    3.095088    1.054776
18  103         3.095215    3.067319    3.095082    1.057998
19  103         3.095210    3.067245    3.095077    1.061220
20  103         3.095205    3.067171    3.095072    1.064442
21  103         3.095201    3.067097    3.095067    1.067664
22  103         3.095196    3.067024    3.095062    1.070886
23  103         3.095191    3.066950    3.095057    1.074108
24  104         3.095186    3.066876    3.095052    1.077330
25  104         11.671414   11.564402   11.670904   1.080552
26  104         11.671396   11.564125   11.670885   1.083775
28  104         11.671360   11.563572   11.670846   1.090219
29  104         11.671342   11.563296   11.670826   1.093441
32  104         11.671289   11.562468   11.670768   1.103107
33  104         11.671271   11.562193   11.670749   1.106329
34  104         11.671253   11.561918   11.670729   1.109551
35  104         11.671235   11.561644   11.670710   1.112773
36  105         11.671217   11.561369   11.670691   1.115996
37  105          3.901147   3.864344    3.900970    1.119218
38  105          3.901141   3.864252    3.900964    1.122440
39  105          3.901135   3.864161    3.900957    1.125662
40  105          3.901129   3.864070    3.900951    1.128884
... ... ... ... ... ...
455873  126     25.476410   43.694862   29.152562   1469.867894
455874  126     25.476371   43.694860   29.152534   1469.871116
455875  126     31.540981   54.096432   36.092270   1469.874338
455876  126     31.540932   54.096429   36.092236   1469.877560
455877  127     31.540884   54.096426   36.092202   1469.880782
455878  127     31.540835   54.096423   36.092168   1469.884004
455879  127     31.540787   54.096420   36.092134   1469.887227
455880  127     470.699660  807.310367  538.622101  1469.890449
455881  127     470.698938  807.310323  538.621591  1469.893671
455882  127     470.698216  807.310280  538.621081  1469.896893
455883  127     470.697494  807.310236  538.620572  1469.900115
455884  127     470.696772  807.310192  538.620062  1469.903337
455885  127     32.606000   55.923891   37.311189   1469.906559
455886  127     32.605950   55.923888   37.311153   1469.909781
455887  127     32.605900   55.923885   37.311118   1469.913003
455888  127     32.605850   55.923882   37.311083   1469.916225
455889  128     32.605800   55.923879   37.311047   1469.919448
455890  128     35.066803   60.144961   40.127214   1469.922670
455891  128     35.066749   60.144958   40.127176   1469.925892
455892  128     35.066696   60.144954   40.127138   1469.929114
455893  128     35.066642   60.144951   40.127100   1469.932336
455894  128     35.066588   60.144948   40.127062   1469.935558
455895  128     64.137502   110.006494  73.393256   1469.938780
455896  128     64.137403   110.006488  73.393186   1469.942002
455897  128     64.137305   110.006482  73.393117   1469.945224
455898  128     64.137207   110.006476  73.393047   1469.948446
455899  128     64.137108   110.006470  73.392978   1469.951669
455900  128     10.082793   17.293797   11.537886   1469.954891
455913  129     36.850407   63.206268   42.168777   1469.996778
455914  129     36.850351   63.206264   42.168737   1470.000000

1 个答案:

答案 0 :(得分:0)

所以看起来你的for循环中只有1个id值的图。在for循环中,您创建一个新图像,然后将该id值中的数据绘制到该图上,然后在循环结束时显示它。当您遍历该循环时,该数字基本上会被覆盖。你可以通过在for循环上方移动你的数字声明然后在你的循环下面移动plt.show()来解决你的问题,这样所有数据都会被放在1个数字上并在循环结束后显示。

修改

我制作了一些随机数据并使用大部分代码绘制它并且它可以正常工作。当您在循环中包含图形声明时,它会创建大量图像。您可能还会看到由于命名而导致的问题,然后重命名“ax”,这可能会增加您的绘图数量。如果使用plt.show(),也没有理由包含plt.close()。

import numpy as np
from matplotlib import pyplot as plt

x= np.arange(0,10,1)
y = x**2-3*x


fig,ax = plt.subplots(1,1,figsize=(8,6))    
for f in np.arange(0,10,1):
    ax.plot(x,y+f)
    ax.set_xlabel("Days", fontsize=15)
    ax.set_ylabel("Values", fontsize=15)
    fig.tight_layout()
    plt.autoscale(enable=True, axis='y')    

plt.show()

enter image description here