Matplotlib:将一组散点图数据放到fron

2024-09-30 18:26:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一系列带有红色和蓝色标记的子图,我对红色标记最感兴趣,因此希望将它们放在图的前面:

enter image description here

数据结构如下:

            SzT     Pcp     Pcp_3day    Pcp_7day    Pcp_10day   Pcp_14day   Pcp_21day   Pcp_28day
date        
2017-12-04  0.0     8.382   19.304      21.082      40.132      40.132      42.418      71.374
2017-12-05  0.0     12.192  20.574      33.020      42.164      52.324      52.578      81.534
2017-12-06  0.0     1.016   21.590      33.020      34.290      53.340      53.594      82.550
2017-12-07  0.0     12.700  25.908      45.466      46.990      66.040      66.040      95.250
2017-12-08  0.0     5.080   18.796      50.292      51.816      71.120      71.120      88.900

颜色由每个数据点所属的“SzT”值决定,即1或0(尽管在上面只显示“0”)。我用下面的代码构建了这个:

^{pr2}$

我在别处找不到任何有用的信息。有什么想法吗?在

谢谢!在

更新:很抱歉原始结构不好,我已经添加了以上数据的结构供参考。在


Tags: 数据代码标记信息数据结构date颜色结构
2条回答

一开始,如果不知道数据帧中数据的结构,就很难说出具体的东西,所以请考虑发布例如RGDFT8mm.head()

也就是说,我至少从你的代码中看到,你在一个数据帧中混合了红色和蓝色的数据,而没有在散点图之前对其进行分组。因此,一个散射命令包含两种颜色,因此无法在前景中获得一种颜色。
如果重新构造,使每个散点命令只打印一种颜色,则每个散点都将绘制在前一种颜色之上,此外,您还可以根据自己的意愿使用zorderkwarg来定义每个数据集的层。在

对于分组,您可以使用类似RGDFT8mm.groupby('SzT')-但是,为了从这里给出有用的提示,我宁愿等待确切地知道您的数据帧结构。
但我的第一个猜测是:

for grpname, grpdata in RGDFT8mm.groupby('SzT'):
    ax1.scatter(grpdata['Pcp'], grpdata['Pcp_3day'])
    ax2.scatter(grpdata['Pcp'], grpdata['Pcp_7day'])
    ax3.scatter(grpdata['Pcp'], grpdata['Pcp_14day'])
    ax4.scatter(grpdata['Pcp'], grpdata['Pcp_28day'])

编辑 澄清示例

^{pr2}$

enter image description here


…为了减少打印legend的次数,可以在所有轴上循环

for a in axs.flatten():
    a.legend()

在绘制所有子图之后。在

然而,与我的例子相比,你的图例都是相同的,因此一个图例代表整个图形会更好。只是为了这个而已

fig.legend()

可修改的参数相同,如轴图例。在

只需设置散射点的alpha。类似下面的代码。当然,您可以使用alpha值。在

colors = {0 : (0, 0, 1, 0.3),
          1 : (1, 0, 0, 1.0)}


fig = plt.figure(figsize=(20,10))
ax = fig.add_subplot(111)
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(223)
ax4 = fig.add_subplot(224)

c = [colors[i] for i in RGDFT8mm['SzT']]
m = [marker[i] for i in RGDFT8mm['SzT']]

ax1.scatter(RGDFT8mm['Pcp'], RGDFT8mm['Pcp_3day'], c=c)
ax2.scatter(RGDFT8mm['Pcp'], RGDFT8mm['Pcp_7day'], c=c)
ax3.scatter(RGDFT8mm['Pcp'], RGDFT8mm['Pcp_14day'], c=c)
ax4.scatter(RGDFT8mm['Pcp'], RGDFT8mm['Pcp_28day'], c=c)

ax.set_title('Daily Rainfall vs antecedent rainfall from Rain Gauges 2001-2017')
ax.set_xlabel('Daily Rainfall (mm)')
ax.set_ylabel('Antecedent rainfall (mm)')
ax.set_yticklabels([])
ax.set_xticklabels([])

ax1.set_title('3 Day')
ax2.set_title('7 Day')
ax3.set_title('14 Day')
ax4.set_title('28 Day')

还有一个建议:使用plt.子批次()并在打印多个绘图时压缩。我觉得这很好也很有帮助。检查this

相关问题 更多 >