【问题标题】:How to Make matplotlib plt.fill_between Work Successfully如何使 matplotlib plt.fill_between 成功工作
【发布时间】:2020-11-02 03:01:17
【问题描述】:

我已经看过一些关于此的帖子,但到目前为止没有一个有效。我有一个 pandas 数据框 wp_df(请原谅列格式错误,来自复制/粘贴,但你明白了):

wp  game_seconds_remaining game_half
18906  0.901082                     0.0  Overtime
18905  0.932920                    22.0  Overtime
18904  0.688796                    28.0  Overtime
18903  0.735589                    32.0  Overtime
18902  0.730993                    72.0  Overtime
...         ...                     ...       ...
18749  0.471634                  3664.0     Half1
18748  0.513039                  3702.0     Half1
18747  0.541705                  3743.0     Half1
18746  0.541372                  3776.0     Half1
18745  0.564195                  3813.0     Half1

我使用 plt.plot() 从 wp_df['wp'] 绘制了一条散点图线,结果如下图:

为了视觉方便,我添加了一些水平线和垂直线。我想在 y = 0.50 处的红色散点图线和蓝色水平线之间的区域进行着色。 --> 请注意,我已经更改了 x 和 y 刻度。 X 范围从 wp_df['game_seconds_remaining] 的最大值(在本例中为 3813.0)到 0.0(x 轴翻转),y 范围从 0.0 到 1.0。

无论如何,我想在水平线的两侧以 0.50 对红色散点线和水平线之间的区域进行阴影处理,每个区域使用不同的颜色。我尝试为阴影的一侧选择plt.fill_between(wp_df['wp'], 0.50, color='blue'),但这没有成功。

对我如何完成这项工作有什么建议吗?

【问题讨论】:

  • 您需要 fill_between 的 x 值。也许plt.fill_between(wp_df['game_seconds_remaining'], wp_df['wp'], 0.50, color='blue', alpha=0.3)。 (添加 alpha 有助于使图表的颜色不会太浓。)
  • 很好,这很好,并填充在红线和 y=0.5 线之间。但是,它填满了这条线的两边。我是否需要将我的线分成 > 0.50 和

标签: python pandas matplotlib graph graphics


【解决方案1】:

只需根据您对 JohanC 的评论填写一些额外内容。您可以使用fill_betweenwhere 条件来指定要填充的特定块。有一个很好的例子here,但这里有一个更类似于你的数据的例子:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

x = range(200)
y = np.concatenate((np.random.randint(0,50,50), np.random.randint(50,100,50),
                    np.random.randint(0,50,50), np.random.randint(50,100,50)))

fig, ax = plt.subplots(figsize=(7,3.5))

ax.plot(x, y, color='red')
ax.axhline(50,0,200,color='blue')

ax.fill_between(x,y,50,where=(y<50), alpha=.3, color='orange')
ax.fill_between(x,y,50,where=(y>=50), alpha=.3, color='blue')

因此,如果您有一个带有 两个 选项的条件(即高于或低于 50),您可以使用 两个 调用 fill_betweeny&lt;50y&gt;=50 是布尔数组,表示 y 高于和低于 50 的点。因此请注意,这两个调用在这里填充了绘图的 4 个不同区域。

注释中来自@JohanC 的代码应简单修改以复制上述内容!

【讨论】:

  • 非常感谢!这效果惊人。有些区域没有完美填充,但我刚刚添加了interpolate=True,它按预期工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 2020-10-18
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2018-01-25
相关资源
最近更新 更多