python - 更改堆积面积图中一个线段的透明度
问题描述
假设我有一些时间序列数据要显示,我希望查看者带走两件事:保证值 (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)
为了表明 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)
推荐阅读
- wso2-am - 从 WSO2 APIM 到端点的自定义消息
- jquery - 使用 laravel 以模态方式传递数据
- reactjs - 如何在搜索中 e.target 不是每个人的符号?
- c# - invalid column name , parameter from c#
- c - 如何打印每个进程的pid?
- node.js - 从 Firestore 获取异步值
- python - 让 Pandas 找出在 pd.read_excel 中要跳过的行数
- ruby-on-rails - 如何使用 Rspec 知道控制器方法的流程
- c# - 在我对 C# 中的 char 数组的地址进行异或后,无法获得与 Delphi 代码相同的结果
- html - 无法在白色方块所在的位置插入 fontawesome 图标