簡體   English   中英

基於條件的 plot 的着色區域

[英]Coloring areas of a plot based on conditions

我有以下代碼

import os
import pandas as pd
import seaborn as sns 
from matplotlib import pyplot as plt

import numpy as np

d1 = {'col1' : np.random.rand(5), 'col2' : ['2', '2', '1', '1', '3']}

dt1 = pd.DataFrame(data=d1)

sns.set_style("whitegrid")
p = sns.lineplot(data=dt1['col1'])
p.set_xticks(range(5))
plt.show()

簡單來說

我得到圖片:

時間繪圖

我想根據col2中給出的整數為網格賦予特定的顏色。 例如,如果我在col2的第一個 position 中有 integer 2 ,我想用黃色為網格間隔[0,1]着色。

更多信息

你可以看到我有一個 DataFrame 有兩列:

  • col1 是一個包含連續變量(時間)測量值的數組
  • col2 是一個包含整數的數組,每個 integer 代表一個影響 col1 中相應索引處測量的事件。

舉個例子,索引dt1.iloc[1,0]處 col1 中的時間測量受到dt1.iloc[1,1]中包含的 integer 描述的事件的影響。 我想直觀地顯示col2中的事件描述的條件,以便更好地了解它對col1中報告的測量值的影響。

也許我想更改網格顏色的行 plot 不是最好的工具,所以我也願意接受其他建議。

虛擬數據

import pandas as pd
import numpy as np

n = 20    # number of records
rng = np.random.default_rng(seed=42)
condition = rng.integers(1, 4, n)
measures = condition * rng.random(n)
df = pd.DataFrame({'col1' : measures, 'col2' : condition.astype(str)})
df.rename_axis('index', inplace=True)

seaborn 散點圖和線圖的組合

我們可以在一個布局中將 2 個圖與附加參數ax結合起來:

sns.set_style("whitegrid")

fig, ax = plt.subplots(1,1,figsize=(15,5))
sns.lineplot(data=df, x='index', y='col1', linestyle='--', color='grey', ax=ax)
sns.scatterplot(data=df, x='index', y='col1', hue='col2', palette='tab10', s=150, ax=ax)
ax.set_xticks(df.index)

plt.show()

圖片

Plotly 條形圖

作為一個選項,我們可以使用plotly IMO 條形圖似乎非常相關:

import plotly.express as px

colormap = {'1':'DodgerBlue','2':'YellowGreen','3':'DarkOrange'}
px.bar(df, df.index, 'col1', 'col2', color_discrete_map=colormap)

圖片

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM