小编SHV*_*_la的帖子

Matplotlib:将一组散点图数据放在前面

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

在此输入图像描述

数据结构是这样的:

            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
Run Code Online (Sandbox Code Playgroud)

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

colors = {0 : 'b',
          1 : 'r'}


fig = plt.figure(figsize=(20,10))
ax = fig.add_subplot(111)
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 …
Run Code Online (Sandbox Code Playgroud)

python scatter matplotlib

6
推荐指数
1
解决办法
9427
查看次数

有没有一种方法可以将包含事件持续时间的日期索引数据框转换为显示每天事件的二进制数据数据框?

对于这个措辞不佳的问题,我深表歉意,但是将它放在一行中是很可闻的。

我有一个日期索引的数据框,其中包含与事件持续时间相关的数据,如下所示:

Date           Duration
12-01-2010     5
04-02-2010     1
14-02-2010     241
23-12-2010     6
Run Code Online (Sandbox Code Playgroud)

我想将其转换为一个数据索引,该索引每日索引,包含二进制数据,该数据显示在指定日期是否发生了事件。例如,对于上面确定的持续5天的第一个事件:

Date           Event
12-01-2010     1
13-01-2010     1
14-01-2010     1
15-01-2010     1
16-01-2010     1
17-01-2010     0
18-01-2010     0
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢

python pandas

6
推荐指数
1
解决办法
47
查看次数

Matplotlib:TypeError:'AxesSubplot'对象不可下标

我正在尝试对包含在两个数据帧df1和df2中的变量'x'进行简单的箱形图绘制。为此,我使用以下代码:

fig, axs = plt.subplots()
axs[0, 0].boxplot([df1['x'], df2['x']])
plt.show();
Run Code Online (Sandbox Code Playgroud)

但是,我得到这个:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-108-ce962754d553> in <module>()
----> 2 axs[0, 0].boxplot([df1['x'], df2['x']])
      3 plt.show();
      4 

TypeError: 'AxesSubplot' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

python matplotlib typeerror

5
推荐指数
1
解决办法
9936
查看次数

Python:循环连接多个 (200+) netCDF 文件以形成一个文件

我有大量(200 多个)netCDF 文件,这些文件按日期/时间进行索引,并包含单个位置 3 小时的降水测量值,涵盖 20 年,下面显示了一个简短的示例。

                        ppt     latitude    longitude
time            
2017-03-01 00:00:00     0.00    16.625      -62.375
2017-03-01 03:00:00     0.00    16.625      -62.375
2017-03-01 06:00:00     0.00    16.625      -62.375
2017-03-01 09:00:00     0.00    16.625      -62.375
2017-03-01 12:00:00     0.00    16.625      -62.375
2017-03-01 15:00:00     0.00    16.625      -62.375
Run Code Online (Sandbox Code Playgroud)

每个文件都包含一个月的数据。我的目标是将所有这些文件连接成一个包含 20 年所有数据的文件。到目前为止,我已经推断出一种可能的前进方式是从每个 netCDF 文件中提取数据并将它们放入一个数据帧中:

import xarray as xr
import pandas as pd

ds = xr.open_dataset('ppt_1_201703.nc')
df = ds.to_dataframe()
Run Code Online (Sandbox Code Playgroud)

如果我有少量文件,使用 concat([df, df2, df3]) 就足够了,我会手动从每个 netCDF 文件中提取数据。然而,对于如此大量的文件,这种方法至少可以说是耗时的。

到目前为止,我的想法是相信最好的方法是一个 for 循环,它根据每个文件的名称循环遍历每个文件并为每个文件生成一个数据帧。然后我需要另一个 for 循环来连接每个数据帧。

我正在纠结如何构建这些循环。文件名是这样的:

ppt_1_199801.nc
ppt_1_199802.nc
ppt_1_199803.nc
...
ppt_1_201610.nc
ppt_1_201611.nc
ppt_1_201612.nc …
Run Code Online (Sandbox Code Playgroud)

python netcdf pandas python-xarray

3
推荐指数
1
解决办法
2330
查看次数

带有 2 个 y 轴的分组箱线图,每个 x 刻度有 2 个绘制变量

我正在尝试制作一个 18 年的月降雨量和洪水频率记录的箱线图。即每个 x 刻度是月份,每个 x 刻度与两个箱线图相关联,一个是降雨量,一个是洪水频率。到目前为止,我已经设法使用 seaborn 绘制了这些图(请参阅以下代码和图像),但是我不知道如何创建带有两个 y 轴的箱线图,这是我需要的,因为每个变量的比例不同。

数据是这样的(数据集中flood_freq的最大值是7,这里没有显示):

    Group   Rainfall    Flood_freq
0   Jan     115.679997  0
1   Jan     72.929999   0
2   Jan     39.719999   0
3   Jan     46.799999   1
4   Jan     54.989998   0
...
212 Dec     51.599998   0
213 Dec     45.359999   0
214 Dec     10.260000   0
215 Dec     52.709998   0
Run Code Online (Sandbox Code Playgroud)

这是我使用的代码:

dd=pd.melt(FBPdf,id_vars=['Group'],value_vars=['Rainfall','Flood_freq'],var_name='Data')
sns.boxplot(x='Group',y='value',data=dd,hue='Data')
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此处输入图片说明

从那以后,我查看了 seaborn 文档,它似乎不允许 2 y 轴(带有 2 y 轴的 Seaborn boxplot)。有没有人能够为我想要实现的目标提供潜在的替代方案?上面链接中的解决方案与我遇到的这个双 y 轴和分组箱线图问题无关。

非常感谢您提前!

python matplotlib boxplot seaborn

1
推荐指数
1
解决办法
1145
查看次数