gpt4 book ai didi

python - 更改堆积面积图中某一段的透明度

转载 作者:行者123 更新时间:2023-12-01 06:55:04 25 4
gpt4 key购买 nike

假设我有一些时间序列数据要显示,我希望查看者了解两件事:保证值 (y1) 和上限 (y2)。

我想通过堆积面积图来显示它(使用 matplotlib,或者在下面的示例中,通过 pandas 包装器)。

import numpy as np
import matplotlib.pyplot as plt

# --- Define df ---
df = pd.DataFrame({
'x':range(1,6),
'y1':[1,4,6,8,9],
'y2':[2,2,7,10,12]})

# --- Set xaxis as index ---
df.set_index('x', inplace=True)

# --- Plot using pandas ---
fig, ax = plt.subplots()
df.plot.area(ax=ax)

baseline

为了表明 y2 是上限,我想在不影响 y1 的 alpha 的情况下降低 y2 的透明度(alpha)。由于 alpha 参数不采用列表(即 [1, 0.5]),因此我通常会通过直接访问行来完成此操作。

for line in fig.gca().lines:
line.set_alpha(0.1)

但是这并没有改变任何事情。我也尝试过使用 plt.stackplot() 也没有结果。

如何访问堆积面积图中设置的单个 y 值的透明度?

最佳答案

一种方法是获取默认 matplotlib 颜色循环(橙色)中第二种颜色的 RGBA 形式,并将其传递给 df.plot 。修改后的可运行代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import to_rgba

# --- Define df ---
df = pd.DataFrame({
'x':range(1,6),
'y1':[1,4,6,8,9],
'y2':[2,2,7,10,12]})

# --- Set xaxis as index ---
df.set_index('x', inplace=True)

# --- Get default orange, make it translucent ---
default_colors = plt.rcParams['axes.prop_cycle'].by_key()['color']
# to_rgba returns a tuple; python tuples are immutable.
# Convert to list in order to modify the last element (alpha channel)
new_orange = list(to_rgba(default_colors[1]))
# Change alpha channel from 1 to 0.2
new_orange[-1] = 0.2

# --- Plot using pandas ---
fig, ax = plt.subplots()
df.plot.area(ax=ax, color=['C0', new_orange])

原始答案如下

这是一个脆弱的解决方案,仅适用于您的特定绘图顺序:获取轴的子元素列表,然后更改第二个子元素(橙色多边形)和第四个子元素(橙色线)的 alpha 值)。在现有代码之后运行此代码:

# --- Reduce alpha of orange polygon and line ---
children = ax.get_children()
children[1].set_alpha(0.2)
children[3].set_alpha(0.2)

Modified plot

关于python - 更改堆积面积图中某一段的透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58847460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com